본문 바로가기

Programming language/Java

Java - 10 [protected 접근제어자, Object 클래스]

protected 키워드

- private로 정의된 변수들은 해당클래스 내에서만 부를수 있다.

- 즉, 상속된 자식클래스들도 접근을 못한다는 소리다.

하지만 protected키워드는 이러한 접근을 가능하게 한다.

 

오직 자신과 자식키워드에게만 허용된 변수를 설정할 수있다.

public class BankAccount {
    private int balance;
    ...
}
public class MinimumBalanceAccount extends BankAccount {
    ...
    @Override
    public boolean withdraw(int amount) {
        if (getBalance() - amount < minimum) {
            System.out.println("적어도 " + minimum + "원은 남겨야 합니다.");
            return false;
        }
    
        setBalance(getBalance() - amount);
        return true;
    }
}

- 위와 같이 자식클래스가 부모클래스의 변수인 balance를 접근할 때 getter 메소드를 써야한다.

하지만 protected 키워드를 사용한다면

public class BankAccount {
    protected int balance;
    ...
}
public class MinimumBalanceAccount extends BankAccount {
    ...
    @Override
    public boolean withdraw(int amount) {
        // if (getBalance() - amount < minimum) {
        if (balance - amount < minimum) {
            System.out.println("적어도 " + minimum + "원은 남겨야 합니다.");
            return false;
        }
    
        // setBalance(getBalance() - amount);
        balance -= amount;
        return true;
    }
}

이렇게 바로 변수 balance에 접근이 가능하다.

하지만 다른 상속받지 않은 부모관계에 있지 않은 클래스에서 호출할수는 없다.

 

Object 클래스

- object 클래스는 모든 클래스 들의 부모이다. 맨처음시작된 루트 클래스라고 할수있다.

즉, 모든 클래스는 object 클래스를 부모로둔 자식클래스이며 확장된 클래스이다.

 

아래 코드를 살펴보자

 

public class Song extends Object{
    private String songName;
    private Artist artist;
    private Album album;

    // 생성자 인수 : songName, artist, album
    public Song (String songName, Artist artist, Album album){
        this.songName = songName;
        this.artist = artist;
        this.album = album;
    }

    // String toString 오버라이드
    @Override
    public String toString(){
        String answer = this.songName + " - " +this.artist.getArtistName() +"\n"+this.album.getAlbumName()+"("+this.album.getMadeyear()+")";
        return answer;
    }
}

 

 

 

위코드에서 Song이라는 클래스는 Object클래스를 확장한 것이다.

- 물론 생략해도 된다.

 

오버라이드한 메소드들 중 println 이라는 함수는 다양한 인수로 오버라이드되어 구성되게 되는데 이중

Object 클래스를 인수로 넘겨줄수 있다. 이때 System.out.println(인스턴스); 라는 코드는

인스턴스.toString(); 이라는 코드를 넘겨준다.

 

toString이라는 코드는 오버라이드 하지않으면 객체의 인스턴스 주소를 넘겨주지만

오버라이드 하면 해당 오버라이드한 코드를 넘겨주게된다.

public class Main {

    public static void main(String[] args) {
        Person person = new Person("신의", 17);
        System.out.println(person);
    }
}
toString 오버라이드 성공
public class Person{
    @Override
    public String toString(){
        return "toString 오버라이드 성공";
    }
}

 

'Programming language > Java' 카테고리의 다른 글

Java - 실무6 [블랙잭]  (0) 2020.10.19
Java - 11 [Random , Collections]  (0) 2020.10.19
Java - 9 [상속, super]  (1) 2020.10.18
Java - 실무5 [MP3플레이어]  (1) 2020.10.18
Java - 실무4 [학점계산기]  (2) 2020.10.18