본문 바로가기

(76)
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 의존성 이해하기 변경과 의존성 실행시점: 의존하는 객체가 정상적으로 동작하기 위해서는 실행 시에 의존 대상 객체가 반드시 존재해야 한다. 구현 시점: 의존 대상 객체가 변경될 경우 의존하는 객체도 함꼐 변경된다. ... 어떤 객체가 예정된 작업을 정상적으로 수행하기 위해 다른 객체를 필요로 하는 경우 두 객체 사이에 의존성이 존재한다고 말한다. 의존성은 방향성을 가지며 항상 단방향이다. ... 의존성은 변경..
07 객체 분해 이전 장까지는 객체지향이 무엇인지 또 어떻게 해야 객체지향적으로 설계를 할 수 있을지에 대해 이야기를 했다면 '7장 객체분해'에서는 객체지향의 본질에 대해 설명하는 챕터였습니다. 7장을 읽기 이전까지는 객체간의 의미있는 협력을 하게끔 유도 하는 것 == 객체지향이라 생각을 하였습니다. 그러나 7장에서는 '데이터 추상화'를 한 것이라 언급을 하며 객체지향이 탄생하기 까지 어떤 일들이 있었는지 이야기를 하며 이야기를 이끌어 나갔습니다. 이처럼 불필요한 정보를 제거하고 현재의 문제 해결에 필요한 정보를 제거하고 현재의 문제 해결에 필요한 핵심만 남기는 작업을 추상화라고 한다. ... 큰 문제를 해결 가능한 작은 문제로 나누는 작업을 분해라고 부른다. 객체지향을 이야기하기 이전 객체지향이 주로 다루는 '추상화'..
06 메시지와 인터페이스 https://goto-pangyo.tistory.com/230 05 책임과 메시지 4장에 이어 5장에서는 설계에 도움이 될 법한 실질적인 조언을 해주고 있습니다. 저자는 '메시지'의 역할 및 중요성을 이야기하고 이를 설계와 코드에 어떻게 녹이며, 인터페이스의 역할에 대해 goto-pangyo.tistory.com 이미 비슷한 내용으로 포스팅을 했었습니다. 그러나 오브젝트에서 언급하는 메시지는 조금더 구체적이고 또 실제 개발을 할 때 도움이 되는 내용들이였다는 느낌을 받았습니다. 추가로 "6장 메시지와 인터페이스"는 좋은 내용들이 풍부하지만 "객체지향의 사실과 오해"에서 다루었던 내용은 간략하게 설명하거나 건너뛰며 글을 작성하고자 합니다. 훌륭한 객체지향 코드를 얻기 위해서는 클래스가 아니라 객체를 지향..
05 책임과 메시지 4장에 이어 5장에서는 설계에 도움이 될 법한 실질적인 조언을 해주고 있습니다. 저자는 '메시지'의 역할 및 중요성을 이야기하고 이를 설계와 코드에 어떻게 녹이며, 인터페이스의 역할에 대해 이야기를 합니다. 또한 책을 읽으며 5장에서는 중요하다고 느낀 부분이 너무 많다고 느꼈습니다. 자율적인 책임 설계의 품질을 좌우하는 책임 적절한 책임이 자율적인 객체를 낳고, 자율적인 객체들이 모여 유연하고 단순한 협력을 낳는다. 따라서 참여하는 객체가 얼마나 자율적인지가 전체 애플리케이션의 품질을 결정한다. ... 객체가 자율적이기 위해서는 객체에게 할당되는 책임의 수준 역시 자율적이어야 한다. 이 문장은 5장 전체를 관통한다 보아도 무방합니다. 후술한 문장및 저의 생각은 이 문장에서 크게 벗어나지 않습니다. 객체지..