접근 제어자와 캡슐화
캡슐화와 접근 제어
필드를 외부에서 함부로 건드리지 못하게 숨기고, 검증된 메서드로만 상태를 바꾸게 하는 캡슐화를 배웁니다. 이 레슨을 끝내면 왜 모든 필드를
private으로 시작해야 하는지, 불변 객체가 왜 안전한지, record가 어떤 보일러플레이트를 없애 주는지 설명할 수 있습니다.
1. 왜 배우는가
04 레슨의 Person은 p.age = -50;이 가능했습니다. 컴파일도 되고 실행도 됩니다. 나이가 -50인 사람이 시스템에 존재하게 되고, 그 데이터는 DB에 저장되고, 통계를 망치고, 몇 달 뒤 누군가가 "평균 나이가 왜 이상하지?"로 며칠을 낭비합니다.
잔액이 음수인 계좌, 수량이 0인 주문, 이메일 형식이 아닌 이메일. 잘못된 상태는 만들어지는 순간 막아야 하고, 그러려면 상태를 바꾸는 통로를 하나로 모아야 합니다.
캡슐화(encapsulation)는 데이터를 클래스 안에 숨기고(private), 정해진 메서드로만 접근하게 하는 원칙입니다. 이것은 객체 지향의 4대 원칙(캡슐화, 상속, 다형성, 추상화) 중 첫 번째이며 가장 실용적입니다. 스프링에서 다루는 모든 엔티티, DTO, 서비스 클래스가 이 원칙 위에 서 있습니다.
캡슐화의 두 번째 이득은 변경의 격리입니다. 잔액을 int에서 BigDecimal로 바꿔야 할 때, 필드가 public이면 그 필드를 쓰는 100곳을 다 고쳐야 하지만 private이고 메서드로만 접근하면 클래스 안쪽만 고치면 됩니다. 실무 코드는 처음 쓰는 시간보다 고치는 시간이 10배 깁니다. 캡슐화는 그 10배를 줄이는 도구입니다.