이 책을 읽으니 왜인지 좋은 객체지향적인 프로그램을 설계할 수 있을 것 같다는 근거없는 자신감이 솟아 오른다. ‘유일하게 변하지 않는 것은 모든 것이 변한다는 사실 뿐이다’ - 헤라클레이토스 소프트웨어 분야에서 예외가 없는 유일한 규칙은 요구사항이 항상 변경된다는 것이다. 지금까지 객체지향적으로 설계하는 것에 어려움이 있었던 이유는 이 책에서 찾아볼 수 있었다. 나는 어떠한 협력 관계에서 필요한 행동을 정의하고 객체를 생성하는 것이 아닌 객체가 필요한 상태와 객체를 먼저 정의하고 그 상태에 필요한 행동을 결정했었다. 항상 개발하다보면 캡슐화가 깨지는 거 같은 느낌이 드는 이유가 여기에 있었다. 책에서는 이렇게 말한다. 객체의 상태를 먼저 결정할 경우 캡슐화가 저해된다. 상태에 초점을 맞출 경우 상태가 객..
객체지향
나는 “객체지향 프로그래밍이 무엇이냐”고 물어본다면 “객체 간의 협력으로 이루어진 프로그래밍이다” 라고 설명할 것이고, “왜 객체지향 프로그래밍을 해야 하냐?”고 물어본다면 “코드의 재사용성과 유지보수성이 높으니까”, “자바는 객체지향 언어어니까!” 와 같이 교과서적인 답변같은 말을 할 것 같다. 왜냐하면 나도 왜 객체지향이 쓰이는지 잘 모른다,,! 저렇게 배웠으니 저렇게 알고있을 뿐,, 이번 기회에 객체지향에 대해 잘 설명할 수 있도록 학습해보고자 한다. 객체지향 프로그래밍; OOP 프로그램은 절차에 따라 실행된다. 절차에 따라 코드를 작성하게 되면 프로그램의 볼륨이 너무 커지게 된다. 이를 함수로 나누어 구조적인 프로그래밍으로 변경할 수 있을 것이다. 하지만 구조적인 프로그래밍에서도 어떠한 문제가 있..
객체 간의 협력 (Collaboration) 객체 지향 프로그램에서 객체 간에는 협력이 이루어진다. 자바 객체 간의 협력은 객체 지향 프로그래밍에서 매우 중요하다. 객체는 다른 객체와 상호작용하면서 비즈니스 로직 수행에 필요한 데이터를 처리한다. 협력을 위해서는 먼저 다른 객체에게 요청을 전송해야 한다. 이러한 요청을 메세지라고 한다. 메세지를 처리하는 기능은 메서드이다. 객체는 다른 객체에게 메세지를 전송할 때, 메세지를 처리할 수 있는 메소드를 가지고 있는지 확인한다. 메소드가 존재하면 해당 메소드를 호출하여 메세지를 처리하고 결과를 반환한다. 두 학생이 버스와 지하철을 타는 상황을 구현해 보자. James와 Tomas는 각각 버스와 지하철을 타고 학교에 갑니다. James는 5000원을 가지고 있었..