[3단원]상속과 T 메모리

public class Penguin extends Animal{
    public String habitat;
    
    public void showHabitat() {
        System.out.printf("%s는 %s에 살아\n", name, habitat);
    }
}
public class Animal {
    public String name;
    
    public void showName() {
        System.out.println("안녕 나는 " + name + "야. 반가워.");
    }
    
}
  • 실행 코드
public class Driver {
    public static void main(String[] args) {
        Penguin pororo = new Penguin();
        
        pororo.name = "뽀로로";
        pororo.habitat = "남극";
        
        pororo.showName();
        pororo.showHabitat();
        
        Animal pingu = new Penguin();
        
        pingu.name = "핑구";
        // pingu.habitat = "EBS";
        
        pingu.showName();
        // pingu.showHabitat();
        
        // Penguin happyfeet = new Animal();
    }
}
  1. Penguin pororo = new Penguin();
    • Penguin 클래스의 인스터스만 힙 영역에 생긴 것이 아니라
    • Aniaml 클래스의 인스턴스로 함께 힙 영역에 생긴다.
    • 사실 Animal 인스턴스 외에도 모든 클래스의 최상위 클래스인 Object 클래스의 인스턴스도 함께 생성된다.
  1. Animal pingu = new Penguin();
    • pingu 객체 참조 변수는 Penguin 인스턴스가 아니라 Animal 인스턴스를 가리킵니다.
    • 해당 참조변수는 Animal 타입으로서, pinguPenguin 의 특성 메서드나 속성에 접근할 수 없습니다.

    형변환

    • pingu 객체 참조 변수는 Penguin 의 특정 메서드나 속성에 접근하려면 형변환이 필요합니다.
    • 종류
      • 명시적 형변환
        • 큰 범주의 데이터타입에서 작은 범주의 데이터타입으로 변환하는 경우 개발자가 직접 명시해줘야합니다
        • Penguin happyfeet = (Penguin) new Animal();
        • 일단 서브 클래스의 데이터가 추가된 경우에 슈퍼 클래스를 인스턴스가 해당 데이터를 사용하는 경우 에러가 발생합니다.
          • 왜냐하면 슈퍼 클래스에서는 해당 데이터를 가지고 있지 않기 때문입니다.
      • 암묵적 형변환
        • 프로그래밍 언어가 자동으로 수행하는 데이터 타입 변환
        • 작은 범주의 데이터 타입에서 큰 범주의 데이터타입으로 변환할 때 동작합니다
          • 이는 데이터의 손실의 위험이 없기 때문에 가능한 행위입니다.

뜬금없는 코드의 가독성 설명

  • 코드의 가독성
    • 코드가 객체지향적으로 설계되어있다면, 인간의 언어로 쉽게 번역될 수 있어야 합니다.
    • 이렇게 작성된 코드는 다른 개발자들이 읽기쉽고, 유지 보수성도 높아집니다

Uploaded by N2T