Java 14

객체 생성시 무분별한 Setter를 지양하고 Builder 패턴을 써야 하는 이유

[결론]객체를 생성할 때 new 생성자와 Setter를 조합하는 방식은 객체의 일관성과 불변성을 훼손하므로, 안전한 객체 생성과 명확한 가독성을 보장하는 Builder 패턴을 기본으로 사용해야 한다. [본론]기존방식// 기존 방식User user = new User();user.setName("홍길동");user.setAge(20);// user.setEmail(...) -> 필수 값을 실수로 누락해도 에러가 안 남! 일관성(Consistency) 붕괴: 객체가 생성된 직후에는 빈 껍데기(불완전한 상태)다. 필수 값 셋팅을 하나라도 빼먹으면 불완전한 객체가 시스템을 돌아다니다 런타임 에러(NPE 등)를 터뜨린다.불변성(Immutability) 보장 불가: 값을 주입하기 위해 Setter 메서드를 publ..

IT/JAVA&Spring 2026.03.06

JAVA 한글 깨짐 UTF-8 인코딩 문제

JAVA 사용중 UTF-8 인코딩 문제에 직면하여 해결 과정을 기록한다. 상황 : 자바로 짜여진 코드 출력시 한글 인코딩이 깨지는 현상 JAVA 인코딩과 관련된 상황1. Java 소스 파일 작성 시 (Source File Encoding)2. 컴파일 시 (Compile Time Encoding)3. JVM 실행 및 출력 시 (Runtime Encoding)4. 터미널 출력 환경 해결법1. 윈도우 환경 UTF-8 사용하게 하기 - 제어판 > 국가 또는 지역 > 관리자 옵션 > 시스템 로캘 변경 > UTF-8 사용2. JVM 파일 인코딩시 UTF-8 사용하게 하기 - 제어판 > 시스템 > 고급 시스템 설정 > 환경 변수 > 시스템 변수 - 새로 만들기 - 변수 이름 : JAVA_TOOL_OPTIONS ..

IT/JAVA&Spring 2026.01.13

JAVA String, StringBuffer, StringBuilder 설계와 성능 비교

요약표구분StringStringBufferStringBuilder가변성불변 (Immutable)가변 (Mutable)가변 (Mutable)수정(쓰기) 성능가장 느림 (매번 새로 생성)보통 (동기화 비용 발생)가장 빠름 (동기화 비용 없음)Thread-safe안전안전불안전속도의 기준메모리 재할당/복사 횟수동기화(Lock) 체크 유무동기화(Lock) 체크 없음주요 용도단순 조회, 짧은 문자열멀티스레드 공유 자원 수정그 외 3줄 요약- 쓰기(write) 속도는 보통 StringBuilder > StringBuffer > String 순으로 빠름- 읽기(read) 속도는 String 이 제일 빠르다고는 하나 3가지가 거의 비슷비슷한 수준이다.- 쓰기로 인해 메모리 재할당이 많은 경우 (for 문에서 재할당 등)..

IT/JAVA&Spring 2026.01.13

@Controller, @RestController

1. 요약항목@Controller@RestController기본 목적HTML 뷰(View) 응답순수 데이터(Data) 응답구성 성분@Controller@Controller + @ResponseBody반환 처리ViewResolver가 화면 렌더링HttpMessageConverter가 데이터 변환반환 값의 의미리턴된 String = 파일 경로/이름리턴된 String = 문자열 데이터 그 자체데이터 응답 시@ResponseBody 명시 필요기본 적용 (생략 가능) 2. 상호 변환결국 두 어노테이션은 상호 보완적으로 동작할 수 있습니다. @Controller로 데이터 보내기: * 메서드에 @ResponseBody를 붙이면 HttpMessageConverter가 동작하여 JSON/텍스트를 응답합니다. @RestC..

IT/JAVA&Spring 2026.01.12