본 포스팅은 eddy_song.log 블로그 내용을 참고하여 작성하였습니다.

 

객체 지향 프로그래밍을 이해하는 시작점

'객체란 무엇인가?'가 아니라 '왜 객체 지향을 써야 하지?' 부터 시작하자.

velog.io

 

객체 지향을 왜 사용하는가?

객체 지향은 "좋은 코드"를 작성하기 위해 사용한다. 

 

"좋은 코드"는 무엇인가?

1. 변경하기 쉬운 코드

2. 이해하기 쉬운 코드

 

좋은 코드란 기능 추가 및 수정이 쉽고, 다른 개발자나 미래의 내가 보더라도 쉽게 이해할 수 있는 코드를 의미한다.

 

좋은 코드를 작성하려면?

복잡한 프로그램을 작은 단위로 나누고, 묶어서 정리햐야 하다. ➡️ 구조화, 추상화

 

Why OOP? 왜 객체지향을 써야 하는가?

  • "좋은 코드"를 작성하기 위해서
  • 즉, 이해하기 쉽고, 수정이 쉬운 코드를 작성하기 위해서
  • "좋은 코드"를 만들려면 일정한 기준을 가지고 코드를 구조화하고 정리해야 한다.

 

"객체 지향 프로그래밍(OOP)"라는 용어를 만들고 대중화 시킨 앨런 케이가 생각한 OOP의 본질은?

  • 메시징
    • 다른 객체의 데이터나 프로시져가 필요할 때는 메시지 요청을 한다.
    • 메시지를 받는 객체는 스스로 처리 방법을 선택한다.
  • 캡슐화
    • 관련있는 데이터와 프로시져를 찾아서 묶고 다른 객체가 내부를 건드리지 못하게 한다.
  • 동적 바인딩
    • 메시지를 받느 객체는 그때 그때 달라질 수 있다.

 

메시징 + 캡슐화 + 동적 바인딩 = ⭐️

  1. 변경 가능한 공유 데이터 최소화
    • 관련있는 프로시져와 데이터를 묶은 다음, 다른 객체는 접근할 수 없게 하기 때문이다.
    • 다른 객체의 상태를 알아내거나 바꾸려면, 해당 객체가 정해놓은 형식으로 메시지를 보내는 방식밖에 없다.
    • 이걸 "캡슐화"라고 한다.
  2. How(구현) 부분을 쉽게 바꿀 수 있다.
    • "메시지"를 받는 부분만 일관되게 유지한다면, 실제로 그걸 처리하는 코드는 바뀌어도 실행에 문제가 없다.
    • "메시지를 보내는 것"은 메서드(함수)를 호출하는 것과 다르다.
    • 다른 객체가 돈을 달라는 메시지를 보내면, 돈을 어떻게 주는지는 받는 객체가 알아서 결정한다.
  3. 메시지를 실제로 처리하는 객체를 쉽게 바꿀 수 있다.
    • 기능의 변경이 쉬워진다.
    • 메시지를 보내는 코드는 컴파일 타임에 이미 결정되지만, 실제로 어떤 객체가 그 메시지를 받아서 처리할지는 런타임에 결정된다. 이걸 "동적 바인딩"이라고 한다.

 

728x90

+ Recent posts