[JAVA]/[자바 기초]
[자바 기초] 접근 제어 지시자, get(), set() 메서드
북방바다코끼리표범
2023. 8. 1. 12:36
복습
https://shins99.tistory.com/17
[자바 기초] 객체와 객체 간 상호작용
복습 https://shins99.tistory.com/16 [자바 기초] 생성자 복습 https://shins99.tistory.com/12 [자바 기초] 함수와 메서드 복습 https://shins99.tistory.com/11 [자바 기초] 객체 지향 언어란? 복습 https://shins99.tistory.com/9 [
shins99.tistory.com
💡 학습 목표
1. 접근 제어 지시자란?
2. 4가 종류에 대해 알아 보자
3. getter, setter 메서드에 대해 이해 하자
객체의 기능은 메서드를 통해서 완성하자!
접근 제어 지시자 (accesss modifier)
- 특정 대상에 대해, 클래스 외부로부터 접근 권한을 부여받는 명령어
- 대상 :변수, 메서드, 함수, 클래스 등 대부분
접근 제어 지시자 | |||
private | 같은 클래스 (java 파일) 내부에서만 접근 가능 |
||
default(기본값) | 같은 패키지 내부에서만 접근 가능 |
||
protected | 같은 패키지 내부에 있거나, 다른 패키지여도 상속 관계의 클래스일 때는 접근 가능 |
||
public | 같은 프로젝트 내라면 어디에서든지 접근 가능 |
Bank 클래스 설계 해보기
public class Bank {
String name; // 계좌 번호
int balance; // 계좌 잔액
// 입금
public void deposit(int money) {
this.balance += money;
}
// 출금
public int withdraw(int money) {
// 메서드 영역 안에 사용하는 변수는 지역 변수라고도 한다.
int result = 0;
this.balance -= money;
result = money;
return result;
}
// 잔액 확인
public void showInfo() {
System.out.println("현재 계좌 잔액은 " + balance + " 입니다");
}
} // end of class
Bank 2단계 설계 접근 제어 지시자 추가
public class Bank {
// 접근 제어 지시자 private - 자기 자신에서만 사용 가능
private String name; // 계좌 번호
private int balance; // 계좌 잔액
// 입금
public void deposit(int money) {
this.balance += money;
}
// 출금
public int withdraw(int money) {
// 메서드 영역 안에 사용하는 변수는 지역 변수라고도 한다.
int result = 0;
this.balance -= money;
result = money;
return result;
}
// 잔액 확인
public void showInfo() {
System.out.println("현재 계좌 잔액은 " + balance + " 입니다");
}
} // end of class
get() 메서드
- private 으로 선언된 멤버변수(필드)에 접근해서 값을 읽을 수 있는 메서드 (read-only)
- 반드시 return 키워드가 필요함, 매개변수가 없음
public 반환자료형 get메서드명 () {
return this.멤버변수;
}
set() 메서드
- private 으로 선언된 멤버변수(필드)에 접근해서 값을 수정할 수 있는 메서드
- 기본적으로 return 키워드가 필요하지 않음 (반환 자료형이 없음)
- 방어적 코드 작성에 활용할 수 있음 (메소드 종료시키는 용도)
- void로 작성, 반드시 매개변수가 들어가야 함
public void set메서드명(자료형 매개변수) {
// 방어적 코드 작성 가능
if () {
값이 잘못 되었을 때 코드;
return; // 메서드 종료
}
// 멤버 변수의 값 수정
this.멤버변수 = 매개변수;
}
💡 연습 문제
Book 클래스를 설계 해주세요
Car 클래스를 설계 해주세요
class 설계 쪽
Book
public class Book {
private String name;
private int price;
public Book(String name) {
this.name = name;
}
public String getName() {
return name;
}
public int getPrice() {
return price;
}
public void setName(String name) {
if (name == "") {
System.out.println("잘못 입력하셨습니다.");
} else {
this.name = name;
}
}
public void setPrice(int price) {
if (price == 0) {
System.out.println("잘못 입력하셨습니다.");
} else {
this.price = price;
}
}
}
Car
public class Car {
private String carName;
private int carPrice;
private int carNum;
public Car(String carName) {
this.carName = carName;
}
public String getCarName() {
return carName;
}
public int getCarPrice() {
return carPrice;
}
public int getCarNum() {
return carNum;
}
public void setCarName(String carName) {
if (carName == "") {
System.out.println("잘못 입력했습니다.");
} else {
this.carName = carName;
}
}
public void setCarPrice(int carPrice) {
if (carPrice == 0) {
System.out.println("잘못 입력했습니다.");
} else {
this.carPrice = carPrice;
}
}
public void setCarNum(int carNum) {
if (carNum == 0000) {
System.out.println("잘못 입력했습니다.");
} else {
this.carNum = carNum;
}
}
}
main 테스트 쪽
Book
public class BookMainTest {
public static void main(String[] args) {
Book book1 = new Book(null);
book1.setName("Say No");
book1.setPrice(10_000);
System.out.println("책의 이름은 : " + book1.getName() + "입니다.");
System.out.println("책의 가격은 : " + book1.getPrice() + "원 입니다.");
}
}
실행결과
책의 이름은 : Say No입니다.
책의 가격은 : 10000원 입니다.
Car
public class CarMainTest {
public static void main(String[] args) {
Car car1 = new Car(null);
car1.setCarName("제네시스 Gv80");
car1.setCarPrice(8600);
car1.setCarNum(1213);
System.out.println("구매할 차량의 이름은 : " + car1.getCarName() + " 입니다.");
System.out.println("구매할 차량의 가격은 : " + car1.getCarPrice() + "만원 입니다.");
System.out.println("구매한 차량의 번호는 : " + car1.getCarNum() + " 입니다.");
}
}