객체지향의 사실과 오해_2

gnoesnooj·2021년 12월 12일
0
  • 객체는 상태를 가지며 상태는 변경가능하다.

  • 상태를 변경시키는 것은 객체의 행동이다

    • 행동의 결과는 상태에 의존적이며 상태를 이용해 서술 할 수 있다.
    • 행동의 순서가 결과에 영향을 미친다
  • 객체는 어떤 상태에 있더라도 유일하게 식별이 가능하다.

  • 객체의 행동은 객체의 상태를 변경시키지만, 행동의 결과는 객체의 상태에 의존적이다.

    • 객체가 취하는 행동은 상태를 변경시킨다. 이것은 부수효과를 초래한다는 것을 의미한다.
      (EX) 준성이가 밥을 먹는다 -> 준성 의 상태는 배가 부르지만, 케이크의 상태는 양이 줄어든다
  • 객체는 상태, 행동, 식별자를 갖는다.

  • 객체는 자율적이기에, 서로 다른 객체는 서로 간의 상태에 직접적으로 간섭하거나 접근할 수 없다.

  • 행동은 다른 객체의 상태에 간접적인 접근이 가능하지만, 해당 접근에 대해서 상태를 바꿀지 말지 또한 해당 객체의 자율적인 선택이다.

  • 상태 캡슐화
    : 잘 정의된 행동 집합을 뒤로 캡슐화하는 것은 객체의 자율성을 높이고 협력을 단순하고 유연하게 만든다.

  • 식별자는 객체를 구분짓는 객체의 프로퍼티이다. (Entity : 식별자를 갖는 객체)

  • 값 : 불변 상태 / 객체 : 가변 상태

  • 동등성과 동일성 (equals vs ==)
    : 상태가 다르더라도 식별자가 같다면 두 객체는 동일하다
    : 어느 특정 시점에서의 값의 상태는 불변하기 때문에, 그 시점에서 동일한 타입의 두 값이 같다면 두 값은 동등하다

  • 수동적인 현실의 객체도 객체지향에서의 객체는 능동적이다.

  • 만들고 먹는 것에 따라 양이 변하는 케이크도 객체지향에서는 능동적으로 본인의 양을 변경한다. 눈에 보이지 않는 것도 시각화가 가능하며, 존재하지 않는 것 또한 존재하도록 할 수 있다. -> 의인화

    즉 객체지향 세계는 현실 모방이 아닌, 하나의 창조이다.


  • 개념

    • 심볼, 내연, 외연
  • 분류 : 어떤 객체를 어떤 개념으로 분류하느냐에 따라 객체지향의 품질이 달라진다.
    객체지향의 품질을 높이기 위해 각각의 객체를 최선의 장소에 배치해서 직관적으로 분류하는 것이 중요하다.

  • 개념의 필요성 : 추상화를 위한 도구이다. 여러 가지의 세분화된 복잡성을 쳐내고 하나의 공통적은 특징을 살려서 일반화를 통해 단순화를 하고, 추상화를 하는 것이다.

  • 개념 -> 타입 TYPE

  • 클래스 : 객체를 위한 정적인 도구

  • 추상화 - 구체화 / 일반화 - 특수화 / 슈퍼 타입 - 서브 타입

동적으로 변하는 객체의 상태와, 상태를 변경하는 행동에 집중하자.


느낀 점

1달도 전에 읽은 책을 다시 펴서 읽었다. 제대로 된 코딩을 한번도 안해봤지만, 그래도 처음 도전한 숫자야구의 내 코드가 너무 형편없다는 걸 깨닫고 난 후 다시 읽어서 그런지 예전에 읽으면서 받은 느낌과는 다르게 다가오는 것 같다.
코딩을 할 때 한 번 더 해당 기능에 대해 생각해보고, 한 번 더 추상화를 해보며, 한 번 더 세분화에 대해서 생각하며, 결국 내가 만들고자 하는 기능이 무엇인지, 그에 맞는 행동과 상태를 가질 수 있는지에 대해 더 깊게 주의해야겠다.

profile
누구나 믿을 수 있는 개발자가 되자 !

0개의 댓글