조영호님의 책 오브젝트를 보며 정리한 내용입니다. 문제가 될 시 해당글 삭제하겠습니다. 객체지향의 본질은 협력하는 객체들의 공동체를 창조하는 것이다. 협력 : 객체들이 애플리케이션 기능을 구현하기 위해 수행하는, 상호작용 책임 : 객체가 협력에 참여하기 위해서 수행하는 행동, 로직? 역할 : 객체들이 협력 안에서 수행하는 책임들이 모여 객체가 수행하는 역할이 된다. - 객체는 고립된 존재가 아닌, 시스템의 기능이라는 더 큰 목표를 향해 다른객체와 협력하는 사회적인 존재. - 협력은 객체지향 세계에서 기능을 구현할 수 있는 유일한 방법. -> 메시지 전송(객체가 다른 객체에게 도움을 요청) -> 메시지를 수신한 객체는 메서드를 실행해 요청에 응답한다.(객체가 자신의 일을 스스로 처리할 수 있는 자율적인 존..
조영호님의 책 오브젝트를 보며 정리한 내용입니다. 문제가 될 시 해당글 삭제하겠습니다. 객체지향이란? - 객체를 지향하는 것으로! 그 중심에는 객체가 위치한다. - 객체지향에서 가장 중요한 것은 애플리케이션의 기능을 수행하기 위해 협력에 참여하는 객체들 사이의 상호작용이다. - 객체들은 협력에 참여하기 위해 역할을 부여받고 그에 적합한 책임을 수행한다. 객체지향 프로그래밍 주의사항! 1. 어떤 클래스가 필요한지가 아닌, 어떤 객체가 필요한지 생각해라! -> 설계를 단순하고 깔끔하게 만든다. 2. 객체를 독립적인 존재가 아닌 기능을 구현하기 위해 협력하는 공동체로 바라봐라! 자율적인 객체 1. 객체가 상태와 행동을 함께 가지는 복합적인 존재이다!(캡슐화) 2. 객체가 스스로 판단하고 행동하는 자율적인 존재..
조영호님의 책 오브젝트를 보며 정리한 내용입니다. 문제가 될 시 해당글 삭제하겠습니다. 객체지향에서 문제가 되는 코드 1. 예상을 빗나가는 코드 - 현실세계와 맞지 않는 행동의 메서드를 가지고 있는 경우 ex) 소극장이 표를 사는 고객의 가방에 접근하는 것은 실제와 맞지 않다. 2. 변경에 취약한 코드 - 결합도가 높은 코드의 경우, 변경사항이 발생했을 때, 연관된 많은 클래스를 바꾸어야 한다. - 이는 코드의 유지보수가 취약해 지는 문제가 있다. 객체지향의 목표 1. 객체 사이의 결합도를 낮춰 변경이 용이한 설계를 만들어야 한다. 올바른 객체지향 설계 - 객체 내부의 상태를 캡슐화하고, 객체 간에 오직 메시지를 통해서 상호작용하도록 만드는 것이다! 1. 객체의 자율성을 높이자! - 객체가 스스로 처리할..
캡슐화란, 변경 될 수 있는 것은 어떤것이라도 감춘다는 것이다. 이상적으로 캡슐화가 잘되어 있다고 말하는 설계는, 응집도는 높고 결합도는 낮다. 다른 말로는 확장에는 열려있고, 수정에 대해서는 닫혀있다.(개방 폐쇄 원칙, OCP) 각 객체들은 스스로 역할과 책임을 충실히 하기 때문에, 기능이 변경되어도 수정할 수 있는 부분을 최소한으로 할 수 있다. 즉, 캡술화의 핵심은 변경될 수 있는 부분은 외부로 최대한 노출시키지 않고 협력에 의한 인터페이스로(메시지)만 소통을 하는 것이다. 잘못된 예제 (너무 많은 참견을 하는 객체) 극장 이라는 클래스를 보자 관객이 초대권이 있냐 없냐에 따라서 분기되고 있으며 중요한 부분은 아래 코드다. Ticket ticket = ticketSeller.getTicketOffi..