본문 바로가기

Programming5

# 의존과 DI Main Point : 의존은 줄이되 필요하다면 주입하자. - 의존 의존은 기능 구현을 위해 다른 구성 요소를 사용하는 것이다. 의존의 예시로는 객체를 생성하거나, 메소드를 호출 하는 것, 데이터를 사용하는 것 등이 있다. 의존은 변경이 전파될 가능성을 의미한다. 즉, 의존하는 대상이 바뀌면 의존한 대상도 바뀔 가능성이 높아진다. 예를 들어, 내가 호출하는 메소드의 파라미터가 변경되거나, 발생할 수 있는 예외 타입이 추가되는 경우가 있다. Controller는 자신이 맡은 Domain 기능에 모두 의존하며 Domain 기능이 바뀌면 Controller의 코드도 수정해야 하는 경우를 생각하면 이해가 쉽다. - 순환 의존 순환의존은 변경의 연쇄 전파 가능성이 높기 때문에 위험하다. 예를 들어 A클래스는 B에.. 2023. 1. 29.
# 기능과 책임 분리 Main Point : 큰 기능과 지나친 책임은 코드 변경을 어렵게 한다. - 기능 분해 하나의 큰 기능은 여러 개의 하위 기능으로 분해가 가능하다. 아래의 예시를 통해 살펴보자. 더보기 해당 다이어그램은 '상품 구입'이라는 기능을 단계별로 분해한 것이다. 상품 구입은 구입할 상품을 확인하는 기능과 실제로 해당 상품을 결제하는 기능으로 나뉠 수 있다. 구입할 상품을 확인하는 기능은 다시 해당 상품의 재고를 확인하는 기능과 재고가 없을 시 오류를 보내는 기능으로 나뉠 수 있다. 마찬가지로 상품을 결제하는 기능도 결제 방식을 확인하는 기능과 결제를 진행하는 기능으로 나뉠 수 있다. 예시를 위해 단순한 분해만을 진행한 결과이며 위의 기능은 더욱 분리될 수 있다. - 기능을 누가 제공할 것인가? 분리한 하위 기.. 2023. 1. 28.
# 상속보다는 조립 Main Point : 조립은 상속이 야기할 수 있는 문제들을 해결한다. - 상속과 재사용 상속은 상위 클래스의 기능을 재사용하고 확장하는 방법으로 사용된다. - 상속을 통한 기능 재사용시 발생할 수 있는 단점 상위 클래스 변경의 어려움 클래스의 불필요한 증가 상속의 오용 - 상위 클래스 변경의 어려움 상위 클래스를 변경하면 그 변경의 여파가 계층도를 따라 모든 하위 클래스에 전파된다. 상위 클래스의 입장에서는 어떤 하위 클래스가 생성될지 모른다. 즉, 하위 클래스가 얼마나 생성될지 알 수 없기 때문에 최초에 상위 클래스를 생성할 때 완벽한 상위 클래스를 생성하는 것은 불가능하다. 하위 클래스가 많아질수록 상위 클래스의 사소한 변경점 하나가 큰 파장을 일으키기 때문에 상위 클래스의 변경이 더욱 어려워진다.. 2023. 1. 27.
# 다형성과 추상화 Main Point : 추상화는 유연한 변경이 가능하게 한다. - 다형성 다형성은 여러 모습을 갖는 것이다. 객체 지향에서의 다형성은 한 객체가 여러 타입을 갖는 것이다. 즉, 한 객체가 여러 타입의 기능을 제공할 수 있다. 다형성은 보통 타입 상속으로 구현한다. 어떤 타입을 상속받은 하위 타입은 상위 타입도 될 수 있다. 즉, 한 타입이 여러 타입을 갖게 된다. public class Timer { public void start() { ... } public void stop() { ... } } public interface Rechargeable { void charge(); } public class IotTimer extends Timer implements Rechargeable { publ.. 2023. 1. 19.
# 캡슐화 Main Point : 캡슐화는 구현의 유연성을 높인다. - 캡슐화 캡슐화란 데이터와 데이터와 관련된 기능을 묶는 것이다. 캡슐화는 객체가 기능을 어떻게 구현했는지를 외부에 감추는 것이다. 즉, 구현에 사용된 데이터의 상세 내용을 외부에 감춘다. 캡슐화에는 정보 은닉의 의미가 포함되어 있다. 캡슐화를 하는 가장 큰 이유는 외부에 영향을 주지 않고 객체 내부의 구현 변경을 가능하게 하기 위함이다. - 캡슐화하지 않으면 요구 사항이 바뛰면 데이터의 구조와 사용 방법이 바뀌게 된다. 이 때 캡슐화가 되어있지 않으면 데이터를 사용하는 많은 코드의 수정이 발생한다. 즉, 절차 지향적 프로그래밍이 지닌 단점이 나타나게 된다. //정회원 기능 if (acc.getMemberShip() == REGULAR && acc.. 2023. 1. 16.
반응형