분류 전체보기 172

추상 클래스 / 인터페이스

추상 클래스는 공통된 메서드와 필드를'상속받는 하위 클래스'에서 재사용하거나 활용할 수 있도록 설계된다. 구현된 메서드와 추상 메서드(구현되지 않고 하위 클래스에서 구현해야만 하는 메서드)를 모두 가질 수 있고,주로 상향식 설계에서 사용되며,관련 클래스 간 공통된 기능을 모아 캡슐화하고 코드 재사용성을 높이는데 유용하람쥐인터페이스는 클래스가 구현해야 할 메서드를 미리 선언만 하고,실제 구현을 구현하는 클래스에 위임한다. 다중 구현이 가능하고, 클래스가 특정 행동(메서드)을 반드시 구현하도록 강제하고 싶을 때 !! 밀이하향식 설계에 적합하다고 볼 수 있다 즉, 추상 클래스는 "공통된 기능을 캡슐화"하는 데 중점을 두고, 인터페이스는 "행동 규약을 강제"하는 데 초점이 맞춰져 있다람쥐추상 클래스 추상 클래스..

Java 2024.12.20

빈약한 도메인 모델 vs 풍성한 도메인 모델

빈약한 도메인 모델 (Anemic Domain Model)특징VO(또는 엔티티): 데이터를 담는 역할만 함. (getter/setter 중심)비즈니스 로직은 서비스 계층에 존재.장점객체가 단순하고 테스트하기 쉬움.서비스 계층에서 로직을 한눈에 파악 가능.단점도메인 객체가 비즈니스와 분리됨 → 로직 응집도가 낮아짐.도메인 객체의 사용 의도가 불명확할 수 있음.풍성한 도메인 모델 (Rich Domain Model)특징도메인 객체가 데이터를 담고 비즈니스 로직도 포함.서비스 계층은 도메인의 비즈니스 메서드를 호출하여 작업 위임.장점도메인 객체가 비즈니스 로직을 캡슐화 → 높은 응집도.도메인 중심 설계(DDD)에 적합.단점설계 복잡도 상승.객체 간 의존성이 증가할 가능성 있음.VO와 DTO의 역할 구분VO (V..

Spring 2024.12.19

ServletResponse.isComitted(), FilterChain (with GPT)

ServletResponse.isCommitted()ServletResponse.isCommitted() 메서드는 Java의 Servlet API에서 응답(Response)이 클라이언트로 전송되었는지 확인하는 메서드임.역할 및 동작isCommitted() 메서드는 응답의 헤더 또는 본문 내용이 이미 클라이언트로 전송되었는지 여부를 boolean 값으로 반환함.응답이 커밋되었으면 true, 아직 클라이언트로 전송되지 않았다면 false를 반환함.주요 특징커밋의 의미:HTTP 응답이 커밋된다는 것은 응답 헤더와 상태 코드가 클라이언트로 전송되었다는 것을 의미함.일반적으로, 첫 번째 바이트가 응답 본문에 기록되면 응답이 커밋됨.또는 flushBuffer() 메서드가 호출되면 강제로 커밋됨.커밋 후 작업 제한:..

Spring 2024.12.19

(지피티 선생님의) InvokeDynamic 특강

(지피티 선생님의) 람다와 일급 객체, FP 특강🍱  말밥: 람다와 일급 객체람다를 이렇게 생각해봐. ‘코드를 바로 손에 들고 쓸 수 있는 작은 조각’ 같은 거야. 한 번, 이런 상상을 해보자:🍳 요리사 이야기요리사가 있는데, 이 사람은 특99duuk.tistory.com이어서!!! 🍱 말밥: 인보크 다이나믹이 뭐야?자, 인보크 다이나믹(InvokeDynamic)은 자바의 "마술 도구" 같은 거야.평소에 우리가 코드를 실행할 때, 자바는 "야, 이 메서드 찾아봐!" 하면서 메서드 호출 경로를 딱딱하게 정해둬.그런데 인보크 다이나믹은 이렇게 고정된 호출 경로를 완전히 유연하게 만들어줘.🍳 비유: 요리사의 비법보통 요리사가 요리를 만들려면:**레시피(코드)**를 꺼내고,그걸 따라 만들어야 해.즉, 어..

Java 2024.12.12

(지피티 선생님의) 람다와 일급 객체, FP 특강

🍱  말밥: 람다와 일급 객체람다를 이렇게 생각해봐. ‘코드를 바로 손에 들고 쓸 수 있는 작은 조각’ 같은 거야. 한 번, 이런 상상을 해보자:🍳 요리사 이야기요리사가 있는데, 이 사람은 특별한 레시피 없이도 음식을 만들 수 있는 대단한 실력자야. "이 재료로 이렇게 해줘!"라고만 말하면 바로 요리를 시작하지. 이게 바로 람다야. **필요한 재료(인자)**를 주고, **어떻게 요리할지(동작)**를 간단히 정의하면 끝.람다를 쓰면 긴 레시피(함수 정의)를 생략하고, 짧고 귀여운 한 줄로 '작업 지시서'를 적을 수 있는 것이지!🎩 일급 객체란?이제 무대로 넘어가 보자. 일급 객체는 VIP!이 VIP는 다른 '일반적인 값'처럼 놀 수 있는 아주 멋진 자격을 가진 존재야. 예를 들어 함수나 람다를 말이지..

Spring 2024.12.12

부트 외장톰캣 사용

부트로 만든 프로젝트는 jar로 말아져 톰캣을 포함한다..벗... 외장 톰캣을 사용해야하는 경우가 있다...생각보다 ... 외장톰캣을 사용하는 것은 간단하다.. 먼저 pom.xml에 .. 0.0.1-SNAPSHOT war // 추가 ext-tomcatwar로 말겠다고 명시를 해주고...  org.springframework.boot spring-boot-starter-tomcat provided 요놈도 요로코롬 provided로 바꿔줘야 한다고 지피티가 그랬는데 원래 이렇게 되어있었음...spring-boot-starter-tomcat을 provided로 설정하는 이유는 외장 톰캣을 사용할 때, 내장 톰캣 라이브러리를 제외하여 외장 톰캣의 서블릿 컨테이너에 의존하기 위함이다. 그렇지 않으..

Spring Boot 2024.12.12

ㅋㅋ

**람다(lambda)**부터 시작해서 차근차근 설명해볼게요.람다(lambda)란?람다는 **익명 함수(anonymous function)**라고도 불리며, 이름이 없는 간단한 함수입니다.자바 8부터 도입되었으며, 간결한 문법으로 함수형 프로그래밍을 지원합니다. • 예시 (람다 표현식):// 기존 방식: 익명 클래스Runnable runnable = new Runnable() { @Override public void run() { System.out.println("Hello, Lambda!"); }};// 람다 방식Runnable lambdaRunnable = () -> System.out.println("Hello, Lambda!");람다의 주요 특징은 코드를 간결하게 ..

카테고리 없음 2024.12.11

파라미터 타입이 다른 공통 로직 모듈화 - 어댑터 패턴

그리고 다시 이어서 2024.12.11 - [Java] - 파라미터 타입이 다른 공통 로직 모듈화 - 인터페이스 파라미터 타입이 다른 공통 로직 모듈화 - 인터페이스파라미터 타입이 달라 코드 중복이 발생하는 문제"를 인터페이스를 통해 해결하는 것을 간단한 예로 다시 정리해둔 것임...Animal 인터페이스를 활용하여 공통 로직을 모듈화하고,파라미터 타입99duuk.tistory.com 기존 코드를 수정하기 두렵거나.. 다양한 타입의 객체를 통합된 방식으로 처리해야 하는 상황이라면 어댑터 패턴 또한 고려해볼만할지도? (맞는지모름) 1. 어댑터 패턴의 기본 개념어댑터 패턴은 두 가지 시스템(또는 클래스)이 호환되지 않을 때,중간에 어댑터 클래스를 만들어 서로를 연결하는 디자인 패턴임이 패턴은 특정 인터페이스..

Java 2024.12.11

파라미터 타입이 다른 공통 로직 모듈화 - 정적 팩토리 메서드

2024.12.11 - [Java] - 파라미터 타입이 다른 공통 로직 모듈화 - 인터페이스2024.12.11 - [Java] - 파라미터 타입이 다른 공통 로직 모듈화 - 제네릭 파라미터 타입이 다른 공통 로직 모듈화 - 제네릭파라미터 타입이 다른 공통 로직 모듈화 -2024.12.11 - [Java] - 파라미터 타입이 다른 공통 로직 모듈화 - 인터페이스 파라미터 타입이 다른 공통 로직 모듈화 - 인터페이스파라미터 타입이 달라 코99duuk.tistory.com다시 이어서 .. 2024.10.21 - [Java] - 정적 팩토리 메서드 정적 팩토리 메서드| 정적 팩토리 메서드는 객체를 만드는 특별한 방법임일반적인 생성자 대신, 클래스 안에 객체를 만드는 전용 메서드를 만들어 사용함.이 메서드는 이름..

Java 2024.12.11