초록꼬마의 devlog
article thumbnail

2021.10.28(목)

🌿 개념

  • '여러 개의 형태를 갖는다'는 의미
  • 상속을 이용한 기술로, 부모 타입으로부터 파생된 여러 가지 타입의 자식 객체를 부모 클래스 타입 하나로 다룰 수 있는 기술
  • 상위 타입으로 하위 타입의 객체를 사용할 수 있는 기술

🌱 Binding

  • 다형성이 적용된 경우 메서드 오버라이딩이 되어 있으면, 정적으로 바인딩된 메서드 코드보다 오버라이딩된 메서드 코드를 우선적으로 수행 = 동적 바인딩

정적 바인딩 = 프로그램이 실행되기 전에 컴파일 되면서 모든 메서드는 정적 바인딩됨
동적 바인딩 = 컴파일 시 정적 바인딩된 메서드를 실행할 당시의 객체 타입을 기준으로 바인딩됨

🌱 활용

예시1) 상속 관계에 있는 하나의 부모 클래스 타입의 배열 공간에 여러 종류의 자식 클래스 객체를 저장할 수 있음
예시2) 메서드 호출 시 부모 타입의 변수 하나만 사용해 자식 타입의 객체를 받을 수 있음

 

static 관련 참고 설명
public class Desktop extends Electronic {
	
	public static final String cpu = "intel"; // CPU는 반드시 intel을 사겠다 -> 이 변수는 변화시키지 않는 상수로 쓰겠다
	// final -> static
	// final
	// final int 출근시간 = 9시; // 절대 바뀌면 안 됨; 고정
	// final int 퇴근시간; // 18시, 19시, 22시 등 여러 가지 대입 가능
	// 이런 변수는 stack 영역에 저장
	
	// 인스턴스변수 @heap 영역 -> 객체 생성 시 마다 cpu라는 메모리 영역 생김
	
	// static 영역(-> 프로그램 실행 중 언제든지 가져다 쓸 수 있음)에서 바뀌지 않는 값으로 사용하겠다
	// static final, final static -> 메모리 static 영역에 들어감; 프로그램 실행 시 할당되어 종료 시까지 쓸 수 있음; 프로그램 실행 중에는 언제든지 가져다 쓸 수 있음
	// 어차피 누구나 사용 가능하고 어차피 수정 불가능 -> public
	// 프로그램 중에 하나의 값을 사용 -> 객체마다 메모리를 할당받아 사용(x) static에 하나 만들어놓고 필요할 때마다 사용(o) -> 메모리 절약 -> 관례적으로/암묵적인 약속에 따라 final 변수에는 static 붙임
	// 환경설정 파일, 파일 경로 등 public static 씀
	
	private int ram;
	// ...	
}

 

🌿 클래스 형 변환

  • Upcasting
  • Downcasting

🌿 instanceof 연산자

  • 현재 참조형 변수가 어떤 클래스 타입의 객체 주소를 참조하고 있는지 확인할 때 사용
  • 타입이 맞으면 true vs 안 맞으면 false 반환
if (레퍼런스 instanceof 클래스 타입) {
    // true일 때 처리할 내용  
}

📗 소감

  • 상속 개념까지만 해도 직관적으로 이해가 되었는데, 다형성, 특히 up/downcasting은 처음에 이해하기 어려웠다. '부모의 것', '자식의 것'을 생각하며 무엇이 참조 가능하고 무엇이 불가능한지 익숙해져야겠다.
  • 다형성을 왜 사용하는지 조금은 알게 된 것 같고, 객체 지향 프로그래밍의 중요 특징 중 하나라고 하는데, 어떻게 유용하게 활용할 수 있을지 궁금하다!

📗 homework: 상속(Point ← Circle, Rectangle)
(실습 파일 위치: 00Exercises > 00Exercises > src > com > kh > practice > pointv2)