본문 바로가기
기타/백엔드 기초

자바 Java | 접근제어자: 객체 지향 프로그래밍의 캡슐화 원칙과 예시 코드

by YUNI Heo 2023. 3. 7.
반응형

 

✅ 접근제어자 Access Modifiers

클래스, 변수, 메서드의 접근 범위를 제한하기 위하여 사용한다.

접근제어자는 객체 지향 프로그래밍의 캡슐화 Encapsulation 원칙을 구현한다.

 

💡 private 접근제어자

같은 클래스에서만 접근 가능하다.

  • 다른 클래스에서 private 멤버에 접근하려면 public 메서드를 통해 접근한다.


객체 생성 후, 멤버 변수에 접근 가능하다.

객체 생성 후, 메서드를 호출하려면 같은 클래스에서만 접근 가능하다.

 

클래스 내부에서만 사용한다.

 

class MyClass {
    private int myPrivateVar;

    private void myPrivateMethod() {
        System.out.println("Private method");
    }
}

 

💡 default (package-private) 접근제어자

같은 패키지에서 접근 가능하다.
패키지 외부에서 접근 불가능하다.


객체 생성 후, 멤버 변수에 접근 가능하다.

 

같은 패키지에서 상호작용할 때 사용한다.

 

class MyClass {
    int myPackagePrivateVar;

    void myPackagePrivateMethod() {
        System.out.println("Package-private method");
    }
}

 

💡 protected 접근제어자

같은 패키지와 상속받은 클래스에서 접근 가능하다.
패키지 외부에서 접근 불가능하다.


객체 생성 후, 멤버 변수에 접근 가능하다.

객체 생성 후, 메서드를 호출하려면 하위 클래스에서 오버라이딩을 해야 한다.

 

같은 패키지에서 상호작용할 때 사용한다.

 

class MyClass {
    protected int myProtectedVar;

    protected void myProtectedMethod() {
        System.out.println("Protected method");
    }
}

 

💡 public 접근제어자

모든 클래스에서 접근 가능하다.

패키지 외부에서 접근 가능하다.


객체 생성 후, 멤버 변수에 접근 가능하다.

객체 생성 후, 메서드 호출이 가능하다.

 

 다른 클래스와 상호작용할 때 사용한다.

 

class MyClass {
    public int myPublicVar;

    public void myPublicMethod() {
        System.out.println("Public method");
    }
}

 

💡 예시

BankAccount 클래스의 'accountNumber'와 'balance' 변수에 private 접근제어자를 사용한다.

  • 외부에서 직접 접근할 수 없다.
  • 클래스 내부 구현을 외부로부터 숨기고, 외부에서 클래스의 상태를 잘못 변경하는 것을 방지한다.

 

public class BankAccount {
	// 계좌 번호를 저장하는 private 변수
	private String accountNumber;
	// 계좌의 잔액을 저장하는 private 변수
	private double balance;

	// BankAccount 생성자: 계좌 번호와 초기 잔액을 받아 객체를 생성한다.
	public BankAccount(String accountNumber, double initialBalance) {
		// 인자로 받은 계좌 번호와 초기 잔액을 멤버 변수에 할당한다.
		this.accountNumber = accountNumber;
		this.balance = initialBalance;
	}

	// deposit 메서드: 금액을 인자로 받아 계좌에 입금한다.
	public void deposit(double amount) {
		// 금액이 0보다 크면 입금한다.
		if (amount > 0) {
			balance += amount;
		} else {
			// 금액이 0보다 작거나 같으면 오류 메시지를 출력한다.
			System.out.println("입금액이 올바르지 않습니다.");
		}
	}

	// withdraw 메서드: 금액을 인자로 받아 계좌에서 출금한다.
	public void withdraw(double amount) {
		// 금액이 0보다 크고 잔액보다 작거나 같으면 출금한다.
		if (amount > 0 && amount <= balance) {
			balance -= amount;
		} else {
			// 금액이 0보다 작거나 잔액보다 크면 오류 메시지를 출력한다.
			System.out.println("출금액이 올바르지 않거나 잔액이 부족한다.");
		}
	}

	// getBalance 메서드: 계좌의 잔액을 반환한다.
	public double getBalance() {
		return balance;
	}

	// getAccountNumber 메서드: 계좌 번호를 반환한다.
	public String getAccountNumber() {
		return accountNumber;
	}
}
반응형