-
TIL 2023.04.28내일배움캠프 2023. 4. 28. 20:59
Object Oriented Programming
이게 대체 뭔말임?
객체 지향 프로그래밍
파이썬 처음 배울 땐 굉장히 명시적으로 진행했습니다.
이런 예였죠. 뭔가 n 줄에서 뭘 하고 다음 줄에서 뭘 하고
나중에 복잡한 프로그램들 몇만줄 몇백만줄
점점 가면 갈 수록 덩치가 커지면서 도저히 이렇겐 못 쓰겠다
어디서 뭐가 일어나는 지 모르겠다
그래서 개발자들이 생각
이렇게 하지 말고 현실에서 생각하는 것처럼 해보자
현실에선 카페 갔을 떄
객체가 존재 영어로 오브젝트 뭔가 물건 실재하는
손님이라는 물건(객체, 존재)가 있습니다
손님이라는 존재가 무언가를 선택할 수 있다.
메뉴판 이란 것도 존재
메뉴판 안에 항목들이 존재
손님이 메뉴판에 있는 카라멜마끼야또 선택할 수 있다.
현실에서 동작할 때 그렇다
또 바리스타 라는 존재(객체)가 있다
손님이 메뉴판에서 메뉴를 고르고 바리스타한테 주문을 함
바리스타가 커피를 제조
이런 식으로 코드를 짜고 싶다~
그것을 하기 위해 나온게 class instance
우리가 객체라는 것을 봤을 때 상태라는게 있고 행동이 있다.
상태가 코딩에선 속성(어트리뷰트)
행동이 메서드
메뉴판의 메뉴 = 상태
손님이 커피를 선택 = 행동
주문 = 행동
제조 = 행동
사람을 예로 들 때가 많이 있다.
커피도 하나의 커피 클래스라고 생각
커피 클래스에서 여러가지 커피 객체
사람도 사람이라는 클래스
여러 사람들 클래스는 같은데 객체가 다르다
객체지향과 절차지향
기존 줄줄이 코딩이 절차지향
클래스가 객체지향
객체지향 = [ 클래스, 메시지전달, 상속, 추상화, 캡슐화, 다형성 ]
클래스와 인스턴스
붕어빵틀과 붕어빵
인스턴스는 실체
사람의 생각에 가깝게 코딩을 하고 싶다가 객체지향이다
속성=어트리뷰트=프로퍼티
클래스 안에서 정의된 함수 = 메서드
print(dir(instance)) 하면 사용가능한 메서드 볼 수 있음
__init__: 인스턴스 만들 때 바로 실행됨
__str__: print 할때 보여질 거 만들 수 있음
.speed vs get_speed()
캡슐화 (Encapsulation)
객체지향 프로그래밍에서는 데이터와 그 데이터를 다루는 메서드들을 하나로 묶어 캡슐화합니다.
캡슐화된 객체는 외부에서 직접적으로 접근할 수 없으며, 메서드를 통해서만 데이터를 조작할 수 있습니다.
이를 통해 데이터의 보안성과 안정성을 높일 수 있습니다.
getter와 setter
객체 내부의 중요한 데이터는 외부에서 직접 접근하지 못하도록 제한하고, getter와 setter를 이용해 안전하게 접근하도록 하는 것이 좋습니다.
객체 내부의 일부 데이터는 외부에서 직접적으로 접근이 필요하지 않을 수 있으며, 이러한 경우에는 getter와 setter를 만들 필요가 없습니다.
예를 들어, 다른 클래스나 모듈에서 사용하지 않는 데이터인 경우에는 getter와 setter를 만들 필요가 없습니다. 또한, 객체의 속성 중 일부는 한 번 설정되면 바뀌지 않아야 하는 경우가 있을 수 있습니다. 이 경우에도 setter를 만들 필요가 없습니다.
상속
상속은 이미 정의된 클래스에서 속성과 메서드를 물려받아 새로운 클래스를 생성하는 것을 말한다.
상속을 통해 코드 재사용성을 높일 수 있으며, 계층적인 구조를 만들 수 있다.
다형성
메서드 이름은 똑같은데 하는 건 다르다
메서드 오버라이딩
다형성은 같은 이름의 메서드를 다른 클래스에서 다르게 구현할 수 있도록 하는 것을 말합니다.
다형성을 이용하면 코드의 가독성과 유지보수성을 높일 수 있습니다.
추상클래스
Object Oriented Programming
현실에서 일어나는 것처럼 코딩을 하자
클래스 = 붕어빵틀
인스턴스 = 붕어빵
클래스에는 메서드와 어트리뷰트가 있다.
캡슐화 게터와 세터함수 사용하는 이유 보안을 위해
상속 만들어둔 클래스를 갖다 상속을 받아서 기능 추가
다형성 같은 이름의 메서드지만 클래스마다 기능을 다르게
추상클래스 인스턴스를 만들지 않는 클래스를 만들어 상속을 받아 메서드 구현
'내일배움캠프' 카테고리의 다른 글
TIL 2023.05.01 (0) 2023.05.01 WIL 내일배움캠프 7주차 (0) 2023.04.28 TIL 2023.04.27 (0) 2023.04.27 TIL 2023.04.26 (0) 2023.04.26 TIL 2023.04.25 (0) 2023.04.25