접근 수준 개요
Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 87개 중 10번째.
접근 제어자는 필드와 메서드에 접근할 수 있는 위치를 제어합니다. 자바에는 네 가지 수준의 접근 제어가 있습니다.
| 제어자 | 동일 클래스 | 동일 패키지 | 자식 클래스 | 전체 |
|---|---|---|---|---|
private | 예 | 아니오 | 아니오 | 아니오 |
| default (키워드 없음) | 예 | 예 | 아니오 | 아니오 |
protected | 예 | 예 | 예 | 아니오 |
public | 예 | 예 | 예 | 예 |
public class BankAccount {
private double balance; // 이 클래스 내에서만
String accountType; // 기본값: 동일 패키지 내에서만
protected String owner; // 동일 패키지 + 하위 클래스
public String bankName; // 어디서나 접근 가능
}private은 가장 제한적입니다 - 직접 액세스해서는 안 되는 내부 데이터에 사용하세요. public은 가장 개방적입니다 - 다른 클래스에서 호출해야 하는 메서드에 사용하세요.
접근 제어자를 지정하지 않으면, Java는 default(package-private이라고도 함) 접근 제어자를 사용합니다. 이는 동일한 패키지 내에서만 접근을 허용합니다.
class Helper { // 기본 접근 클래스
void assist() { } // 기본 접근 메서드
}코드가 여전히 작동할 수 있는 범위 내에서 가장 제한적인 접근 수준을 선택하세요. 이는 데이터를 보호하고 코드를 유지 관리하기 쉽게 만듭니다.
챌린지
쉬움접근 제어자가 서로 다른 파일 간의 가시성을 어떻게 제어하는지 보여주는 Student 기록 시스템을 만들어 봅시다.
코드를 구성하기 위해 두 개의 파일을 생성합니다:
Student.java: 서로 다른 접근 수준을 사용하는 필드를 가진 Student 클래스를 정의합니다:private필드:studentId(String) - Student 클래스 내부에서만 접근 가능- default (제어자 없음) 필드:
grade(int) - 동일한 패키지 내에서 접근 가능 protected필드:name(String) - 동일한 패키지 및 하위 클래스에서 접근 가능public필드:school(String) - 어디서나 접근 가능
"[studentId] name - Grade grade at school"형식의 문자열을 반환하는public메서드getInfo()를 포함하세요.Main.java: Student 객체를 생성하고 클래스 외부에서 어떤 필드에 직접 접근할 수 있는지 보여줍니다.school필드를 직접 출력한 다음,getInfo()의 결과를 출력하여 모든 학생 정보를 보여주세요.
여러분은 studentId, name, grade, school 순서로 네 개의 입력을 받게 됩니다.
출력은 두 줄이어야 합니다: 직접 접근한 학교 이름과 그 뒤에 getInfo() 메서드에서 가져온 전체 학생 정보입니다.
치트 시트
접근 제어자(Access modifiers)는 필드와 메서드에 접근할 수 있는 위치를 제어합니다. Java에는 네 가지 수준의 접근 제어가 있습니다:
| 제어자 | 동일 클래스 | 동일 패키지 | 하위 클래스 | 모든 곳 |
|---|---|---|---|---|
private | 예 | 아니요 | 아니요 | 아니요 |
| default (키워드 없음) | 예 | 예 | 아니요 | 아니요 |
protected | 예 | 예 | 예 | 아니요 |
public | 예 | 예 | 예 | 예 |
public class BankAccount {
private double balance; // 이 클래스 내에서만
String accountType; // 기본값: 동일 패키지 내에서만
protected String owner; // 동일 패키지 + 하위 클래스
public String bankName; // 모든 곳에서 접근 가능
}private은 가장 제한적입니다 - 직접 접근해서는 안 되는 내부 데이터에 사용하세요. public은 가장 개방적입니다 - 다른 클래스에서 호출해야 하는 메서드에 사용하세요.
제어자를 지정하지 않으면 Java는 default(package-private이라고도 함) 접근을 사용하며, 이는 동일한 패키지 내에서만 접근을 허용합니다:
class Helper { // 기본 접근 클래스
void assist() { } // 기본 접근 메서드
}코드가 여전히 작동하는 한 가장 제한적인 접근 수준을 선택하세요. 이는 데이터를 보호하고 코드를 유지 관리하기 쉽게 만듭니다.
직접 해보기
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 입력을 읽습니다
String studentId = scanner.nextLine();
String name = scanner.nextLine();
int grade = Integer.parseInt(scanner.nextLine());
String school = scanner.nextLine();
// TODO: 입력된 값으로 Student 객체를 생성합니다
// TODO: school 필드를 직접 출력합니다 (public이므로 접근 가능)
// TODO: 모든 학생 정보를 표시하기 위해 getInfo()의 결과를 출력합니다
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
4상속
상속의 기초 (extends)super 키워드메서드 오버라이딩 (@Override)생성자 체이닝Object 클래스단일 및 다중 레벨 상속다중 클래스 상속이 불가능한 이유요약 - 직원 계층 구조