전체 글36 [오브젝트] 11. 합성과 유연한 설계 상속합성사용 방법부모 클래스와 자식 클래스를 연결해서부모 클래스의 코드를 재사용전체를 표현하는 객체가 부분을 표현하는 객체를 포함해서 부분 객체의 코드를 재사용의존성부모 클래스와 자식 클래스 사이의 의존성은 컴파일 타임에 해결두 객체 사이의 의존성은 런타임에 해결관계 명칭is-a 관계has-a 관계 합성은 구현에 의존하지 않는다는 점에서 상속과 다르다. 내부에 포함되는 객체의 구현이 아닌 퍼블릭 인터페이스에 의존함으로써 클래스 사이의 높은 결합도를 객체 사이의 낮은 결합도로 대체할 수 있다.또한 상속 관계는 클래스 사이의 정적인 관계인 데 비해 합성 관계는 객체 사이의 동적인 관계다. 코드 작성 시점에 결정한 상속 관계는 변경 불가하지만, 합성 관계는 실행 시점에 동적으로 변경할 수 있으므로 변경이 쉽고.. 2024. 8. 4. [오브젝트] 10. 상속과 코드 재사용 객체 지향에서 클래스를 재사용하는 전통적인 방법은 새로운 클래스를 추가하는 것으로, 이를 구현하는 가장 대표적인 기법은 상속이다. 상속과 중복 코드의 관계코드를 재사용하는 이유는 중복 코드를 제거하기 위함이다.중복 코드는 변경을 방해하며 수정과 테스트에 드는 비용을 증가시킨다.중복 여부를 판단하는 기준은 코드의 모양이 아니라 변경이다. 요구사항이 변경됐을 때 두 코드를 함께 수정해야 한다면 이 코드는 중복이다.중복 코드는 새로운 중복 코드를 부른다. 새로운 중복 코드를 추가하는 과정에서 코드의 일관성이 무너질 위험이 있다.신뢰할 수 있고 수정하기 쉬운 소프트웨어를 만들기 위해 DRY(Don't Repeat Yourself) 원칙을 따라야 한다.DRY 원칙 (= Once and Only Once, = Si.. 2024. 7. 28. 무엇을 테스트할 것인가? 어떻게 테스트할 것인가? https://youtu.be/YdtknE_yPk4?si=eFlpZqFEX4sbUc5G 테스트로 얻을 수 있는 것유지보수 용이, 버그 조기 발견 등연사가 가장 중요하게 생각한 것은 안정감과 자신감,, 이를 통해 개발 속도 향상 등의 연쇄적인 효과 기대안정감과 자신감을 얻는 대상은?현재와 미래의 '나'현재와 미래의 '동료''나'뿐만이 아니라, 현재 같이 협업하고 있거나 미래에 프로젝트를 이어받을 '동료'를 위한 테스트 코드를 작성한다면, 질적으로 향상된 테스트 코드를 작성함으로써 좋은 프로젝트를 만드는데 기여할 수 있을 것.무엇을 테스트할 것인가?구현 vs 설계로또번호 생성 예제요구사항6개의 숫자를 반환중복되지 않은 숫자랜덤하게 반환로또 생성 로직 순서빈 Set 생성숫자 생성 후 List 객체에 담기숫자.. 2024. 7. 26. 20240720 TIL 1. 오브젝트 9장_유연한 설계2. if(kakao) 컨퍼런스 DDD 영상 시청 9장 - 유연한 설계유연하고 재사용 가능한 설계를 만들기 위한 다양한 원칙에 대하여.개방-폐쇄 원칙(Open-Closed Principle)소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다.확장에 대해 열려있다 : 애플리케이션의 요구사항이 변경될 때 이 변경에 맞게 새로운 ‘동작’을 추가해서 애플리케이션의 기능을 확장할 수 있다.수정에 대해 닫혀있다 : 기존의 ‘코드’를 수정하지 않고도 애플리케이션의 동작을 추가하거나 변경할 수 있다.개방-폐쇄 원칙은 런타임 의존성과 컴파일타임 의존성에 관한 이야기이며 핵심은 추상화에 의존하는 것이다.추상화를 했다고 해서 모든 수.. 2024. 7. 21. ㄷㄷㄷ: Domain Driven Design과 적용 사례공유 ㄷㄷㄷ: Domain Driven Design과 적용 사례공유 / if(kakao)2022카카오엔터테인먼트 테크 블로그 포스트 DDD란?각각 기능적인 문제의 영역을 정의하는 도메인과 그 도메인을 사용하는 비즈니스 로직을 중심으로 설계하는 것을 DDD라고 한다.특징데이터 중심이 아닌 도메인의 모델과 로직에 집중유비쿼터스 언어, 보편적 언어 사용(동일한 표현과 단어로 구성된 단일화된 언어 체계 사용. 즉, 쉽게 이야기하면 업무 용어를 통일하여 개발단 뿐만 아니라 기획, 사업단까지 단일화된 커뮤니케이션이 가능하도록 함)소프트웨어 엔티티와 도메인 간 개념 일치 (분석 모델과 설계가 다다르고 이것과 코드가 다른 구조가 아닌 함께 움직이는 모델 지향)왜 DDD인가?반복적인 설계 수정과 테스트 자동화로 쌓아나가는 .. 2024. 7. 20. 20240714 TIL 1. 오브젝트 7, 8장7장 - 클래스와 추상 데이터 타입윌리엄 쿡에 의하면 프로그래밍 언어적 관점에서 추상 데이터 타입은 타입을 추상화한 것이고 클래스는 절차를 추상화한 것이다.'타입을 추상화한다'는 것은, 개별 오퍼레이션이 모든 개념적인 타입에 대한 구현을 포괄하도록 함으로써 하나의 대표적인 타입이 다수의 세부적인 타입을 감추고 있는 경우를 말한다.ex) Employee 는 임금 계산에 대한 퍼블릭 인터페이스를 가지고 있다. 내부에서 조건문을 사용하여 직원 타입을 확인하고 해당 타입에 따라 계산 방법을 달리 한다.'절차를 추상화한다'는 것은, 타입을 기준으로 오퍼레이션을 묶는 것이다. 타입을 명시적으로 정의하고 해당 타입들과 관련된 오퍼레이션 실행 절차를 각 타입에 분배한다. 타입들의 공통 로직은 부.. 2024. 7. 14. 이전 1 2 3 4 ··· 6 다음