💡 학습 목표
|
1. 접근 제어 지시자란?
클래스 외부에서 클래스의 멤버 변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드
2. 접근 제어 지시자에 종류를 알아 보자.
- public —> 어디에서든 접근 가능 함.
- default —> 같은 패키지 내에서 접근 가능
- protected ← 상속 배운 이후
- private —> 해당 .java 안에서만 접근이 가능하다.
시나리오 코드 1
package basic.ch10;
// 은행
public class Bank {
// 아무것도 지정하지 않으면 default 제어 지시자이다.
// private 클래스 안에서만 사용이 가능하다.
String name;
int balance;
// 입금하다.
public void deposit(int money) {
balance = balance + money;
showInfo();
}
// 출금하다.
public int withdraw(int money) {
// 방어적 코드를 작성
if(balance < money) {
System.out.println("잘못된 요청입니다.");
return 0;
}
balance = balance - money;
showInfo();
return money;
}
// 현재 은행의 총 잔액을 출력 하다.
public void showInfo() {
System.out.println("현재 잔액은 : " + this.balance + " 입니다.");
}
}
package basic.ch10;
public class BankTest {
// 코드의 시작점
public static void main(String[] args) {
Bank bank1 = new Bank();
bank1.name = "우리은행";
bank1.deposit(10_000);
int getMoney = bank1.withdraw(10_000); // 리턴 타입이 --> int
System.out.println(">>>>>> 출금 >>>>>>>>>");
System.out.println("금액 : " + getMoney);
} // end of main
} // end of class
정보 은닉
- private으로 제어한 멤버 변수도 public 메서드가 제공되면 접근 가능하지만 변수가 public으로 공개되었을 때보다 private 일때 각 변수에 대한 제한을 public 메서드에서 제어 할 수 있다.
- 객체 지향 프로그램에서 정보 은닉은 필요한 외부에서 접근 가능한 최소한의 정보를 오픈함으로써 객체의 오류를 방지하 클라이언트 객체가 더 효율적으로 객체를 활용할 수 있도록 해준다.
get() / set() 메서드
- private 으로 선언된 멤버 변수 (필드)에 대해 접근, 수정할 수 있는 메서드를 public으로 제공
get() 메서드만 제공 되는 경우 read-only 필드 - 이클립스에서 자동으로 생성해주는 단축 기능이 존재한다.
package basic.ch10;
public class Hero {
private String name;
private int hp;
private int power;
private double defense;
private boolean isDie;
// getter, setter 메서드를 만들어 주세요
public String getName() {
return this.name;
}
public void setName(String inputName) {
this.name = inputName;
}
public int getHp() {
return this.hp;
}
public void setHp(int health) {
this.hp = health;
}
public int getPower() {
return this.power;
}
public void setPower(int inputPower) {
this.power = inputPower;
}
public double getDefense() {
return this.defense;
}
public void setDefense(double inputDefense) {
this.defense = inputDefense;
}
public boolean getIsDie() {
return this.isDie;
}
public void setIsDie(boolean inputBoolean) {
this.isDie = inputBoolean;
}
}
package basic.ch10;
public class HeroTest {
public static void main(String[] args) {
String name;
int hp;
int power;
double defense;
boolean isDie;
Hero hero1 = new Hero();
hero1.setName("아이언맨");
name = hero1.getName();
System.out.println("영웅의 이름 : " + name);
hero1.setHp(0);
hp = hero1.getHp();
System.out.println("체통 : " + hp);
hero1.setPower(50);
power = hero1.getPower();
System.out.println("공격력 : " + power);
hero1.setDefense(20);
defense = hero1.getDefense();
System.out.println("방어력 : " + defense);
hero1.setIsDie(true);
if(hp <= 0) {
System.out.println("생존 여부 : 아임 아이언맨");
}else {
System.out.println("생존 여부 : 생존");
}
}
}
'Java > JAVA 2 - 객체지향 핵심' 카테고리의 다른 글
ver 0.0.1 Starcrft (0) | 2024.04.18 |
---|---|
JAVA 2 - this 3가지 사용 방법 (0) | 2024.04.18 |
JAVA 2 - 객체지향 패러다임이란? (0) | 2024.04.16 |
JAVA 2 - 생성자(constructor) (0) | 2024.04.16 |
JAVA 2 - RunTime Data Area (0) | 2024.04.15 |