상속(Inheritance) vs 합성(Composition)

객체지향 프로그래밍에서 재사용성을 높이는 방법은 크게 두 가지다. 부모의 기능을 물려받는 상속과, 필요한 기능을 가진 객체를 내부에 포함하는 합성이다. 현대 소프트웨어 설계에서는 왜 “상속보다는 합성(Composition over Inheritance)“을 권장하는지 그 이유를 파헤쳐 본다. 1. 상속 (Inheritance): “Is-A” 관계 상속은 하위 클래스가 상위 클래스의 특성을 그대로 이어받는 방식이다. ‘기본 클래스의 확장’이라는 개념으로 접근한다. 특징 Is-A 관계: “강아지는 동물이다(Dog is an Animal)“와 같은 논리적 계층 구조를 가진다. 화이트박스 재사용: 상위 클래스의 내부 구현이 하위 클래스에 노출된다.

객체지향 프로그래밍(OOP)의 4가지 핵심 특징

객체지향 프로그래밍은 프로그램을 단순히 명령어의 나열로 보는 것이 아니라, 여러 개의 독립된 단위인 ‘객체’들의 모임으로 파악하는 시각이다. 이를 지탱하는 4가지 기둥은 다음과 같다. 1. 캡슐화 (Encapsulation) 캡슐화는 데이터(속성)와 그 데이터를 처리하는 함수(메서드)를 하나로 묶는 것을 말한다. 정보 은닉: 객체 내부의 상세한 구현을 외부로부터 숨기고, 필요한 부분만 노출한다. 안정성: 내부 코드가 바뀌어도 외부에는 영향을 주지 않아 유지보수가 쉬워지며, 데이터의 오염을 방지한다. 2. 상속 (Inheritance) 상속은 이미 정의된 상위 클래스(부모)의 특징을 하위 클래스(자식)가 물려받는 것이다.

Node.js vs JVM 언어

백엔드 아키텍처 전반적인 차이 ① API 서버 구조 관점 Node.js (비동기 이벤트 루프) JVM(Spring 등, 멀티스레드 기반) 요청 처리 방식 하나의 이벤트 루프가 요청을 받고, I/O가 완료되면 콜백을 실행 요청당 스레드 하나가 생성(혹은 스레드 풀에서 할당)되어 끝날 때까지 담당 I/O 처리 논블로킹 I/O (DB, 외부 API를 기다리지 않음) 블로킹 I/O (스레드가 대기) 주요 아키텍처 패턴 리액티브 (Reactive) / 이벤트 주도(Event-driven) MVC (Model-View-Controller) / 명령형(Imperative) 주요 프레임워크 Express, Fastify, NestJS Spring Boot, Micronaut, Quarkus 🧠 패러다임 차이 핵심:

WebFlux, WebClient

리액티브 시스템 리액티브 시스템이란 클라이언트 요청에 바로 응답을 해주는 시스템을 말한다. 리액티브 시스템의 특징은 다음과 같다. 응답성이 높다. 탄력적이고 유연하다. 메시지 기반으로 통신한다. 리액티브 프로그래밍 리액티브 프로그래밍이란 리액티브 시스템을 구축하는 데 필요한 프로그래밍 모델을 말한다. 리액티브 프로그래밍의 특징은 다음과 같다. 데이터 소스에 변경이 있을 때마다 데이터를 전파 선언형 프로그래밍 패러다임 : 실행할 동작을 구체적으로 명시하지 않고 목표만 정의함 함수형 프로그래밍 기법 사용 리액티브 스트림즈(Reactive Streams) 리액티브 스트림즈란 리액티브 프로그래밍을 표준화한 명세를 말한다.

프록시 패턴, 데코레이터 패턴

프록시 패턴 1 2 3 4 package hello.proxy.pureproxy.proxy.code; public interface Subject { String operation(); } 예제에서 Subject 인터페이스는 단순히 operation() 메서드 하나만 가지고 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package hello.proxy.pureproxy.proxy.code; import lombok.extern.slf4j.Slf4j; @Slf4j public class RealSubject implements Subject { @Override public String operation() { log.info("실제 객체 호출"); sleep(1000); return "data"; } private void sleep(int millis) { try { Thread.

템플릿 메서드 패턴, 전략 패턴, 템플릿 콜백 패턴

템플릿 메서드 패턴 템플릿은 기준이 되는 거대한 틀이다. 템플릿이라는 틀에 변하지 않는 부분을 몰아둔다. 그리고 일부 변하는 부분을 별도로 호출해서 해결한다. 템플릿 메서드 패턴은 부모 클래스에 알고리즘의 골격인 템플릿을 정의하고, 일부 변경되는 로직은 자식 클래스에 정의하는 것이다. 이렇게 하면 자식 클래스가 알고리즘의 전체 구조를 변경하지 않고, 특정 부분만 재정의할 수 있다. 결국 상속과 오버라이딩을 통한 다형성으로 문제를 해결하는 것이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 package hello.