접근 제어 지시자 (accesss modifier)
▶ 클래스 외부에서 클래스의 멤버 변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드
● private : 같은 클래스 내부에서만 접근 가능 ( 외부 클래스, 상속 관계의 클래스에서도 접근 불가)
● 아무것도 없음 (default) : 같은 패키지 내부에서만 접근 가능 ( 상속 관계라도 패키지가 다르면 접근 불가)
● protected : 같은 패키지나 상속관계의 클래스에서 접근 가능하고 그 외 외부에서는 접근 할 수 없음
● public : 클래스의 외부 어디서나 접근 할 수 있음
학생,버스,지하철 객체 상호작용
학생
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | package ch05; public class Student { String name; int money; int time; int choose; public Student(String name,int money) { this.name = name; this.money = money; } //학생이 버스를 탄다 public void takeBus(Bus targetBus) { //지역 선언 System.out.println("targetBus 메서드 실행됨"); //targetBus.showInfo(); //요금을 넣어야한다 targetBus.take(1_200); this.money -= 1_200; } //학생이 지하철을 탄다 public void takeSubway(Subway targetSubway) { System.out.println("targetSubway 메서드 실행됨"); targetSubway.take(1_250); this.money -= 1_250; } //상태창 보기 public void showInfo() { System.out.println("학생의 이름은 :"+this.name); System.out.println("학생의 소지금 :"+this.money); System.out.println("---------------------"); } } | cs |
버스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | package ch05; public class Bus { int busNumber; int passengerCount; int money; public Bus(int busNumber) { this.busNumber = busNumber; } //기능 public void take(int money) { this.money += money; this.passengerCount++; } public void showInfo() { System.out.println(this.busNumber + ": 번의 버스를 선택하셨습니다 다음버스는 3분 뒤입니다"); } public void showInfo1() { System.out.println(this.busNumber + ": 번의 버스를 선택하셨습니다 다음버스는 5분 뒤입니다"); } public void showInfo2() { System.out.println("버스번호 :"+this.busNumber); } } | cs |
지하철
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | package ch05; public class Subway { int lineNumber; int passengerCount; int money; //생성자 - 리턴 타입없고 , 클래스 이름과 같다 public Subway(int lineNumber) { this.lineNumber = lineNumber; } public void take(int money) { this.money +=money; this.passengerCount++; } public void showInfo() { System.out.println(this.lineNumber + "호선의 다음 열차는 6분뒤 입니다"); } public void showInfo1() { System.out.println(this.lineNumber + "호선의 다음 열차는 4분뒤입니다"); } public void showInfo2() { System.out.println("지하철 호선 :"+this.lineNumber); } } | cs |
메인 클래스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | package ch05; import java.util.Scanner; public class MainTast2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 객체 생성 Student studentMin = new Student("김민우",47000); Bus bus1 = new Bus(169); Bus bus2 = new Bus(133); Subway subway1 = new Subway(1); Subway subway2 = new Subway(2); //1단계 = 사용해보기 // bus1.showInfo(); // bus2.showInfo(); // subway.showInfo(); studentMin.showInfo(); //2단계 = 실행의 흐름 만들어보기 System.out.println("몇분에 집에서 나오셨습니까"); studentMin.time = sc.nextInt(); if(studentMin.time <= 10) { System.out.println("버스를 타고 가시는게 가장빠르십니다"); System.out.println("두 버스중 어느버스를 이용하시겠습니까"); bus1.showInfo2(); bus2.showInfo2(); studentMin.choose = sc.nextInt(); if(studentMin.choose == 169) { bus1.showInfo(); }else { bus2.showInfo1(); } studentMin.takeBus(bus1); }//end if if(studentMin.time > 10) { System.out.println("지하철를 타고 가시는게 가장빠르십니다"); System.out.println("어느 호선의 지하철을 이용하시겠습니까"); subway1.showInfo2(); subway2.showInfo2(); studentMin.choose = sc.nextInt(); if(studentMin.choose == 1) { subway1.showInfo(); }else { subway2.showInfo1(); } studentMin.takeSubway(subway1); }//end if studentMin.showInfo(); } } | cs |
접근 제어 지시자
public —> 어디에서든 접근 가능 함.
default —> 같은 패키지 내에서 접근 가능
protected ← 상속 배운 이후
private —> 해당 .java 안에서만 접근이 가능하다.
!! 포인트
객체에 상태 값은 행위를 통해서 변경 시키는 것이 객체 지향 코드 방법이다.
get : read-only 성질을 가진다 .
set : 개발자 선택에 의해서 만들 수 있고, 방어적 코드를 작성할 수 있다.