의존성 주입과 느슨한 결합: 왜 구체 클래스가 아닌 interface인가
·
Programming Language/Java
들어가며프로젝트 초기엔 new로 객체를 직접 생성하는 게 간단해 보입니다. 하지만 시간이 지나면서 테스트 코드 작성이 어려워지고, 작은 변경에도 여러 클래스를 수정해야 하는 상황이 반복됩니다. 이 글에서 다룰 내용:의존(Dependency)의 정의클래스 간 의존 관계가 무엇이고, 왜 문제가 되는지강한 결합의 문제점구체 클래스에 직접 의존할 때 발생하는 실무 이슈들인터페이스 기반 설계느슨한 결합을 만드는 방법과 SOLID 원칙 연결실무 적용 사례결제 시스템, 로깅, 외부 API 연동 등에서 DI 패턴 활용법의존성 주입 방식 비교생성자/세터/필드 주입의 장단점이 글을 읽고 나면, 왜 "인터페이스에 의존하고 구체 클래스 의존을 피해야 하는지" 명확히 이해하고, 실무에서 바로 적용할 수 있는 패턴들을 익힐 수 ..
코틀린(Kotlin)의 핵심 문법과 예제 (2/2)
·
Programming Language
들어가면서 https://giken.tistory.com/entry/Kotlin-%EC%BD%94%ED%8B%80%EB%A6%B0-%EB%AC%B8%EB%B2%95-%ED%95%B5%EC%8B%AC-%EC%A0%95%EB%A6%AC-feat%EC%9E%90%EB%B0%94 코틀린(Kotlin)의 핵심 문법과 예제 (1/2)들어가면서코딩테스트, 스프링 백엔드 개발에서 자바로 프로그래밍을 해왔다.최근 채용 공고를 보면 `스프링 + 코틀린 (코프링)`이 심심치 않게 보인다. 자바에서 현대적인 언어로 업그레이드giken.tistory.com `변수, 타입, 조건문, 반복문, List 등등`이러한 기초 문법을 1편에서 익히고 왔다.  2편에서는 웹개발에 필요한 문법들 위주로 더 설명한다.     함수fun mai..
코틀린(Kotlin)의 핵심 문법과 예제 (1/2)
·
Programming Language
들어가면서코딩테스트, 스프링 백엔드 개발에서 자바로 프로그래밍을 해왔다.최근 채용 공고를 보면 `스프링 + 코틀린 (코프링)`이 심심치 않게 보인다. 자바에서 현대적인 언어로 업그레이드된 언어가 코틀린이라고한다.따라서 코틀린의 문법을 배우고 더 나아가 간단한 API를 코틀린으로 만들어보는 실습까지 할 계획이다.다행인 점은 자바를 사용해 오던 개발자라면 코틀린 사용이 더 수월할 것이다.    코틀린 파일 생성인텔리제이에서 Kotlin 파일 또는 클래스를 생성하는 방법은 Java 클래스를 생성하는 방법과 유사하다.Kotlin은 클래스가 필수적이지 않기 때문에, 단순히 파일로 생성할 수 있다. 나는 "Main"이라는 이름으로 Kotlin 파일을 만들었다.    변수fun main() { var i = 1..
[Java] 퍼사드 패턴을 예제와 함께 알아보자.
·
Programming Language/Java
퍼사드 패턴이란?퍼사드(Facade) : 건물의 출입구가 있는 정면 복잡한 시스템이나 서브시스템을 단순화된 인터페이스를 통해 외부로 노출시키는 패턴입니다.이를 통해 클라이언트가 시스템의 복잡성을 몰라도 간단한 인터페이스를 통해 시스템을 사용할 수 있도록 합니다.  실생활에서 볼 수 있는 퍼사드 패턴의 예시일상적인 예제로는 스마트폰의 전원 버튼을 들 수 있습니다. 스마트폰의 내부에는 수많은 하드웨어 및 소프트웨어 컴포넌트가 복잡하게 동작합니다. 그러나 사용자에게는 전원 버튼 하나만 노출되어 있고, 이 버튼을 누르면 전체 시스템이 켜지거나 꺼집니다.    개발 과정에서 만나게 되는 퍼사드 패턴이 필요한 상황복잡한 시스템 또는 라이브러리를 간편하게 사용하려고 할 때.다른 시스템과의 상호작용을 캡슐화하려고 할 ..
[Java] 어댑터 패턴을 예제와 함께 알아보자.
·
Programming Language/Java
어댑터 패턴이란?기존의 클래스나 인터페이스를 다른 인터페이스로 변환하는 데 사용되는 구조적인 패턴입니다.  다음과 같은 상황에서 유용합니다.두 개의 인터페이스가 호환되지 않을 때기존 클래스를 변경하지 않고 새로운 클래스나 인터페이스와 통합할 때   어댑터 패턴은 다음과 같은 주요 구성 요소로 구성됩니다Target(대상) 인터페이스: 클라이언트가 사용하려는 인터페이스입니다. 클라이언트 코드는 이 인터페이스를 통해 객체에 접근합니다.Adaptee(적응 대상) 클래스 또는 인터페이스: 기존에 사용하려는 클래스 또는 인터페이스로, 클라이언트가 직접 사용하기 어려운 경우가 있습니다.Adapter(어댑터) 클래스: Target 인터페이스를 구현하고, Adaptee를 감싸서 Target 인터페이스를 따르도록 변환합니..