C 언어를 제외한 모든 프로그램 언어는

객체지향 프로그램 언어(Object-oriented

Programming Language)로

 

 

 

문자 그대로 객체를 우선으로 생각해

프로그래밍한다는 의미를 가지고 있으며

 

 

 

컴퓨터 프로그램을 명령어의 목록으로 보는

시각에서 벗어나 여러 개의 독립된 단위인

'객체'들의 모임으로 파악하고자 하는 것을

말한다.

 

 

 

이와 같은 객체들은 오늘 공부하는 class

라는 것을 기반으로 만들기에 프로그래밍

언어는 곧 클래스 기반의 객체 지향

프로그래밍 언어라고 할 수 있다.

 

 

 

객체는 영어로 object라고 하며

프로그래밍에서는 객체를 어떤

속성과 행위를 갖고 있는 대상을

뜻한다.

 

 

 

 


 

 

 

 

 

클래스 기본 구성 요소

 

 

 

 

* 평균 내는 프로그램을 만들어

단계별 구조를 확인해 보자.

 

 

 

 

 

 

 

1. 속성 정의하기

 

 

 

 

먼저 딕셔너리를 사용해 이름과

각 과목별 점수를 속성으로

갖고 있는 어떤 대상을 정의한다.

 

 

 

 

students = [

{"name" : "타쿠대디", "Korean" : 96, "English": 89, "Math": 91, "Music": 99 },

{"name" : "시온대디", "Korean" : 95, "English": 88, "Math": 93, "Music": 89 },

{"name" : "대디유댕", "Korean" : 97, "English": 85, "Math": 92, "Music": 94 }

]

 

 

 

 

 


 

 

 

 

 

2. 행위 정의하기

 

 

 

 

위 속성을 기반으로

총점을 구하고 평균을 구하고

이를 출력하는 등의 행위를

정의한다.

 

 

 

 

for student in students:

score_sum = student["Korean"] + student["Math"] +\

student["English"] + student["Music"]

 

score_average = score_sum / 4

 

print(student["name"], score_sum, score_average, sep="\t")

 

 

 

 

 

여기까지만 진행해도

일단 원하는 결과는

얻을 수 있다.

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

3. 이제 각각의 행위를

함수로서 구현을 해보자.

 

 

 

 

def 총점(student):

def 평균(student):

def 출력(student):

 

 

 

 

각각의 함수들은 매개변수로

딕셔너리의 키와 값을 담은

student를 받을 것을 가정한다.

 

 

 

이제 각각의 리턴 값을 추가해 준다.

 

 

 

 

def 총점(student):

return student["Korean"] + student["English"] +\

student["Math"] + student["Music"]

 

def 평균(student):

return 총점(student) / 4

 

def 출력(student):

print(student["name"], 총점(student), 평균(student), sep="\t")

 

 

 

 

 

이렇게 구현을 하게 되면

학생의 속성과 학생의 행위가

딕셔너리와 함수로서 구현이

되었다고 말할 수 있다.

 

 

 

이처럼 어떤 속성과 행위를

갖는 것을 정의하고 그것을

기반으로 프로그램을 만들었기

때문에 객체지향 프로그래밍을

했다고 표현할 수 있겠다.

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

4. 객체를 만드는 함수

 

 

 

 

위 예제의 딕셔너리를 보면 내용이

많기 때문에 작성 중에 오타가 날

염려가 있고, 하나하나 일일이 작성하는

것이 번거로우며 혹 추가해야 하는 양이

많아질 경우 유지 보수 측면에서

결코 좋은 코드라고 할 수 없다.

 

 

 

때문에 이를 보완하기 위해

어떤 객체를 생성하는 함수를

만들어 사용하게 되었다.

 

 

 

def 학생_정보(name, Korean, English, Math, Music):

return {

"name" : name,

"Korean" : Korean,

"English" : English,

"Math" : Math,

"Music": Music

}

 

 

 

이러한 형태로 학생을 생성하는

함수가 있다면 오탈자를 줄일 수

있고 코드 양도 줄일 수 있으며

유지 보수하기도 편리해진다.

 

 

 

이제 각 매개변수에 전달할

값들을 리스트 형태로 담아

작성해 주면 된다.

 

 

 

 

 

 

 

 

 

 

코드 전체를 보면

맨 처음 작성한 코드보다

길이 면에서 길어졌기 때문에

그다지 좋지 않은 코드처럼

