의존성 주입과 느슨한 결합: 왜 구체 클래스가 아닌 interface인가
·
Programming Language/Java
들어가며프로젝트 초기엔 new로 객체를 직접 생성하는 게 간단해 보입니다. 하지만 시간이 지나면서 테스트 코드 작성이 어려워지고, 작은 변경에도 여러 클래스를 수정해야 하는 상황이 반복됩니다. 이 글에서 다룰 내용:의존(Dependency)의 정의클래스 간 의존 관계가 무엇이고, 왜 문제가 되는지강한 결합의 문제점구체 클래스에 직접 의존할 때 발생하는 실무 이슈들인터페이스 기반 설계느슨한 결합을 만드는 방법과 SOLID 원칙 연결실무 적용 사례결제 시스템, 로깅, 외부 API 연동 등에서 DI 패턴 활용법의존성 주입 방식 비교생성자/세터/필드 주입의 장단점이 글을 읽고 나면, 왜 "인터페이스에 의존하고 구체 클래스 의존을 피해야 하는지" 명확히 이해하고, 실무에서 바로 적용할 수 있는 패턴들을 익힐 수 ..
[Java] 퍼사드 패턴을 예제와 함께 알아보자.
·
Programming Language/Java
퍼사드 패턴이란?퍼사드(Facade) : 건물의 출입구가 있는 정면 복잡한 시스템이나 서브시스템을 단순화된 인터페이스를 통해 외부로 노출시키는 패턴입니다.이를 통해 클라이언트가 시스템의 복잡성을 몰라도 간단한 인터페이스를 통해 시스템을 사용할 수 있도록 합니다.  실생활에서 볼 수 있는 퍼사드 패턴의 예시일상적인 예제로는 스마트폰의 전원 버튼을 들 수 있습니다. 스마트폰의 내부에는 수많은 하드웨어 및 소프트웨어 컴포넌트가 복잡하게 동작합니다. 그러나 사용자에게는 전원 버튼 하나만 노출되어 있고, 이 버튼을 누르면 전체 시스템이 켜지거나 꺼집니다.    개발 과정에서 만나게 되는 퍼사드 패턴이 필요한 상황복잡한 시스템 또는 라이브러리를 간편하게 사용하려고 할 때.다른 시스템과의 상호작용을 캡슐화하려고 할 ..
[Java] 어댑터 패턴을 예제와 함께 알아보자.
·
Programming Language/Java
어댑터 패턴이란?기존의 클래스나 인터페이스를 다른 인터페이스로 변환하는 데 사용되는 구조적인 패턴입니다.  다음과 같은 상황에서 유용합니다.두 개의 인터페이스가 호환되지 않을 때기존 클래스를 변경하지 않고 새로운 클래스나 인터페이스와 통합할 때   어댑터 패턴은 다음과 같은 주요 구성 요소로 구성됩니다Target(대상) 인터페이스: 클라이언트가 사용하려는 인터페이스입니다. 클라이언트 코드는 이 인터페이스를 통해 객체에 접근합니다.Adaptee(적응 대상) 클래스 또는 인터페이스: 기존에 사용하려는 클래스 또는 인터페이스로, 클라이언트가 직접 사용하기 어려운 경우가 있습니다.Adapter(어댑터) 클래스: Target 인터페이스를 구현하고, Adaptee를 감싸서 Target 인터페이스를 따르도록 변환합니..
[Java] 디자인패턴과 안티 패턴을 알아보자.
·
Programming Language/Java
디자인 패턴이란?소프트웨어 디자인에서 자주 발생하는 문제에 대한 해결책을 재사용 가능한 형태로 정리한 것입니다.  이러한 패턴들은 소프트웨어 개발 과정에서 특정한 디자인 문제를 해결하기 위한 일반적인 접근 방식을 제공하며, 코드의 재사용성, 가독성, 확장성을 향상시키는 데 도움을 줍니다.  예를 들어, Singleton 패턴은 하나의 인스턴스만 생성하고 이를 여러 곳에서 공유하고자 할 때 사용됩니다. 다음은 Java에서의 Singleton 패턴의 간단한 예제입니다.public class Singleton { private static Singleton instance; private Singleton() { // 생성자를 private로 선언하여 외부에서 인스턴스 생성을 제한 ..
[Java] Enum과 Builder 패턴을 예제와 함께 알아보자.
·
Programming Language/Java
https://github.com/prgrms-be-devcourse/java-library-management/pull/34 [5기 - 박주한] 1~2주차 과제: 도서 관리 어플리케이션 제출합니다. by ParkJuhan94 · Pull Request #34 · prg안녕하세요 도찌, 무송 멘토님! 이번 과제를 하면서 많은걸 배운것 같아요. 출력과 예제를 통해서 어느정도 test 하면서 진행을 했는데, 계속된 버그에 테스트코드가 꼭 필요한 것 같긴 했습니다.github.com   Java Enum 활용기개발을 진행할때 Enum을 통해 얻는 기본적인 장점들은 아래와 같습니다.문자열과 비교해, IDE의 적극적인 지원을 받을 수 있습니다.허용 가능한 값들을 제한할 수 있습니다.리팩토링시 변경 범위가 최소화 ..