클래스

클래스란 '데이터의 설계도'를 의미한다. 이 설계도에는 데이터가 어떤 특징의 파라미터를 갖는지, 그리고 어떤 기능을 갖고 있는지에 관해 쓰여있다.

 메소드는 일련의 처리를 준비해 놓고 사용하고 싶을 때 편리하게 호출할 수 있게 하기 위해 존재하는 것인데 클래스는 이것보다 좀더 큰 개념이다. 클래스도 마찬가지 이지만 클래스 안에는 변수와 함수가 함께 들어간다.

클래스를 사용하면 좋은점

- 프로그램의 규모가 커졌을 때 의미 있는 집합체 단위로 프로그램을 정리할 수있다.

- 설계도라고 부른 것과 관련 있는데, 설계도가 있다면 양산이 가능하다.

클래스를 만드려면

설계도는 프로그램을 만드는 방법이 적힌 도면이다. 프로그램을 사용하기 위해서는 먼저, 설계도를 따라 제품을 만들어야 한다. 프로그램의 세계에서 설계도에 따라 제작한 실제 제품을 인스턴스(instance)라고 한다. 그리고 인스턴스를 만드는 것을 인스턴스화 라고한다.

클래스의 서식

class 클래스 이름:
    변수의 정의
    함수의 정의

객체

객체란, 한마디로 말하자면 데이터와 메소드가 묶인 것이다. 즉 객체는 메모리에  존재하는 개별 데이터를 가르키는 개념이다.

-객체는 데이터와 기능(메소드)를 가진다.

-데이터형도 데이터와 메소드를 가지므로 객체다.

-클래스는 데이터와 메소드에 대한 설계도이고, 설계도(클래스)로 제품을 제작하면 객체가 된다.

메소드의 인자 self

클래스안에 메소드를 정의할 떄는 일반 함수를 정의할 떄와 다르게 메소드의 첫 번째 인자로 self라는 키워드를 써야한다. 이유는 같은 클래스 안에 정의했어도 메소드 안에서 메소드 밖에 있는 변수를 바로 사용할 수 없기 때문이다. self를 사용하지 않는다면 에러가 뜨는데 에러 내용은 '정의되어 있지 않다'이다. 이는 참조할 수 있는 범위에 정의되어 있지 않다는 뜻이다.

class man:
    def salary(self): // 셀프를 적지 않을 경우 참조오류가 난다.
        retrun "십만원"
        
kim = man()
kim.salary()

//실행결과
'십만원'

하지만 굳이 self가 아닌 다른 문자를 적어 넣어도 되지만 관행적으로 self로 적는다. 이유는 코드를 적은 본인 이외의 다른 사람이 프로그램을 읽거나 나중에 다시 읽을때 혼란스럽기 때문이다.

 

__init__

클래스는 설꺠도고 그 설계도를 바탕으로 인스턴스를 만든다라고 했는데 그런 제품을 만들 때 초기값을 설정하는것이 __init__이다. 서식은 이렇다

class 클래스 이름 :
    def__init__(self, 인자, ...):
        self. 초기 설정하고 싶은 변수 = 인자
        초기 수행 처리
    def 메소드 이름:
    	메소드 처리

위 man 클래스에 __init__을 더하면

class man:
    def __init__(self, bouns):
    	self.bouns = bouns
    def salary(self): // 셀프를 적지 않을 경우 참조오류가 난다.
        salary = 10000 + self.bouns
        retrun salary
        
kim = man(5000)
kim.salary()

//실행결과
15000

이처럼 인스턴스화 할때 초깃값을 전달할 수 있으면 클래스를 더 편하게 사용할 수 있다. 

'프로그래밍 공부 > Python' 카테고리의 다른 글

[Python] 4. 파이썬의 기본(4)  (0) 2020.01.18
[Python] 3. 파이썬의 기본(3)  (0) 2020.01.14
[Python] 2. 파이썬의 기본(2)  (0) 2020.01.12
[Python] 1. 파이썬의 기본(1)  (0) 2020.01.09

