자바의 pojo:
순수 자바언어만으로 작성된 객체: 순수 자바 객체면 다 POJO다.
- 미리 정의된 클래스를 상속받지 않고
- 인터페이스를 강제로 구현하지도 않고
- 기술 중심의 어노테이션을 포함하지 않는다.
- 주로 private로 선언하여 캡슐화를 유지한다.
JavaBean : 일반 제한 javabean api 사양에 따른다.
직렬화 serializable을 상속 해야한다.
필드 가시성 private만 가능
필드 접근 getter setter만 가능
기본 생성자 필: 인수가 없는 생성자가 존재해야한다.
public class User {
private String name;
public User() {}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
코드에 불변성을 도입하는 것은 전략이다. 왜 쓸까?
1. 버그 감소
2. 동시성 안전
3. 예측 가능성
함수형 프로그래밍은 왜 불변성을 강제하나?
함수형 프로그래밍은 '상태 변경'을 금지하려고 불변성을 사용한다.
같은 입력 ➔ 항상 같은 결과
이거를 방해하는 요소가 상태 변경(side effect)
자바에서 사용하는 불변성 특징
1)String : 높은 최적화 (불변성): 한번 생성된 문자열 객체의 내용이 절대 변경 되지 않는다.
새로운 객체 생성 : 문자열 s1+ s2= 새로운 string 객체가 생성
기존 객체는 유지
안전성을 위해서 내용을 바꾸지 못하고 연결할때는 매번 새로운 객체를 만든다.
2)불변 컬렉션: 생성후 상태가 절대 안변함 수정도 삭제도 안된다.
①변경 불가능한 컬렉션: 특정 컬렉션 뷰에 대해 수정작업을 실행할수 없도록한다. 변경 불가능한 뷰 기존 컬렉션에 대한 추상화 이다. 원본 컬렉션 자체는 참조를 통해 변경이 가능
②불변 컬렉션 팩토리 메서드
③불변 복제
3)불변 수학 java.math : 넓은 범위와 높은 정밀도로 사이드 이펙트가 없는 계산을 수행할수 있기때문이다.
BigDecimal a = new BigDecimal("10");
BigDecimal b = a.add(new BigDecimal("5"));
//a 안바뀐다.
4)자바 시간api : 동시환경에서도 안전하게 사용
5)enum: 상수로 구성된 특별 타입
6)final 키워드 하위 클래스화될수 없고 오버라이딩될수도 없고 생성자 내부에 선언될때 한번만 할당되고 재할당 없고 변수 참조는 필드처럼 작동 한번만 할당할수 있다.
7)레코드: 기본 데이터의 집합체 getter 동등성 비교 toString hashcode 메서드를 제공
public record User(String name, int age) {}
- 자동 final
- setter 없음
- equals/hashCode 자동
8) Stream API (대표적인 함수형 스타일)
List<Integer> numbers = List.of(1, 2, 3);
List<Integer> result = numbers.stream()
.map(n -> n * 2)
.toList();
//원본 리스트 안 바뀜
//새로운 결과 생성
참조: 함수형 프로그래밍 with 자바(한빛미디어,벤 바이디히,허귀영 번역p.109-131)
https://product.kyobobook.co.kr/detail/S000212762854
함수형 프로그래밍 with 자바 | 벤 바이디히 - 교보문고
함수형 프로그래밍 with 자바 | 모던 자바의 새로운 전환점, 함수형 프로그래밍에 집중하라 람다와 스트림을 활용한 자바 함수형 프로그래밍 실전 가이드자바는 전통적으로 객체 지향 프로그래
product.kyobobook.co.kr
'【Java】' 카테고리의 다른 글
| 함수형 예외처리 (1) | 2026.04.23 |
|---|---|
| Optional (0) | 2026.04.22 |
| CompletableFuture 생성 (0) | 2026.04.08 |
| [코테에서 자주쓰는 기본 메서드 정리5] replace (0) | 2026.04.07 |
| [코테에서 자주쓰는 기본 메서드 정리4] contains (0) | 2026.04.07 |