접근 수준 개요
Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 87개 중 10번째.
접근 제어자는 필드와 메서드에 접근할 수 있는 위치를 제어합니다. 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() { } // 기본 접근 메서드
}코드가 여전히 작동할 수 있는 범위 내에서 가장 제한적인 접근 수준을 선택하세요. 이는 데이터를 보호하고 코드를 유지 관리하기 쉽게 만들어 줍니다.
챌린지
쉬움접근 제어자가 서로 다른 파일 간의 가시성을 어떻게 제어하는지 보여주는 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() 메서드의 전체 학생 정보입니다.
직접 해보기
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 클래스단일 및 다중 레벨 상속다중 클래스 상속이 불가능한 이유요약 - 직원 계층 구조