IT자료실/기술서적 15

오브젝트 - 기술서적 스터디 15단원-디자인패턴과 프레임워크

디자인패턴과 프레임워크 디자인패턴 : 소프트웨어 설계에서 반복적으로 발생하는 문제에 대해 반복적으로 적용할 수 있는 해결 방법 (설계를 재사용) 프레임워크 : 설계와 코드를 함께 재사용하기 위한 것 소프트웨어 패턴 패턴이 지닌 가장 큰 가치는 경험을 통해 축적된 실무지식을 효과적으로 요약하고 전달할 수 있는 것 패턴의 종류 : 패턴의 범위나 적용단계에 따라 분류한다 아키텍쳐 패턴 : 디자인패턴의 상위 패턴으로 소프트웨어의 전체적인 구조를 결정 분석 패턴 : 도메안 내의 개념적인 문제를 해결하는 데 초점 디자인 패턴 : 중간 규모의 패턴, 특정한 설계 문제를 해결하는 것을 목적 이디엄 : 특정 프로그래밍 언어에만 국한된 하위 레벨의 패턴 패턴에서 중요한 것은 패턴을 따르면 특정한 상황에 적용할 수 있는 설..

오브젝트 - 기술서적 스터디 14단원-일관성 있는 협력

일관성 있는 협력 객체는 협력을 위해 존재한다. 협력은 객체가 존재하는 이유와 문맥을 제공 갹체지행 패러다임의 장점은 설계를 재사용할 수 있다는 것 구현 유사한 기능은 유사한 방식으로 구현해야 한다 설계에 일관성 부여하기 설계의 일관성을 유지하려면 디자인 패턴을 학습하고 변경이라는 문맥안에서 디자인패턴을 적용한다 협력을 일관성 있게 만들기 위한 기본 지침 변하는 개념을 변하지 않는 개념으로부터 분리 변하는 개념을 캡슐화하라 캡슐화 단순히 테이터를 감추는 것이 아니라 소프트웨어 안에서 변할 수 있는 어떤 개념이라도 감추는 것 서브타입 캡슐화와 객체 캡슐화를 적용하는 법 변하는 부분을 분리해서 타입 계층을 만든다 변하지 않는 부분의 일부로 타입 계층을 합성한다 패턴을 찾아라 일관성 있는 협력의 핵심은 변경을..

오브젝트 - 기술서적 스터디 13단원-서브클래싱과 서브타이핑

타입 개념 관점의 타입 : 우리가 인지하는 세사의 사물의 종류 어떤 대상이 타입으로 분류 될 때 그 대상을 인스턴스라고 부른다(일반적으로 타입의 인스턴스를 객체라고 부른다) 프로그래밍 언어 관점의 타입 : 비트의 묶음에 의미를 부여하기 위해 정의된 제약과 규칙 타입에 수행됟 수 있는 유효한 오퍼레이션의 집합을 정의 타입에 수행되는 오퍼레이션에 대해 미리 약속된 문맥을 제공 객체지향 페러다임 관점의 타입 : 객체가 수신할 수 있는 메시지의 종류를 정의하는 것 타입 계층 타입 계층을 구성하는 두 타입 간의 관계에서 더 일반적인 타입을 슈퍼타입 더 특수한 타입을 서브타입이라 부른다 슈퍼 타입 집합이 다른 집합의 모든 멤버를 포함 타입 정의가 다른 타입보다 좀 더 일반적 서브타입 집합에 포함되는 인스턴스들이 더..

오브젝트 - 기술서적 스터디 12단원-다형성

다형성 상속의 목적은 코드재사용이 아니다. 상속은 타입 계층을 구조화 하기 위해 사용 상속의 메커니즘 업캐스팅 : 부모클래스타입으로 선언된 변수에 자식 클래스의 인스턴스를 할당하는 것이 가능 동적 바인딩 : 선언된 변수의 타입이 아니라 메시지를 수신하는 객체의 타입에 따라 실행되는 메서드가 결정, 이것은 객체지향 시스템이 메시지를 처리할 적절한 메서드를 컴파일 시점이 아니라 실행 시점에 결정하기 떄문 동적 메서드 탐색과 다형성 메시지를 수신한 객체는 먼저 자신을 생성한 클래스에 적합한 메서드가 존재한는지 검사한다, 존재할 경우 메서드를 실행하고 탐색을 종료한다 메서드를 찾지 못했다면 부모 클래스에서 메서드 탐색을 계속한다, 적합한 메서드를 찾을 때 까지 상속 계층을 따라 올라가며 계속된다 상속 계층의 가..

오브젝트 - 기술서적 스터디 11단원-합성과 유연한 설계

상속과 합성 상속과 합성은 코드 재사용이라는 동일한 목적을 가진다는 점을 제외하면 구현 방법부터 변경을 다루는 방식까지 모든 면에서 차이를 보인다. 상속은 is-a 관계라고 부르고, 합성관계는 has-a 관계라고 부른다. 재사용의 대상이 다른 상속과 합성 상속 : 부모 클래스 안에 구현된 코드 자체를 재사용 (화이트박스 재사용) 합성 : 포함되는 객체의 퍼블릭 인터페이스를 재사용 (블랙박스 재사용) 상속을 남용했을 때 직면할 수 있는 문제점 불필요한 인터페이스 상속 문제 메서드 오버라이딩의 오작용 문제 부모 클래스와 자식 클래스의 동시 수정 문제 몽키패치 현재 실행 중인 환경에만 영향을 미치도록 지역적으로 코드를 수정하거나 확장하는 것을 가리킨다. 자바에서는 바이트코드를 직접 변환하거나 AOP를 이용하여..

