JAVA

접근 제어 지시자(access modifier)

jiyoon12 2025. 4. 24. 00:37
  • 클래스 외부에서 클래스의 멤버 변수, 메서드 생성자응 사용할 수 있는지 여부를 지정하는 키워드이다,
  • 객체 상태값 변경은 행위로서 처리해야한다.
package com.access;

// Bank 클래스를 설계하는 측 코드(우리가 설계)
// 계좌
public class Bank {
    // ** 접근 제어 지시자 (public default private) **

    // public
    // name 변수는 누구나 어디에서든 접근해서 사용 가능
    public String name;

    // default
    // 같은 패키지 내에서만 접근할 수 있다
    int balance;

    // private
    // 같은 클래스 안에서만 접근할 수 있다(Bank 에서만 접근 가능)
    private String number;

    public void showInfo() {
        System.out.println("현재 계좌 번호는 : " + number + " 입니다");
    }
}
package com.access;

public class Account {

    private String name;
    //int balance; 1단계
    private int balance; // 2단계

    // getter, setter 메서드 만들기
    // 외부에서 balance 값을 리턴 받을 수 있는 메서드를 만들어 보자.
    // 변수 앞에 get 단어를 붙인다.( 매개변수를 선언할 필요가 없다)
    public int getBalance() {
        return balance;
    }

    public String getName() {
        return name;
    }

    // setter 메서드 만들기
    public void setBalance(int b) {
        // 식, 방어적 코드 작성
        if (b < 0) {
            System.out.println("0 이하 값을 넣을 수 없습니다.");
        } else {
            balance = b;
        }
    }

    public void setName(String n) {
        name = n;
    }

    // 입금하다
    public void deposit(int money) {
        balance += money;
    }

    //  출금하다
    public void withdraw(int money) {
        // TODO 방어적 코드를 작성해야한다
        balance -= money;
    }

    // 현재 잔액 출력 메소드
    public void showInfo() {
        System.out.println("현재 계좌 잔액은 :" + balance + " 입니다");
    }
}
package com.access;

public class AccountTest {

    public static void main(String[] args) {

        Account account = new Account();
        account.deposit(10_000);
        account.withdraw(6_000);
        account.showInfo();

        // 접근 제어지시자 문법, 왜 사용하는가?

        // 신입 개발자가 실수로 메서드를 통해서 코드를 작성한게 아니라
        // 바로 멤버 변수에 접근해서 수정하는 코드를 작성해버렸다
        // account.balance = 10_000; // 입금 명령어 작성했다 본인 생각!
        account.showInfo();
        // 실수할 수 있는 가능성이 있다 !!
        // balance 변수를 외부에서 안보이게 접근 차단해보자
        // private 를 선언해서 외부에서 접근 차단

        // 외부에서는 오직 출금 가능, 입금 가능 메서드로만 사용이 가능해진다

        // >>>> 현재 잔액 <<< <--- 출력하고 싶어.
        //int n1 = account.balance;
        int outerBalancer = account.getBalance();
        System.out.println(">>>현재 잔액 : " + outerBalancer + " <<<<");

        // 자바에서 멤버 변수 값을 초기화 하지 않으면 string null 로 초기화 된다
        System.out.println(account.getName());

        // setter 메서드
        account.setBalance(0);
        account.showInfo();
    }
}

package com.dot;

public class A {

    B b;

    // 생성자(인스턴스화 될 때 제일 먼저 수행하는 코드이다)
    public A() {
        System.out.println("A 생성자 호출");
        b = new B();
    }
}
package com.dot;

public class B {

    C c;

    // 생성자
    public B() {
        // 무언가 코드 작성
        System.out.println("B 생성자 호출");
        c = new C();
    }
}
package com.dot;

public class C {

    // 기본 생성자 호출 됨 --> heap 메모리에 C 객체가 올라 갔다.

    public void callFinal(){
        System.out.println("callFinal() 메소드가 호출 되었다.");
    }
}
package com.dot;

public class MainTest {

    public static void main(String[] args) {
        System.out.println(" . 연산자의 여행~!! ");

        A a1 = new A();

        // a1.b.c // C 객체가 생성 안된 상태라서 null 에러 일어남
        a1.b.c.callFinal();
    }
}

'JAVA' 카테고리의 다른 글

this 연습문제  (0) 2025.04.24
this 사용법  (0) 2025.04.24
함수, 메서드, 생성자 복습하기  (0) 2025.04.24
생성자 이용해서 버스, 학생, 지하철 만들어 보기  (0) 2025.04.24
생성자(constructor)  (0) 2025.04.24