자바

객체와 객체간의 상호작용 접근 제어 지시자(access modifier)

섹시꽃남민우 2023. 2. 14. 17:01

접근 제어 지시자 (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 : 개발자 선택에 의해서 만들 수 있고, 방어적 코드를 작성할 수 있다.