오브젝트 - 기술서적 스터디 10단원-상속과 코드의 재사용

상속을 사용한 중복코드 제거 상속을 사용해 중복코드를 제거할 수 있지만 결합도가 올라가는 문제가 생긴다. 자식 클래스 안에서 super 참조를 이용해 부모 클래스의 메서드를 직접 호출할 경우 두 클래스는 강하게 결합 취약한 기반 클래스 문제 취약한 기반 클래스 : 부모클래스의 변경에 의해 자식 클래스가 영향을 받는 현상 객체지향 프로그래밍의 취약점 불필요한 인터페이스 상속 문제 상속받은 부모 클래스의 메서드가 자식 클래스의 내부 구조에 대한 규칙을 깨트릴 수 있다메서드 오버라이딩의 오작용 문제 자식 클래스가 부모클래스의 메서드를 오버라이딩할 경우 부모 클래스가 자신의 메서드를 사용하는 방법에 자식클래스가 결합될 수 있다부모클래스와 자식클래스의 동시 수정 문제 클래스를 상속하면 결합도로 인해 자식 클래스와..

오브젝트 - 기술서적 스터디 9단원-유연한 설계

유연한 설계 개방-폐쇄 원칙 확장에 대해 열려 있다. 애플리케이션의 요구사항이 변경될 때 이 변경에 맞게 새로운 '동작'을 추가해서 애플리케이션의 기능을 확장할 수 있다. 수정에 대해 닫혀 있다. 기존의 '코드'를 수정하지 않고도 애플리케이션의 동작을 추가하거나 변경할 수 있다. 생성과 사용 분리 표현적 분해 도메인에 존재하는 사물 또는 개념을 표현하는 객체들을 이용해 시스템을 분해하는 것이다. 도메인 모델에 담겨 있는 개념과 관계를 따르며 도메인과 소프트웨어 사이의 표현적 차이를 최소하는 것을 목적으로 한다. 행위적 분해 도메인 개념을 표현한 객체가 아닌 설계자가 편의를 위해 임의로 만든 객체를 이용해 시스템을 분해하는 것이다. 의존성 주입 생성자 주입(constructor injection) : 객체..

오브젝트 - 기술서적 스터디 8단원-의존성 관리하기

의존성 의존성 : 의존하는 대상의 변경에 영향을 받을 수 있는 가능성 어떤 객체가 협력하기 위해 다른 객체를 필요로 할 때 두 객체 사이에 의존성이 존재 의존성은 실행 시점과 구현 시점에 서로 다른 의미를 갖는다 실행 시점 : 의존하는 객체가 정상적으로 동작하려면 실행 시에 의존 대상 객체가 반드시 존재 구현 시점 : 의존 대상 객체가 변경될 경우 의존하는 객체도 함께 변경 의존성은 방향성을 가지며 단방향 의존성 전이 직접 의존성 : 한 요소가 다른 요소에 직접 의존하는 경우 간접 의존성 : 직접적인 관계는 존재하지 않지만 의존성 전이에 의해 영향이 전파되는 경우 런타임 의존성 : 애플리케이션이 실행되는 시점 컴파일 타임 의존성 : 작성한 코드의 구조 런타임 의존성이 다루는 주제는 객체 사이의 의존성, ..

오브젝트 - 기술서적 스터디 7단원-메시지와 인터페이스

하향식 기능 분해 프로그래밍 패러다임은 프로그래밍을 추상화로 만들기 위해 사용하는 추상화의 종류와 추상화를 이용해 소프트웨어를 분해하는 방법 두 가지 요소로 결정 전통적인 기능 분해 방법은 하향식 기능 분해 방법 하향식 기능 분해 방법 : 시스템을 최상위의 가장 추상적인 메인 함수로 정의하고, 메인함수를 구현 가능한 수준까지 세부단계로 분해하는 방법 겉으로는 이상적인 방법으로 보일 수 있지만, 불귝칙하고 불완전한 문제를 만나면 큰 혼란이 발생 하향식 기능 분해의 문제점 시스템은 하나의 메인함수로 이루어저 있지 않다 기능 추가나 요구사항 변경으로 인해 메인 함수를 계속 수정 비즈니스 로직이 사용자 인터페이스와 강하게 결합 하향식 분해는 너무 이른 시기에 함수들의 실행 순서를 고정시키기 때문에 유연성과 재사..

오브젝트 - 기술서적 스터디 6단원-메시지와 인터페이스

협력과 메시지 협력은 어떤 객체가 다른 객체에게 요청할 때 시작 메시지는 객체 사이의 협력을 가능하게 하는 매개체 메시지는 오퍼레이션명 + 인자로 구성된다 (ex. car.colar(red)) 메시지를 수신했을 때 실제로 실행되는 함수 또는 프로시저를 메서드라고 한다 객체가 의사소통을 위해 외부에 공개하는 메시지의 집합을 퍼블릭 인터페이스 라고 한다 퍼블릭 인터페이스에 포함된 메시지를 오퍼레이션이라고 하고, 오퍼레이션은 수행 가능한 어떤 행동에 대한 추상화이다 인터페이스와 설계 품질 인터페이스의 품질에 영향을 미치는 4가지 원칙 디머터 법칙 : 협력하는 객체의 내부 구조에 대한 결합으로 인해 발생하는 설계 문제를 해결하기 위해 제안된 원칙 클래스 내부의 메서드가 아래의 조건을 만족하는 인스턴스에만 메시지..