여겨질 수 있겠지만

 

 

 

실질적으로 객체를 함수로

한번 정의하고 나면 나머지 코드의

내용은 정말 쉽게 읽을 수 있고

보기에도 간결하며 유지 보수는

말할 것도 없이 좋아지기 때문에

이것이 더 좋은 코드라고 할 수 있겠다.

 

 

 

 

 

 

 

 

 

 


 

 

 

 

5. class

 

 

 

많은 개발자들이 속성과

행위를 합치는 4번과 같은

형태로 코드를 작성하기 시작하니

 

 

 

프로그램을 개발하는 사람들이

위 형태의 코드를 쉽게 작성할 수

있게 구문을 만들어 주었는데

그것이 바로 class이다.

 

 

 

기본 형태는 다음과 같은데

 

 

 

class 학생:

def __init__(self):

 

 

 

중요한 내용으로는

__init__이라는 함수명과

클래스 내부의 함수들은

첫 번째 매개변수 반드시

자기 자신, 즉 self를 갖는다는 것,

 

 

 

또한 함수 내부의 속성이나

함수 자체에 접근할 때는

self.을 사용한다는 것이 되겠다.

 

 

 

 

 

 

 

 

이제 출력을 위해

전체 코드를 보자.

 

 

 

 

 

 

 

각 함수들의 매개변수는

자기 자신들이기 때문에

별도의 매개변수를 넣을

필요가 없으며 함수를

정의할 때는 self,

 

 

 

그밖에 호출 시에는

self.함수명 (비워둔다)

형태로 사용한다.

 

 

 

리스트 내부의 값은

class 명을 넣으면 되고

각 값들은 인자들로 호출 시

init이라는 함수에 전달되게 된다.

 

 

 

마지막 출력 부분 역시

출력 함수를 호출하고 있기

때문에 매개변수는 필요 없고

리스트 값들을 전달할 것이기에

값을 담은 키워드를 앞에 붙여주었다.

 

 

 

 

 


 

 

 

 

 

프로그래밍 언어는 기본적으로

영어의 어순을 따라가게 된다.

 

 

 

주어 + 동사 + 목적어

 

 

 

초기 프로그래밍 언어는

컴퓨터에게 명령한다는 의미에서

주어를 생략하고 동사와 목적어로

작성을 했었다.

 

 

 

예로 print ('x')

=> x를 출력해라 식으로

명령을 하는 것.

 

 

 

그래서 3번 예제의

함수를 사용한 코드를 보게

되더라도

 

 

 

총점을 구해라! 학생을

평균을 구해라! 학생을

 

 

 

이라는 형태로

동사 + 목적어 형태의

명령어로 작성되어 있음을

알 수 있다.

 

 

 

하지만 마지막에 작성한

클래스로 작성된 코드를 보게 되면

self. 행위의 형태로

 

 

 

주어+동사+목적어를 가지고

주어가 어떤 행위를 한다는 것

자체에 초점이 맞춰져 있다고

할 수 있다.

 

 

 

그래서 함수만 사용한 코드와 달리

 

 

 

학생이 출력을 한다 - 학생. 출력()

학생이 평균을 낸다 - 학생. 평균()

학생이 총합을 낸다 - 학생. 총합()

 

 

 

형태로 코드가 작성되어 있음을

확인할 수 있는데 바로 이

class 형태로 코드를 작성하는 것이

객체지향 프로그래밍 언어의

기본적인 형태라고 생각하면 된다.

 

 

 

개념적으로는 그냥 객체를 구분해서

생각하고 객체끼리 상호작용하는

형태로 코드를 작성하기만 해도 모두

객체지향 프로그램이라고 할 수 있지만

 

 

 

그것의 대표적인 형태가 바로 마지막

코드 예시 즉, class로 구현을 하고

그것을 기반으로 코드를 작성한다는 것이

객체 지향 프로그래밍을 하겠다는 의미라고

볼 수 있다.

 

 

 

class를 사용하는 순간부터

class를 위한 전폭적인,

객체지향과 관련된 기능들을

제공받을 수 있단다.

 

 

 

 

 

 


 

 

 

 

도움: 유튜브 혼자공부하는 파이썬 윤인성님

https://www.youtube.com/watch?v=A7d1mMdhePY&list=PLBXuLgInP-5kr0PclHz1ubNZgESmliuB7&index=46

 

 

 

 

 

 

 

 

 

728x90
반응형

+ Recent posts