책/Object (15) 썸네일형 리스트형 객체 분해 객체 분해추상화(abstraction) : 불필요한 정보를 제거하고 현재의 문제 해결에 필요한 핵심만 남기는 작업분해(decomposition) : 큰 문제를 해결 가능한 작은 문제로 나누는 작업 프로시저 추상화와 데이터 추상화시스템을 분해하는 방법을 결정하려면 먼저 프로시저 추상화를 중심으로 할 것인지, 데이터 추상화를 중심으로 할 것인지를 결정해야 한다.프로시저 추상화(procedure abstraction) : 소프트웨어가 무엇을 해야하는지 추상화 - 기능 분해(functional decomposition), 알고리즘 분해(algorithm decomposition)데이터 추상화(data abstraction) : 소프트웨어가 무엇을 알아야하는지 추상화 - 데이터를 중심으로 타입을 추상화(type .. 메시지와 인터페이스 메시지와 메시지 전송메시지 : 객체들이 협력하기 위해 사용할 수 있는 유일한 의사소통 수단메시지 전송, 메시지 패싱 : 다른 객체에게 도움을 요청 하는 것메시지 전송자 : 메시지를 전송하는 객체메시지 수신자 : 메시지를 수신하는 객체메시지는 오퍼레이션명과 인자로 구성되며 메시지 전송은 여기에 메시지 수신자를 추가한 것 메시지와 메서드메서드 : 메시지를 수신했을 때 실제로 실행되는 함수 또는 프로시저메시지와 메서드의 구분은 메시지 전송자와 메시지 수신자가 느슨하게 결합될 수 있게 한다. - 실행 시점에 메시지와 메서드를 바인딩하는 메커니즘은 두 객체 사이의 결합도를 낮춤으로써 유연하고 확장 가능한 코드를 작성할 수 있게 만든다. 퍼블릭 인터페이스와 오퍼레이션퍼블릭 인터페이스 : 객체가 의사소통을 위해 외부.. 책임 할당하기 데이터보다 행동을 먼저 결정하라객체에게 중요한 것은 데이터가 아니라 외부에 제공하는 행동이다.객체는 협력에 참여하기 위해 존재하며 협력 안에서 수행하는 책임이 객체의 존재가치를 증명한다.데이터는 객체가 책임을 수행하는 데 필요한 재료를 제공할 뿐이다. 협력이라는 문맥 안에서 책임을 결정하라객체에게 할당된 책임의 품질은 협력에 적합한 정도로 결정된다.책임은 객체의 입장이 아니라 객체가 참여하는 협력에 적합해야 한다. 책임 주도 설계(RDD)1. 시스템이 사용자에게 제공해야 하는 기능인 시스템 책임을 파악한다.2. 시스템 책임을 더 작은 책임으로 분할한다.3. 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당한다.4. 객체가 책임을 수행하는 도중 다른 객체의 도움이 필요한 경우 이를 .. 설계 품질과 트레이드오프 설계 트레이드오프캡슐화 - 외부에서 알 필요가 없는 부분을 감춤으로써 대상을 단순화하는 추상화의 한 종류 - 상태와 행동을 하나의 객체 안에 모으는 이유는 객체의 내부 구현을 외부로부터 감추기 위해서이다.구현 : 변경될 가능성이 높은 부분인터페이스 : 상대적으로 안정적인 부분설계가 필요한 이유는 요구사항이 변경되기 때문이고, 캡슐화가 중요한 이유는 불안정한 부분과 안정적인 부분을 분리해서 변경의 영향을 통제할 수 있기 때문이다.응집도 - 모듈에 포함된 내부 요소들이 연관되어 있는 정도를 나타냄 - 변경이 발생할 때 모듈 내부에서 발생하는 변경의 정도결합도 - 의존성의 정도를 나타내며 다른 모듈에 대해 얼마나 많은 지식을 갖고 있는지를 나타내는 척도 - 한 모듈이 변경되기 위해서 다른 모듈의 변경을 요구하.. 역할, 책임, 협력 협력객체들이 애플리케이션의 기능을 구현하기 위해 수행하는 상호작용메시지 전송 : 객체 사이의 협력을 위해 사용할 수 있는 유일한 커뮤니케이션 수단메시지를 수신한 객체는 메서드를 시행해 요청에 응답한다.외부의 객체는 오직 메시지만 전송할 수 있고, 메시지를 어떻게 처리할지는 메시지를 수신한 객체가 직접 결정한다. - 객체는 자신의 일을 스스로 처리할 수 있는 자율적인 존재객체를 자율적으로 만드는 가장 기본적인 방법은 내부 구현을 캡슐화하는 것이다. 캡슐화를 통해 변경에 대한 파급효과를 제한할 수 있기 때문에 자율적인 객체는 변경하기도 쉬워진다.상태는 객체가 행동하는 데 필요한 정보에 의해 결정되고 행동은 협력 안에서 객체가 처리할 메시지로 결정된다. 결과적으로 객체가 참여하는 협력이 객체를 구성하는 행동과.. 객체지향 프로그래밍 협력, 객체, 클래스1. 어떤 클래스가 필요한지를 고민하기 전에 어떤 객체들이 필요한지 고민하라.2. 객체를 독립적인 존재가 아니라 기능을 구현하기 위해 협력하는 공동체의 일원으로 봐야 한다. 도메인의 구조를 따르는 프로그램 구조도메인 : 문제를 해결하기 위해 사용자가 프로그램을 사용하는 분야 클래스 구현하기객체 1. 상태와 행동을 함께 가지는 복합적인 존재2. 스스로 판단하고 행동하는 자율적인 존재캡슐화 : 데이터와 기능을 객체 내부로 함께 묶는 것접근 제어(access control) : 외부에서의 접근을 통제할 수 있는 메커니즘(접근 수정자(access modifier)를 제공)퍼블릭 인터페이스(public interface) : 외부에서 접근 가능한 부분구현(implementation) : 내부에.. 객체, 설계 변경에 취약한 코드결합도(Coupling) : 객체 사이의 의존성 - 결합도가 높을 수록 함께 변경될 확률이 높아진다. - 결합도를 낮춰 변경이 용이한 설계를 만들어야 한다. 자율성을 높이자캡슐화(encapsulation) : 개념적이나 물리적으로 객체 내부의 세부적인 사항을 감추는 것객체를 인터페이스와 구현으로 나누고 인터페이스만을 공개하자 - 객체 사이의 결합도를 낮추고 변경하기 쉬운 코드를 작성하기 위해 따라야 하는 가장 기본적인 설계 원칙 캡슐화와 응집도응집도(cohesion) : 밀접하게 연관된 작업만을 수행하고 연관성 없는 작업은 다른 객체에게 위임하는 것 - 자신의 데이터를 스스로 처리하는 자율적인 객체를 만들면 결합도를 낮추고 응집도를 높일 수 있다. 절차지향과 객체지향절차지향 : 프로세스.. 이전 1 2 다음