본문 바로가기

책/오브젝트 (완)

(17)
부록B 타입 계층의 구현 이전에 나온 타입, 클래스, 상속에 대하여 다시 한번 짚고 넘어가는 파트였습니다. 클래스를 이용한 타입계층의구현 타입을 구현할 수 있는 다양한 방법이 존재하는 손간부터는 클래스와 타입은 갈라지기 시작한다. ... 상속은 자식 클래스를 부모 클래스의 구현에 강하게 결합시키기 때문에 구체 클래스를 상속받는 것은 피해야 한다. 가급적 추상 클래스를 상속받거나 인터페이스를 구현하는 방법을 사용하기 바란다. 타입!=클래스이며 클래스는 타입을 구현하기 위한 방법이라는 것을 다시 한번 마음에 새겨넣었습니다. 인터페이스를 이용한 타입 계층 구현 인터페이스를 이용해 타입을 정의하고 클래스를 이용해 객체를 구현하면 클래스 상속을 사용하지 않고도 타입 계층을 구현할 수 있다는 사실이다. ... 타입은 동일한 퍼블릭 인터페이..
부록A 계약에 의한 설계 해당 내용은 오브젝트 책의 마지막에 있는 부록입니다. 그리고 부록의 사전적인 의미는 다음과 같습니다. "본문 뒤에 참고 자료로 덧붙이는 내용." 그러나 저는 인터페이스를 이용해서 설계를 하는 방법 나아가 "계약에 의한 설계를 하는 방법"이 궁금하였기에 부록에 대해 읽어보았습니다. 해당 내용을 올바르게 이해하지는 못하였는듯 하나 제가 감명깊게 읽은 내용들을 정리하고자 하였습니다. 우리에게 필요한 것은 명령의 부수효과를 쉽고 명확하게 표현할 수 있는 커뮤니케이션 수단이다. 이 시점이 되면 계약에 의한 설계가 주는 혜택으로 눈을 돌릴 때가 된 것이다. ... 계약에 의한 설계는 클래스의 부수효과를 명시적으로 문서화하고 명확하게 커뮤니케이션할 수 있을뿐만 아니라 실행 가능한 검증 도구로써 사용할 수 있다. 계약..
15 디자인 패턴과 프레임워크 15장은 오브젝트 책의 마지막 챕터로 지금까지 배운 객체지향의 개념을 바탕으로 디자인 패턴과 프레임워크에 대해 이야기하고 있습니다. 특히 이번장에서 저는 프레임 워크에 정의에 대해 새로 배웠으며 디자인 패턴의 종류가 아닌 정의에 대해 공부한 적은 처음이기에 어려웠지만 흥미롭게 읽었습니다. 이처럼 소프트웨어 설계에서 반복적으로 발생하는 문제에 대해 반복적으로 적용할 수 있는 해결 방법을 디자인 패턴이라고 부른다. ... 디자인 패턴이 설계를 재사용하기 위한 것이라면 프레임워크는 설계와 코드를 함께 재사용하기 위한 것이다. 세부적인 내용에 들어가기전 디자인 패턴은 무엇인지 프레임워크가 무엇인지 짚어주는 부분입니다. 저는 이 부분을 읽기 이전까지 프레임워크는 제어의 역전이 적용된 코드라고 이해를 하고 있었지만..
14 일관성 있는 협력 14장에서는 이전 장에서 배운 다형성, 상속등을 바탕으로 실제 코드에 어떻게 적용하는지에 배웠습니다. 14장에서는 초반에 이전 장에서 작성한 코드를 바탕으로 어떻게 해야 '일관성'을 지키며 협력을 하였는지에 대해 이야기를 하였습니다. 저는 이전 장에서 보았는 코드를 일관성 있게 리팩토링하는 것에 집중하며 보기보단 이후에 나오는 개념적인 부분에 대해 더 집중하며 보았습니다. 일관성은 설계에 드는 비용을 감소시킨다. 일관성의 중요성에 대해 이야기를 하고 있습니다. 저는 최근 프로젝트에서 백엔드 개발을 희망하는 학우와 협업을 해본적이 있으며 일관성의 필요성을 절실히 느꼈습니다. 이후에 나올 내용까지 요약하자면 일관성은 다른 코드에 대한 이해를 바탕으로 새로운 코드에 대해서 쉽게 이해할 수 있게 도와주기에 중요..
13 서브클래싱과 서브타이핑 13장에서는 LSP가 가장 기억에 남습니다. 사실 이번 장을 공부하기 이전에는 LSP에 대해 알고 있을뿐 그 안에 숨어있는 내용까지는 알지 못하였습니다. 그러나 이번 장에서 타입, 계층, LSP에 대해 언급을 하고 그를 기반으로 LSP에 대해 다시 이야기를 해주었을때 부모클래스와 자식 클래스의 자리를 서로 바꾸어도 프로그램이 동작해야 한다 라는 말의 중요성을 깨닫게 되었습니다. 상속의 첫 번째 용도는 타입 계층을 구현하는 것이다. ... 상속의 두 번째 용도는 코드 재사용이다. ... 상송의 가치는 이러한 타입 계층을 구현할 수 있는 편안한 방법을 제공한다는 데 있다. 이전 장에서부터 반복해서 이야기한 상속의 용도에 대해 말하고 있습니다. 그리고 13장에서는 타입계층을 목적으로 상속을 사용할 때는 언제고..
12 다형성 평소 자주 사용하는 다형성에 대한 장이였습니다. 이번 장에서는 상속에 대한 의미를 알 수 있었고 특히 오버라이딩혹은 오버로딩이 객체지향 프로그래밍 내부적으로 어떻게 동작하는지 알 수 있었습니다. 또한 종종 사용하던 this에 super가 어떠한 방식으로 구현되는지 역시 알 수 있었습니다. 백엔드 개발자는 코드를 작성하면서 다형성과 뗄래야 뗄 수 없는 관계라 생각합니다. 그렇기에 기억에 많이 남는 장이였습니다. 상속은 타입 계층을 구조화하기 위해 사용해야 한다. 이전 장에서도 상속은 코드 재사용을 위해서 사용되어서는 안된다고 말을 하였습니다. 그리고 12장 다형성에서 상속이 주는 의미에 진정한 의미에 대해 이야기를 하고 있습니다. 또한 타입 계층을 구조화한다는 말은 추후 나올 내용에 대해 미리 귀띔을 한다..
11 합성과 유연한 설계 10장은 상속에 대해 이야기를 하였다면 11장에서는 합성에 대해 이야기를 하였습니다. 그리고 10장에서 이야기한 상속과 마찬가지로 합성을 잘 쓰고 있는 저에게 있어 생각하지 못하고 있던 장단점들에 대해 이야기를 하고 있었습니다. 그러면서 부가적으로 일급 컬렉션에 대해 떠올릴 수 있었습니다. 합성은 전체를 표현하는 객체가 부분을 표현하는 객체를 포함해서 부분 객체의 코드를 재사용한다. ... 합성에서 두 객체 사이의 의존성은 런타임에 해결된다. ... 합성은 내부에 포함되는 객체의 구현이 아닌 퍼블릭 인터페이스에 의존한다. 따라서 합성을 이용하면 포함된 객체의 내부 구현이 변경되더라도 영향을 최소화할 수 있기 때문에 변경에 더 안정적인 코드를 얻을 수 있게 된다. ... [코드 재사용을 위해서는] 객체 합..
10 상속과 코드 재사용 저는 코드를 작성할때 상속이 가능한지, 재사용이 가능한지, 중복은 없는지를 중요하게 여기곤 합니다. 하지만 상속과 재사용 그리고 중복을 피하고자 하는 명확한 이유는 없이 그저 유지보수하기 쉽도록 하는 것이 전부였습니다. 그런 저에게 있어 해당 장은 상속은 어떠한 점에서 좋으며 어떤 점을 조심해야 하는지 알려주는 장이였습니다. 재사용 관점에서 상속이란 클래스 안에 정의된 인스턴스 변수와 메서드를 자동으로 새로운 클래스에 추가하는 구현 기법이다. ... 새로운 클래스의 인스턴스 안에 기존 클래스의 인스턴스를 포함시키는 방법으로 흔히 합성이라고 부른다. 상속과 합성을 왜 사용하며 사용하였을 경우 어떤 이점이 있는지를 알려주는 대목이였습니다. 01 상속과 중복 코드 DRY 원칙 중복 코드가 가지는 가장 큰 문제..
09 유연한 설계 8장에서는 응집도와 결합도의 개념에 대해 이야기를 하고 중요한 이유, 즉 원론적인 이유에 대해 말하였습니다. 9장에서는 이러한 응집도와 결합도를 좋은 설계로 이끄는 방법들에 대해 이야기하고 패턴이나 원칙들을 위주로 이야기하였습니다. 01 개방-폐쇄 원칙(Open-Closed Principle, OCP) 소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다. ... - 확장에 대해 열여 있다: 애플리케이션의 요구사항이 변경될 때 이 변경에 맞게 새로운 '동작'을 추가해서 애플리케이션의 기능을 확장할 수 있다. - 수정에 대해 닫혀 있다: 기존의 '코드'를 수정하지 않고도 애플리케이션의 동작을 추가하거나 변경할 수 있다. 이전 포스팅에서 이야기한 개..
08 의존성 관리하기 이번 장에서는 의존성을 위주로 이야기를 풀어나갔다 생각합니다. 특히 저는 Spring을 공부하면 의존성에 대해 어깨너머로 배우고 또 느낀것이 있었기에 유독 흥미가 갔던 장이였던것 같습니다. 객체지향 설계의 핵심은 협력을 위해 필요한 의존성은 유지하면서도 변경을 방해하는 의존성은 제거하는데 있다. 01 의존성 이해하기 변경과 의존성 실행시점: 의존하는 객체가 정상적으로 동작하기 위해서는 실행 시에 의존 대상 객체가 반드시 존재해야 한다. 구현 시점: 의존 대상 객체가 변경될 경우 의존하는 객체도 함꼐 변경된다. ... 어떤 객체가 예정된 작업을 정상적으로 수행하기 위해 다른 객체를 필요로 하는 경우 두 객체 사이에 의존성이 존재한다고 말한다. 의존성은 방향성을 가지며 항상 단방향이다. ... 의존성은 변경..