함수(메소드)의 (인자)호출 방식은 

Call by value

Call by reference

두 개가 있다. 말그대로 '값에 의한 호출' , '참조에 의한 호출' 이다. 

기본 타입이 인자로 전달되는 경우

byte, char, int double 등 자바의 기본 타입이 인자로 전달되는 경우에는 호출자가 건네는 인자의 값을 복사하여 메소드의 인자에 전달한다. 

public class Test {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int num1 = 10, num2 = 20;
		
		System.out.println("num1 = " + num1);
		System.out.println("num2 = " + num2);
		swap(num1, num2);
		System.out.println("swap");
		System.out.println("num1 = " + num1);
		System.out.println("num2 = " + num2);
	}
	
	static void swap(int num1, int num2) {
		int temp;	
		temp = num1;
		num1 = num2;
		num2 = temp;
	}
}

결과는

num1 = 10
num2 = 20
swap
num1 = 10
num2 = 20

메소드 swap을 썻음에도 불구하고 num1,2값은 변화가 없다. 메소드 안에서 위치를 바꾼다고 해서 원본 데이터가 바뀌는 것이 아니라는 것을 알 수 있다. 위 코드 메소드 내에서 두 수를 바꾸는 것은 단지 복사된 값을 바꾸는 것이다. 따라서 자바는 기본 데이터 타입이 인자로 전달되는 경우는 Call by value(값에 의한 호출)로 처리된다.

Call by value(값에 의한 호출)

Call by value(값에 의한 호출)는 메소드 호출 시에 사용되는 인자의 메모리에 저장되어 있는 값을 복사하여 보낸다.

객체 레퍼런스가 인자로 전달되는 경우

메소드 인자로 객체에 대한 레퍼런스가 전달되는 경우 객체가 통으로 전달되는 것이 아니고 레퍼런스 값만 복사되어 전달된다. 이런 경우는 커스텀 클래스를 사용한다.

public class Test {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		NumberClass num1 = new NumberClass(10);
		NumberClass num2 = new NumberClass(20);
		
		System.out.println("num1 = " + num1.num);
		System.out.println("num2 = " + num2.num);
		swap(num1, num2);
		System.out.println("swap");
		System.out.println("num1 = " + num1.num);
		System.out.println("num2 = " + num2.num);
	}
	
    
	static void swap(NumberClass num1, NumberClass num2) {
		int temp;	
		temp = num1.num;
		num1.num = num2.num;
		num2.num = temp;
	}
}

class NumberClass {
	int num;
	
	NumberClass (int num) {
		this.num = num;
	}
}

결과는

num1 = 10
num2 = 20
swap
num1 = 20
num2 = 10

위 코드에서는 참조값을 직접 바꾼것이 아니라 객체의 참조값을 통해 그 객체의 멤버변수에 접근해 값을 바꾼것이다. 힙영역에서 참조 되어지는 값 자체를 바꾸어 call by reference 처럼 보이게 한것이다. 중요한 것은 자바에서 메소드 호출 시 객체가 전달되는 경우 객체에 대한 레퍼런스만 복사되지 객체가 통째로 복사되지 않는다는점이다.

Call by reference(참조에 의한 호출)

Call by reference(참조에 의한 호출)는 메소드 호출 시 사용되는 인자 값의 메모리에 저장되어 있는 주소를 복사해 보낸다.

배열이 인자로 전달되는경우

배열이 메소드의 인자로 전달되는 경우도 객체 레퍼런스가 인자로 전달되는 경우와 동일하다. 배열이 통째로 전달되는 것이 아니라 배열에 대한 레퍼런스만 전달된다.

 

결론은 자바는 기본형 타입 변수와 참조형 타입 변수 둘 다 Call by value 방식으로 받는다. 하지만 기본형 타입은 그 값을 복사해서 넘겨주지만 참조형 타입은 레퍼런스를 복사해서 넘겨주는 차이가있다.

에러란?

에러란, 프로그램이 예기치 않게 멈추는 현상이다. 에러가 발생하는 원인은 다양하다

