객체지향의 사실과 오해 1 ~ 4장

2022. 8. 16. 14:24·독서/객체지향의 사실과 오해
반응형

현재 필자는 자바지기 박재성님이 운영하시는 NextStep 교육 웹사이트에서 수강한 자바 플레이 그라운드 with TDD, 클린코드

마지막 블랙잭 미션을 진행하고 있다. 미션을 해결하기 위해 도메인을 설계하고 있는데, 생각보다 많이 어렵다.

특히 인스턴스 변수 2개까지만 사용하라는 요구사항이 너무 어렵게 느껴져, 객체지향에 관한 보충 공부가 필요하다고 느껴졌다.

그래서 몇 달 전에 읽은 객체지향의 사실과 오해(줄여서 객사오라고 부르겠다)를 다시 읽었다.

이번 포스팅은 객사오 1장부터 4장까지 다시 읽으면서 기억하고 싶은 중요한 부분을 남기려고 한다.

그럼 바로 시작하겠다.

1장. 협력하는 객체들의 공동체

  • 객체지향은 현실 세계를 모방하는 것이 아니다. 새로운 세계를 창조하는 것이다.
  • 여러 객체가 동일한 역할을 수행할 수 있다. 역할은 대체 가능성을 의미한다.
  • 책임을 수행하는 방법은 자율적으로 선택할 수 있다. (캡슐화)
  • 한 사람이 동시에 여러 역할을 수행할 수 있다.
  • 객체는 상태와 행위를 함께 지니며 스스로 자기 자신을 책임진다.
  • 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력한다.
    각 객체는 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합이다.
  • 클래스가 아닌 객체를 지향하자.

2장. 이상한 나라의 객체

  • 객체의 행위(행동)은 상태에 영향을 받고, 객체의 상태를 변경시키는 것은 객체의 행위이다.
  • 두 객체의 프로퍼티 값이 같으면 동등성이 보장된다. (쉽게 말해 인스턴스 변수 값이 같은 경우)
  •  두 객체의 식별자가 동일하면 동일성이 보장된다. (쉽게 말해 같은 참조 변수의 주소가 같은 경우)
  • 상태를 이용하면 과거의 모든 행동 이력을 설명하지 않고도 행동의 결과를 쉽게 예측하고 설명할 수 있다.
  • 객체지향 설계는 애플리케이션에 필요한 협력을 생각하고 협력에 참여하는 데 필요한 행동을 생각한 후 행동을 수행할 객체를 선택하는 방식으로 수행해야 한다.
  • 먼저 객체의 행동을 결정하고 그 후에 행동에 적절한 상태를 선택하게 된다.
  • 현실 세계에서 수동적인 사물은, 객체지향에서는 능동적인 객체가 된다.
    예를 들어 현실의 음료는 누가 마셔야 음료 양이 감소되지만, 객체지향에서는 누가 음료를 마신다는 메세지를 보내면 음료가 행위를 통해 자신의 음료 양을 감소시킨다.

3장. 타입과 추상화

  • 복잡성을 다루기 위해 추상화는 아래와 같은 두 차원에서 이루어진다.
  • 첫 번째 차원은 구체적인 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통해 단순하게 만드는 것이다.
  • 두 번째 차원은 중요한 부분을 강조하기 위해 불 필요한 세부 사항을 제거함으로써 단순하게 만드는 것이다.
    이전에 NextStep 3번째 미션을 수행하면서 비슷한 메세지를 본 적이 있다. 알아보기 쉽게 책임과 역할을 강조!!
  • 다형성은 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 능력을 뜻한다.
  • 객체의 타입을 결정하는 것은 객체의 행동뿐이다.
    객체가 어떤 데이터를 보유하고 있는지는 타입을 결정하는 데 아무런 영향도 미치지 않는다.
  • 타입은 시간에 따른 객체의 상태 변경이라는 복잡성을 단순화할 수 있는 효과적인 방법이다.

4장. 역할, 책임, 협력

  • 객체의 세계에서 협력이라는 문맥이 객체의 행동 방식을 결정한다.
  • 객체의 책임은 크게 두 가지 범주로 분류할 수 있다.
  • 하는 것:
    객체를 생성하거나 계산을 하는 등의 스스로 하는 것, 다른 객체의 행동을 시작시키는 것, 다른 객체의 활동을 제어하고 조절하는 것.
  • 아는 것:
    개인적인 정보에 관해 아는 것, 관련된 객체에 관해 아는 것, 자신이 유도하거나 계산할 수 있는 것에 관해 아는 것.
  • 역할의 가장 큰 가치는 하나의 협력 안에 여러 종류의 객체가 참여할 수 있게 함으로써 협력을 추상화할 수 있다는 것이다.
  • 역할은 다른 객체에 의한 대체 가능함을 의미한다.
  • 클래스 간의 관계를 표현하고자 하지 말고, 객체가 협력 안에서 어떡 책임과 역할을 수행할 것인지를 결정해라.
  • 객체는 데이터를 저장하기 위해 존재하는 것이 아니라 행위를 수행하며 협력에 참여하기 위해 존재한다.
  • 상태와 행위에 대해 고민하기 전에 그 객체가 참여할 문맥인 협력을 정의해라.

이렇게 1장부터 4장까지 중요하다고 생각하는 부분을 적어보았다.

확실히 처음 읽을 때는 안 와닿는 부분이 있었는데, 이번에 여러 경험을 하고나서 책을 읽으니 훨씬 더 잘 와닿았다.

읽으면서 조금은 성장한 것 같아서 뿌듯함을 느꼈다.

일단 이 내용을 기억하면서 블랙잭 미션에 다시 도전하려고 한다. 파이팅..!!

 

참고 문헌

객체지향의 사실과 오해 (저자: 조영호)

반응형
'독서/객체지향의 사실과 오해' 카테고리의 다른 글
  • 객체지향의 사실과 오해 5 ~ 7장
Debin
Debin
공부 기록을 남기며 게시글 리팩토링을 진행하는 블로그입니다.
  • Debin
    리팩토링하는 블로그
    Debin
  • 전체
    오늘
    어제
    • 분류 전체보기
      • DB
        • DB 기초
        • MySQL
        • SQL 튜닝
      • OS
      • Network
      • Git
      • 디지털콘텐츠기획
      • 소프트웨어공학
      • 코딩테스트
        • 프로그래머스
        • 백준
        • 인프런
      • 공부 일지
      • 독서
        • 클린코드
        • 일상 속 사물이 알려주는 웹 API 디자인
        • 토비의 스프링
        • 객체지향의 사실과 오해
        • 자바 잘 읽는 법
      • 기록 및 회고
      • Cloud
        • AWS
      • 개발
        • Java
        • Spring Core
        • Spring MVC
        • Spring DB
        • Spring Boot
        • Spring Security
        • Spring Batch
        • JPA
        • Test
        • Android
      • 대외활동
        • UMC SERVER
        • 카엔프 SW 아카데미
      • 프로젝트
      • Docker
      • Gradle
      • ELK
      • 실무 이야기
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

    • 본인 깃허브입니다!
  • 인기 글

  • 태그

    인덱스
    운영체제
    스프링
    AWS
    객체지향
    spring
    스프링 부트
    프록시
    트랜잭션
    redis
    spring boot
    JPA
    AOP
    코딩 #개발자 #노마드북클럽 #노개북
    객체
    컨테이너
    container
    docker
    innodb
    spring mvc
    mysql
    도커
    토비의 스프링
    ORM
    리눅스
    자바
    test
    SQL
    데이터베이스
    Java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
Debin
객체지향의 사실과 오해 1 ~ 4장
상단으로

티스토리툴바