[멘토] OOP

data_hamster·2023년 7월 4일
0

학습주제
OOP에 대해 알아본다

학습내용
객체지향 관련해 공부한 내용

객체지향의 사실과 오해.

객체지향이란? 절차지향의 반대인가.
프로그래밍 방법론임. 프로그램을 어떻게 작성할 것인가에 대한 말임.
오해.

  • 클래스가 객체지향의 핵심이다.
  • 객체지향이란 현실 세계의 모방

동의하지 않는 시니어도 있음.

막연하게 객체지향을 배우면 생기는 오해들을 바로 잡기 위함.


객체가 중심임.
객체시민: 역할과 협력을 다할 수 있음.
게임에서도 직업이 나뉘는 것처럼. 객체라는 건 각자마다 역할이 있고, 각자의 객체들은 서로 협력하면서 객체 세계를 만들어나감.
하나의 객체는 요청을 하고, 해결할 수 있으면 응답, 아니면 다른 객체에 재요청. 이런식으로 협력이 이뤄짐.

목표는?
사람들 협력을 통해 달성할 수 있는 것. 더 작은 책임으로 분할. 적절한 역할을 가진 사람에 의해 수행.

객체가 주체가 되어 참여함.
요청 - 요청에 대한 결과를 보내줘야함. 처리 못한다고 읽씹 하는게 아니라, 처리 못하면 다른 객체에 요청해서 그 응답을 받아서 넘겨줘야함.

객체

  • 상태
  • 행동
    다른 객체가 무얼 수행하는지는 알 수 있으나, 어떻게 수행하는지는 알 수 없음.

ex 학진님 -> 나에게 = 만원 빌려줘
만원을 준다면, 그 만원을 어떻게 있는지는 몰라도 됨.

만원을 달라는 - 메세지
메세지를 응답함.
처리한다는 책임 - 내가 갖고있음.

메서드 - 수신된 메시지를 처리하는 방법.
메서드를 통해 객체를 호출

나의 객체

  • 만원을 대출, 예금에서 끌어오는 메서드가 있을 수 있음.
    분리해서 생각해야함.

외부에 드러난건 만원을 빌려달라는 메세지만 알 수 있음 (캡슐화)
매서드와 메세지가 분리됨.
은닉화 한다고 생각하면 됨.
정보를 은닉하고 보호하는 내용

알약을 먹을 때 안에 어떤 가루가 있는지는 모름. 굳이 알 필요도 없고.


본질

  • 객체를 이용해 시스템을 분할

  • 자율적인 객체는 상태와 행위를 지니며 자신을 책임짐

  • 메시지로 연결됨

  • 다른 객체와 협력

  • 중요한 것은 어떤 객체들이 어떤 메시지를 주고받으며 협력하는 가.

객체는 어떤 모습을 띄고 있어야 하는가? 어떤 메세지를 주고 받을지.


자바를 배우면 붕어빵을 예시로 들게됨.
객체를 찍어내는 거다. 붕어빵 틀이 있고, 반죽을 넣어 붕어빵(인스턴스)

현실세계를 기반으로 새로운 세계를 창조하는 것임.
객체는 구별자, 행동, 상태를 가짐.

VO value object


객체는 능동적으로 변한다.
표현적 차이를 줄여 구조를 쉽게 예측할 수 있다.

현실세계
사람이 문을 연다.

객체지향 세계
'문을 연다'라는 메시지를 받은 문이 스스로 열린다.
상태를 결정하는 것은 메세지임.
그럼 메세지를 받고 문은 자신의 상태를 바꿈 (열려있다)

일종의 은유라고 생각하기

클래스는 객체를 구현하기 위한 방법

디자인 패턴도 있음. 자바로 쓰여져 있음. 자바는 객체지향 언어라 객체지향을 기본 전제로 깔고 설명이 들어감.

나중에 에어플로우 팩토리 배울 때,
디자인 팩토리를 이해해야함.


코드를 짤 때 한가지 문제를 지엽적으로 해결하는게 아니라, 추상화 시켜 설계하는 능력도 필요.

상속

과거엔 상속을 권장했지만 그러지 않는 편으로 나아가고 있음

협력을 중요시하는 쪽으로 가는 중. 의존을 없애는 방법임.
상속구조에서 부모 클래스 메소드 변경하면 자식도 변경해줘야 해서, 부모 클래서 A를 상속받는 B라는 자식 클래스가 있다면 A가 C로 바뀐다면 B도 바꿔야 해서 강한 디펜던시를 가짐.


profile
반갑습니다 햄스터 좋아합니다

0개의 댓글