객체지향(OOP)의 이해
객체지향(OOP)의 맥락에서 객체는 속성과 함수로 구성
ex) Car 라는 객체가 있을 때
속성 : fuel, speed, steering wheel, coordinate...
함수 : accelerate(), takeLeft()...
객체지향 프로그래밍 : 객체
객체의 특성
- 객체는 다른 객체와 상호작용함
- 프로그램으로 무언가를 구현할 때 그 세계관(scope) 내부의 의미있는 정보의 단위들
- 실제 눈에 보이는 물리적인 객체가 아닌 추상적인 객체로 생각해야
객체지향 프로그래밍 : 클래스
클래스 사용하여 특정 객체 표현 가능
- 클래스는 속성과 행동을 포함하는 객체를 정의
- 속성은 데이터의 요소이고 함수는 특정 작업 수행
- 클래스에는 객체의 초기 상태를 설정하는 생성자 존재
- 클래스는 일종의 템플릿으로 쉽게 재사용 가능
객체지향 프로그래밍 : 메소드
OOP에서 메소드의 역할
- 객체의 행위
- 속성을 이용하여 조작하여 task 수행
OOP의 주요기능 : 캡슐화
- 객체의 기능과 상태정보를 외부로부터 은닉
- 사용자는 객체의 내부 구조 및 상태 직접 수정 불가능
대신 수정 요청
- 요청의 종류에 따라 객체는 getter, setter 같은 특수함수 이용하여 내부 상태 변경
- 파이썬에는 public, private, protected 같은 캡슐화에 필요한 접근제어 키워드가 없음 -> 캡슐화 개념 없음
- 함수나 변수 앞에 언더바( _ ) 를 붙여 접근 제어의 의미를 부여
OOP의 주요기능 : 다형성
다형성의 두가지 의미
- 객체는 함수 인자에 따라 다른 기능 수행
- 동일한 인터페이스를 여러 형식의 객체들이 공유
파이썬은 다형성 지원 언어
ex) + 연산자는 '정수 더하기' 도 되지만 '문자열 합치기' 도 가능
OOP의 주요기능 : 상속
상속이란?
- 어떤 클래스의 기능이 부모클래스로부터 파생되는 것
- 부모 클래스에서 정의된 함수 재사용 가능
기본 기능 확장도 가능
- 파이썬에서는 다중상속 지원
OOP의 주요기능 : 추상화
추상화란?
- 공통적인 속성을 묶어 정의하는 것
ex) 에어컨 - 위치, 기기상태, 바람세기, 날개방향
공기청정기 - 위치, 기기상태, 현재온도, 예약설정
공통적인 속성을 따로 만듦 -> 보니까 상위의 개념으로 정의가 가능함 -> 다른 클래스로 정의 (객체 지향적 방법)
OOP의 주요기능 : 컴포지션
- 객체나 클래스를 더 복잡한 자료구조나 모듈로 묶는 것
- 컴포지션을 통해 특정 객체는 다른 모듈의 함수를 호출 가능 (상속 없이 외부 기능 사용가능)