python 정리 - 5

donghani·2023년 10월 15일

📌객체지향 프로그래밍이란(OOP)?

객체지향 프로그래밍(Obeject Oriented Programming)은,
프로그래밍 패러다임 중 하나로, 프로그램을 수많은 '객체(object)'라는 기본 단위로 나누고 이들의 상호작용으로 서술하는 방식

파이썬은 대표적인 객체지향 프로그래밍 언어 중 하나로, 객체지향의 특성은
추상화, 캡슐화, 상속성, 다형성의 특징을 가지고 있다.


📌추상화

추상화는 클래스를 생각하면 된다.
클래스를 만들때 어떤식으로 만들것일까? 를 논리적으로 추상화해서 만드는 것을 말한다.
class안을 추상화해서 만들고
그 안에 instance라는 물리적 실체를 값에 넣는다.(Ex) 메소드, 변수)
추상화
메소드
메소드란, 클래스안에 함수라고 쉽게 생각하면 된다.
클래스와 객체
클래스는 네임스페이스라는 이름과 객체의 매핑 관계가 있는 공간이 있다
현재 class test_class는 cls_var = 10이라는 값이 매핑되어 있다.
여기서 self란?
self는 객체 자신을 참조하는 parameter(매개 변수)로 파이썬 메소드의 첫 argument(인수)이다.

a = test_class()
#라고 하면, 객체의 아이덴티티 값을 

self는 메소드 첫부분에 매개변수로 들어간다.그 뒤에 객체 생성할 때 들어가는 매개변수가 들어간다
이것도 함수 생성할때 처럼 메서드 생성자 생성할 때 잘 생성해야함

class Computer:
	def _init_(self,ram,ssd,hdd):
    	self.ram = ram
        self.ssd = ssd
        self.hdd =hdd
        
imac = Computer('16G','2T','4T')
#이러면 iMac이라는 객체가 생성되고
각각 값들이 ram,ssd,hdd에 전달된다.

📌캡슐화

캡슐화는 -> 속성과 행위를 목적에 맞게 끔 묶어 독립된 단위로 구성하는 것을 말한다.
정보은닉을 하거나 접근을 지정해준다.
접근 지정자 설정
-> 쉽게 정의한 말

파이썬은 public,protected,private 용어리 딱히 안써도 된다.
3가지는 c++,Java에서 클래스에 접근할 때 사용한다.
정의들을 알아보자

public : 정의된 클래스 내부 뿐만 아니라 외부에서도 사용 가능
protected : 상속 클래스 및 클래스 내부에서 사용 가능
private : 클래스 내부에서만 사용 가능
-> 결론적으로 public이 아니면 클래스 안에서만 사용할 수 있다는 뜻이다.

class Computer:
	def _init_(self,ram,ssd,hdd):
    	self._ram = ram #이러면 클래스 내부에서만 ram이라는 인스턴스 변수를 사용가능?
        self.ssd = ssd
        self.hdd =hdd

여기서 ram은 protected, __ram, 을 2개붙인 것이 private가 된다.
protected된 인스턴스 변수는
값을 가져오는 메서드를 getter, 값을 저장하는 메서드를 setter
로 접근이 가능한데 메소드 앞에 get -> getter set -> setter를 붙인다.
이때 @ ->decorateor라는 걸 선언해
@property를 선언하면 get_을 삭제할 수 있다.

class Computer:
	def _init_(self,ram,ssd,hdd):
    	self._ram = ram #이러면 클래스 내부에서만 ram이라는 인스턴스 변수를 사용가능?
        self.ssd = ssd
        self.hdd =hdd
    def set_ram(self, ram):
    	self._ram = ram # 변수에 값을 지정
    def get_ram(self, ram):
    	return self._ram #값을 가져오기 -> 원래는 접근 지정자가 protected라 못가져옴

개선

class Computer:
	def _init_(self,ram,ssd,hdd):
    	self._ram = ram #이러면 클래스 내부에서만 ram이라는 인스턴스 변수를 사용가능?
        self.ssd = ssd
        self.hdd =hdd
    @property #property라는 데코레이터 선언
    def ram(self, ram):#get삭제
    	return self._ram
    @ram.setter
    def ram(self, ram):
    	self._ram = ram
   #코드가 간결해짐

📌상속성

상속성은 자바와 똑같다고 생각하면 된다. -> 자식 클래스가 부모 클래스의 특성과 기능을 물려받는다고 생각해야한다.
자바에서 상속 공부를 했었지만 봐보자
상속
thinking은 Person 클래스에 있는 거지만, person에서 상속받았기 때문에 사용할 수 Student 클래스에서 사용할 수 있다.

상속은 다중의 부모를 두는 것이 가능하다.


📌다형성

같은 메소드의 이름을 다른 동작을 하는 것이다.
자바에서는 메소드 오버로딩이라고 한다.
Phone이라는 클래스에 call()메소드가 있다하자
Smart Phone이라는 클래스에 call()메소드가 똑같이 있다
실행하면 Phone에 정의된 call()메소드대로 작동하고
Smart Phone이라는 클래스에서 정의된 메소드대로 작동한다.
이러한 성질을 다형성이라고 한다.


이처럼 객체지향의 4가지의 성질을 잘 기억하자

profile
컴퓨터 공학과 이방인

0개의 댓글