에러의 종류

-파이썬의 구문(문법)이 잘못되었을 때

-실행 중에 데이터를 처리할 수 없을 때

파이썬의 구문(문법)이 잘못되었을 때

에러 메세지로는 SyntaxError(문법에러)가 표시된다. 파이썬의 에러 메세지는 틀렸다고 생각되는 부분을 ^로 보여준다 기계적으로 판단하고 있으므로 반드시 정확하다고 할 순 없지만, 참고할 수는 있다.

실행 중에 데이러를 처리할 수 없을 때

주로 함수 사용중 함수가 정의되어 있지 않아 아무것도 할 수 없다는 에러이다(NameError). Syntax에러와는 달리 실행하기 전까지는 알 수 없다.

여러가지 에러 패턴이 있지만 어떠한 에러라도 가장 밑 줄에 표시된다.

예외란?

실행 중에 데이터를 처리할 수 없어 발생하는 에러이다.

예외 처리

예외가 발생할 만한 곳이나 실제 예외가 발생한 위치에 예외가 발생했을 때 어떤 처리를 수행해야 할지 기술해 준다. 그냥 프로그램이 종료되지 않도록 상황에 맞게 메시지를 출력하거나 로그를 남기도록 하는것이 일반적이다.

try:
    처리 A #예외가 발생할 수 있는 처리
except :
    처리 B

예외가 발생할 수 있는 문장을 try안에 넣고 예외 발생시 except 밑의 처리 B가 실행된다. 예외가 발생하지 않는다면 그대로 처리 A가 실행된다. 예외 처리가 중요한 이유는 프로그램이 예외로 인해 종료되는 것을 방지하는 것이라 볼 수 있다.

예외의 내용 획득

예외가 발생했다면 그 예외를 처리하기 위해 어떠한 예외가 발생했는지 아는 것이 매우 중요한데 Exception as ex 라는 키워드를 사용하여 알 수 있다. ex라는 객체의 args에는 에러 메세지가 들어있는데 print로 이용해 어떤 에러인지 내용을 출력할 수 있다.

try :
    예외가 발생할 수 있는 처리 
except Exception as ex :
    예외가 발생할 경우 실행되는 처리
    print(ex.args) # 발생한 예외의 내용을 출력

예외 Document

파이썬 3

https://docs.python.org/ko/3/library/exceptions.html

파이썬 2

https://docs.python.org/ko/2/library/exceptions.html

'프로그래밍 공부 > Python' 카테고리의 다른 글

[Python] 5. 파이썬의 기본(5)  (0) 2020.01.29
[Python] 3. 파이썬의 기본(3)  (0) 2020.01.14
[Python] 2. 파이썬의 기본(2)  (0) 2020.01.12
[Python] 1. 파이썬의 기본(1)  (0) 2020.01.09

함수란?

여러 가지 처리를 묶어서 하나의 기능으로 정리한 것을 프로그래밍에서는 함수라고 부른다. 프로그램 내에서는 버튼 하나만 누르면 세탁기가 알아서 돌아가듯이 함수가 갖고 있는 기능이 수행된다.

함수를 만드는 방법

함수를 만들 때는 def라는 키워드를 사용한다. 서식은 아래와 같다.

def 함수명():
    처리1
    처리2

함수명은 예약어는 안되며 함수명 뒤에는 반드시 ()를 붙여야 한다.

함수 사용법

함수의 사용은 간단하다. 함수를 호출하면 되는데 함수이름뒤에 ()를 적으면 된다.

def sayhello():
    print('안녕하세요!')
    print('Hello!')
    print('니하오!')

>>>sayhello()
안녕하세요!
Hello!
니하오!

함수가 편리한 이유는 한 번 정의해 두면 나중에 몇 번이고 호출만 하면 같은 처리를 수행할 수 있다는 점이다. 동일한 처리를 반복해서 해야하는 경우 함수를 만들어두고 필요할경우 호출하면 된다.

함수는 데이터를 반환한다.

