본문 바로가기

Hello python!/Python_OOP

파이썬_OOP(객체 지향 프로그래밍)_구조체와 클래스

20221014

8일차


파이썬 oop(객체 지향 프로그래밍)

 

oop란 나무위키의 개요에서 아래와 같이 서술한다.

 

프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라,

프로그램을 수많은 '객체(object)'라는 기본 단위로 나누고 이들의 상호작용으로 서술하는 방식이다.

 

객체란 하나의 역할을 수행하는 '메소드와 변수(데이터)'의 묶음으로 봐야 한다.

 


구조체추상화의 개념을 알아야한다.

 

구조체변수명으로 어떤 대상을 프로그래밍적으로 묘사할때 사용한다.

 

예를 들어 사람을 묘사하고 싶을때 여러가지의 목록들이 존재할 것이다.

 

왜냐하면 똑같은 사람은 없기 때문이다.

하지만 사람은 어떤 수의 배열이나 인덱스로 표현이 불가능하다.

 

그래서 어떤 명칭이나 특징을 변수로 잡고 묘사하는게 합리적이다.

 

하지만 변수로 잡았음에도 수 많은 데이터와 변수가 생기고

그걸 인간이 모두 체크할수 없기 때문에

추상화를 하게 되었다.

 

추상화란 가장 식별하기 쉬운 큰 단위의 표현방식으로 전체를 설명하는 느낌이다.

 

예를들어 사람에 대한 표현중 얼굴을 묘사할때 

눈썹의 개수, 코의 높이, 모공개수, 입술의 주름 개수, 등등 모든것을 찾아서 표현할수 있지만

힘들기 때문에 우린 그냥 사람의 얼굴을 묘사할때 눈 코 입 등으로 간단하게 추상화 할 수 있다.

 


 위와 같이 2개의 리스트 안에 단어 2개와 숫자1개가 있지만 우린 저것이 무었을 나타내는지 엄밀히 따지면 모르는게 맞다.

class란 이러한 불편함을 해소하기 위해 특정 대상을 추상화해서 구조체로 만든것이다.

 

조금 더 설명을 하자면

구조체C언어에서 쓰는건데 위의 설명처럼 변수명으로 추상화하여 데이터를 저장했다.

 

 하지만 C언어에서는 메서드를 구조체 내부에 사용하지 않고 외부에 사용하니 불편함이 많았고

이에 불편하여 구조체 내부에서도 메서드를 사용할수있게 만든것이 class다.

 


동적 변수 언어와 정적 변수 언어의 차이를 알고있자.

 


class의 구조는 위의 사진과 같다.

 

우선 첫번째로 내가 원하는 구조체를 class화(class "") 해준다.

* 영어단어가 들어갈 경우 첫 알파벳은 대문자.

 

그리고 그 구조체에 저장하고 싶은 변수명을 설계해준다.

 

 위의 사진에서는 이름과 나이, 종, 주인을 설정했다.

 

이때 메모리에 저장되는 형식은 아래와 같다.

 

cat class(설계도)로 저장되는것을 볼 수 있다.

 


설명하고 싶은 고양이(객체 or 인스턴스)를 클래스로 만들어 준다.

 

 


그리고 설명하는 과정이다.

(위에서 만든 설계도에 정보를 입력하는것)

 


위에서는 고양이 2마리를 표현했지만 고양이 10마리, 100마리, 10000마리를 표현하기에는

너무 불편하다. 그래서 구조체에 전용 함수를 쓴다.

 


일일이 하나의 고양이마다 19번의 정보를 바꿔 가면서 출력하기에 불편함.

 

함수로 지정하면 간단하게 출력 가능

 

 

 


* class는 구조체 내부에 함수를 쓸 수 있다.

  이러한 함수를 메서드라고 칭한다.