생성자, this, 캡슐화와 접근 제어자
12강. 생성자, this, 캡슐화와 접근 제어자
1. 이번 강의에서 해결할 문제
필드를 외부에서 마음대로 바꾸면 빈 이름이나 음수 점수처럼 유효하지 않은 객체가 생성됩니다. 생성 시점부터 규칙을 지켜야 합니다.
2. 학습 목표
3. 핵심 개념
생성자는 new 직후 객체의 초기 상태를 만들고 반환 타입을 쓰지 않습니다. private은 클래스 외부의 직접 접근을 막고 public 메서드가 허용된 읽기·변경 경로가 됩니다. 캡슐화는 getter를 모두 만드는 것이 아니라 불변 조건을 한곳에서 지키는 설계입니다.
4. 단계별 실습
1. src/EncapsulationDemo.java 작성
실행 환경: 코드 편집기
실행 위치: C:\dev\game-records
실행 전 확인: 같은 이름의 기존 파일이 있다면 덮어쓰기 전에 Git diff와 이번 강의 변경 범위를 확인합니다.
대상 파일: src/EncapsulationDemo.java
final class GameRecord {
private final String playerName;
private final String gameMode;
private final int score;
private final int playMinutes;
GameRecord(String playerName, String gameMode, int score, int playMinutes) {
if (playerName == null || playerName.isBlank()) throw new IllegalArgumentException("이름이 비었습니다.");
if (score < 0 || playMinutes < 0) throw new IllegalArgumentException("점수와 시간은 0 이상이어야 합니다.");
this.playerName = playerName.trim();
this.gameMode = gameMode;
this.score = score;
this.playMinutes = playMinutes;
}
String getPlayerName() { return playerName; }
int getScore() { return score; }
String summary() { return playerName + " | " + gameMode + " | " + score + "점 | " + playMinutes + "분"; }
}
public class EncapsulationDemo {
public static void main(String[] args) {
GameRecord record = new GameRecord(" Alice ", "ranked", 1350, 28);
System.out.println(record.summary());
System.out.println(record.getPlayerName() + " 최고 후보: " + record.getScore());
}
}
2. PowerShell에서 컴파일·실행
실행 환경: Windows PowerShell
실행 위치: C:\dev\game-records
실행 전 확인: java -version과 javac -version이 선택한 LTS JDK를 가리키고, 소스 파일명이 public 클래스명과 일치하는지 확인합니다.
대상: 이 강의의 .java 파일, out의 class 파일과 명시된 출력 파일
Set-Location C:\dev\game-records
javac -d out .\src\EncapsulationDemo.java
java -cp out EncapsulationDemo
예상 결과: 검증과 공백 정리를 거친 유효한 기록만 생성되어 요약이 출력됩니다.
5. 코드가 동작하는 이유
매개변수와 필드 이름이 같을 때 this.playerName은 현재 객체의 필드를 가리킵니다. final 필드는 생성자에서 한 번 초기화한 뒤 다른 값으로 대입할 수 없어 기록의 불변성을 강화합니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
생성자, this, 캡슐화와 접근 제어자 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.