함수를 호출할 때 데이터를 전달하여 처리를 분기하는 것 이외에 한가지 더중요한 기능이 있는데, 그것은 데이터를 반환하는 기능이다. 처리를 실행한 결과를 함수를 호출한 쪽에 반환해 주는 기능이다. 

def area(radius):
    result = radius * radius * 3.14
    retrun result
    
area(5)

78.5 #출력값.

return은 함수를 호출한 곳에 return의 오른쪽에 쓴 데이터를 반환한다. 위 코드에서는 area함수를 호출하니 78.5가 나왔다. 여기서 함수가 반환하는 값을 리턴 값, 반환 값이라 부른다.

내장함수

내장함수란 프로그래머가 정의하거나 import하지 않아도 사용할 수 있는 기본함수를 말한다.

len() : 인자로 전달한 데이터의 길이나 요소의 수를 반환한다.

len('asdfqwer')

8 #리턴 값

문자열의 문자의 수뿐만 아니라 요소의 수를 셀수도 있다.

arr=['a','b','c','e']
arr.len(arr)

4 #리턴 값

min(), max() : 인자로 전달한 데이터 중에서 가장 큰 이나 작은 값을 반환하는 함수이다.

max(1,2,5,10)
10 #리턴값
min(456,8,789)
8 #리턴값

숫자뿐만 아니라 배열안이나 문자에도 사용할 수 있다. 결과는 숫자 > 알파벳 대문자 > 알파벳 소문자 순으로 크기를 계산한다. 

sorted() : 전달한 데이터를 정렬해 리스트형으로 반환하는 함수다. 정렬 순서는 min(),max()와 같은 숫자 > 알파벳 대문자 > 알파벳 이다.

sorted('asdf')
['a','d','f','s'] #리턴 값
sorted('1Aa')
['1','A','a'] #리턴 값
sorted(1000,2,10,1)
[1,2,10,1000] #리턴 값

print() : 출력을 위해 사용하는 함수.

print('hello world')
hello world

type() : 조사하고 싶은 데이터나 변수를 전달하면 데이터 타입을 반환해 준다.

a=123123
type(a)
<class 'int'>

b='hey!'
type(b)
<class 'str'>

type() 함수는 내가 작성한 코드 뿐만 아니라 남이 작성한 코드를 파악할때도 유용하게 쓰인다.

dir() : 인터렉티브 셀에서 많이 사용하는 내장 함수이다. 어떤 메소드가 있는지 알아볼때 등 사용한다.

 

모든 내장 함수에 대한 정보가 파이썬 공식 사이트에 있다.

파이썬2

https://docs.python.org/ko/2/library/functions.html

 

2. 내장 함수 — Python 2.7.17 문서

2. 내장 함수 The Python interpreter has a number of functions built into it that are always available. They are listed here in alphabetical order. In addition, there are other four built-in functions that are no longer considered essential: apply(), buffer(),

docs.python.org

파이썬3

https://docs.python.org/ko/3/library/functions.html

 

내장 함수 — Python 3.8.1 문서

내장 함수 파이썬 인터프리터에는 항상 사용할 수 있는 많은 함수와 형이 내장되어 있습니다. 여기에서 알파벳 순으로 나열합니다. abs(x) 숫자의 절댓값을 돌려줍니다. 인자는 정수 또는 실수입니다. 인자가 복소수면 그 크기가 반환됩니다. x가 __abs__()를 정의하면, abs(x)는 x.__abs__()를 반환합니다. all(iterable) iterable 의 모든 요소가 참이면 (또는 iterable 이 비어있으면) True 를 돌려줍니다. 다음과

docs.python.org

 

'프로그래밍 공부 > Python' 카테고리의 다른 글

[Python] 5. 파이썬의 기본(5)  (0) 2020.01.29
[Python] 4. 파이썬의 기본(4)  (0) 2020.01.18
[Python] 2. 파이썬의 기본(2)  (0) 2020.01.12
[Python] 1. 파이썬의 기본(1)  (0) 2020.01.09

+ Recent posts