객체지향
오브젝트 :: Chap4 - 설계 품질과 트레이드오프
책임 주도 설계라는 이름에서 알 수 있듯 역할, 책임, 협력 중에서 가장 중요한 것은 책임 ! 책임이 객체지향 자체의 품질을 결정하는 것. 객제치향 설계란 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동 ! 설계는 변경을 위해 존재하고 변경에는 어떤 식으로든 비용이 발생한다. 훌륭한 설계란 합리적인 비용 안에서 변경을 수용할 수 있는 구조로 만드는 것이다. 결합도와 응집도를 합리적인 수준으로 유지하려면 객체의 상태가 아니라 객체의 행동에 초점을 맞추어야 한다. 객체를 단순한 데이터의 집합으로 바라보면 객체 내부 구현을 퍼블릭 인터페이스에 노출시키는 결과를 낳기 때문에 설계가 변경에 취약해짐 이번 장에서는 영화 예매 시스템을 책임이 아닌 상태를 표현하는 데이..
오브젝트 :: Chap3 - 역할, 책임, 협력
객체지향 패러다임 관점에서 핵심은 역할(role), 책임(responsibility), 협력(collaboration) ! 객체지향의 본질은 협력하는 객체들의 공동체를 창조 하는 것 ! 협력을 구성하기 위해 적절한 객체를 찾고, 적절한 책임을 할당 하는 과정이 핵심이다. 협력 영화 예매 시스템 돌아보기 객체지향 원칙을 따르는 어플리케이션의 제어 흐름은 특정 한 객체에 의해 통제되지 않고 다양한 객체들 사이에 균형 있게 분배되는 것이 일반적이다. 객체들이 어플리케이션의 기능을 구현하기 위해 수행하는 상호작용을 협력 이라고 한다. 객체가 협력에 참여하기 위해 수행하는 로직은 책임, 객체들이 협력 안에서 수행하는 책임들이 모여 객체가 수행하는 역할 을 구성한다. 협력 두 객체 사이 협력은 하나의 객체가 다른 ..
오브젝트 :: Chap2 - 객체지향 프로그래밍
간단한 온라인 영화 예매 시스템을 통해 객체지향 프로그래밍을 접해보자 영화 예매 시스템 용어 영화 : 영화에 대한 기본 정보 (제목, 상영시간, 가격 정보) 상영 : 실제로 관객들이 영화를 관람하는 사건 사용자가 실제로 예매하는 대상은 영화가 아니라 상영 ! 요구사항 특정 조건을 만족하는 예매자는 요금 할인받기 가능 할인액을 결정하는 두 가지 규칙 할인 조건 순서 조건 : 상영 순번을 이용해 할인 여부 결정 예시) 순번이 10인 경우 매일 10번째 상영 영화 할인 기간 조건 : 상영 시작 시간을 이용해 할인 여부 결정 예시) 월요일, 시작시간 오전 10시, 종료시간 오후 1시인 모든 영화 할인 할인 정책 금액 할인 정책 : 예매 요금에서 일정 금액 할인 예시) 영화 9000원, 금액할인정책 800원 → ..
Java :: 객체지향 5대 설계 원칙 - SOLID
객체지향 설계 5대원칙 결합도를 낮추고 응집도를 높일 수 있는, 객체지향적 설계 관점에서 지켜야 할 원칙들을 재정립 ! SOLID SRP : Single Responsibility Principle 단일 책임 원칙 OCP : Open Closed Principle 개방 폐쇄 원칙 LSP : Liskov Substitution Principle 리스코프 치환 원칙 ISP : Interface Segregation Principle 인터페이스 분리 원칙 DIP : Dependency Inversion Principle 의존성 역전 원칙 SRP 단일 책임 원칙 하나의 역할을 책임지는 코드를 함께 묶어주는 것 → 응집도 서로 다른 역할을 맡은 코드는 분리하여야 한다. 모든 클래스는 단 하나의 책임만을 가져야 함..
오브젝트 :: Chap1 - 객체, 설계
무지성으로 개발만 하다가, 설계에 중요성을 느껴 살펴보게 된 책. 객체지향은 무엇일까? 객체지향적으로 설계한다는 것은 뭐지? 객체지향적인 설계는 어떤 장점을 가져다주는가 등등에 대한 해답을 이 책에서 찾아보려고 한다 프로그래밍 패러다임 프로그래밍에서 패러다임이란, 특정 시대에 수용된 프로그래밍 방법과 문제 해결 방법, 프로그래밍 스타일을 의미한다고 볼 수 있다. 어떤 패러다임을 따르느냐에 따라서 문제를 바라보는 방식과 해결하는 방식이 달라진다. 저자는 객체지향 패러다임 을 설명하고자 이 책을 집필했다고 하고 있다. 객체지향에 대한 어느 정도 유사한 그림을 각자의 머릿속에 그리고, 객체지향의 오해를 제거하는 것이 목적 ! 은총알은 없다 - 프레디 브룩스 객체지향 패러다임은 은총알이 아니다. 언제라도 다른 ..
Java :: 객체지향 패러다임
적절한 객체에게 적절한 책임을 할당하여 서로 메시지를 주고 받으며 협력하도록 하는 것 점점 증가하는 SW 복잡도를 낮추기 위해 객체지향 패러다임 대두 중요한 두 가지 포인트 1. 클래스가 아닌 객체에 초점을 맞추는 것 2. 객체들에게 얼마나 적절한 역할과 책임을 할당하는가 절차지향 프로그래밍과 객체지향 프로그래밍의 차이 책임이 한 곳에 집중되어 있는 방식인가 → 절차지향 책임이 여러 객체로 적절히 분산되어 있는 방식인가 → 객체지향 High cohesion, loose coupling 높은 응집도와 낮은 결합도성격이 다른 것들은 분리를 시키는 것 ! 응집도가 높은, 비슷한 것끼리는 하나로 모아두고, 또한 변화가 생겼을 때, 다른 곳에는 영향을 미치지 않는다. 장점이 무엇일까 ? 변경이 생겼을 때 변경의 ..
Java :: 객체지향의 5가지 설계원칙 SOLID
SRP : Single Responsibility Principle (단일 책임의 원칙) OCP : Open/Closed Principle (개방 폐쇄의 원칙) 확장에는 열려있고 변경에는 닫혀있다. 즉, 기존 코드를 수정하지 않고 기능을 추가할 수 있어야 한다. LSP : Liskov’s Subsititution Principle (리스코프 치환의 원칙) 상위 타입의 객체를 하위 타입의 객체로 치환해도 동작에는 문제가 없어야 한다. ISP : Interface Segregation Principle (인터페이스 분리의 원칙) 많은 기능을 가진 인터페이스를 작은 기능 단위의 인터페이스로 분리함으로써 클라이언트에게 필요한 인터페이스에 대해서만 구현체를 만든다. 클라이언트가 사용하지 않는 기능에 대해서 의존성..
Java :: 객체지향 프로그래밍 (1/2)
남궁성 저자의 Java의 정석 3판 스터디 객체지향에 대해 놓치고 있는 부분을 다시 짚어보자. 객체지향이론의 기본 개념은 “실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용이다.” 라는 것이다. 객체지향언어의 주요 특징은 아래와 같다. 1. 코드의 재사용성이 높다. 2. 코드의 관리가 용이하다. 3. 신뢰성이 높은 프로그래밍을 가능하게 한다. 그 중 객체지향언어의 가장 큰 장점은 “코드의 재사용성이 높고 유지보수가 용이” 하다는 것 ! 객체지향개념을 학습할 때는 재사용성 과 유지보수 그리고 중복된 코드의 제거 이 세 가지 관점에서 보면 보다 쉽게 이해할 수 있을 것이다. 클래스와 객체 클래스란 객체를 정의해놓은 것 또는 객체의 설계도 라고 정의할 수 있다. 객체는 실제..