public: 어디서나 접근 가능.
• default: 같은 패키지 내에서만 접근 가능.
• private: 해당 클래스 내부에서만 접근 가능.
• protected ← 상속을 배운 후 이해 하기
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;
}
}
package com.dot;
public class A {
B b;
// 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();
//A a1 = new A();
// a1.b.c // C 객체가 생성안됨
a1.b.c.callFinal();
//a1.b.c.callFinal();
}
}
'JAVA 객체 지향 핵심' 카테고리의 다른 글
(JAVA) 스타크래프트 만들어 보기 - 1단계 (0) | 2025.04.17 |
---|---|
(JAVA)this 3가지 사용 방법 - 8 (0) | 2025.04.16 |
(JAVA)함수, 메서드 생성자 복습 - 6_1 (0) | 2025.04.16 |
(JAVA)함수,메서드, 생성자란 (0) | 2025.04.15 |
(JAVA)버스, 학생, 지하철 만들어 보기 (0) | 2025.04.15 |