다형성의 활용 - (1) 이형집합 배열
Employee[ ] list ← Engineer , Manager
Object[ ] list ← Engineer, Manager, Employee
- 위와 같이 다형성을 활용하여 하위 클래스들의 집합을 하나의 배열로 관리할 수 있다!
- 목적에 따라 담아만 놓을 것인지(Object), 자원으로 사용할 것인지(비즈니스 로직 최상위)에 따라 맞는 Data Type을 사용할 수 있다.
다형성의 활용 - (2) 매개변수의 다형성
XXX ( Employee e ){ }; ← Engineer, Manager
- 위와 같이 다형성을 사용하여 모든 Case에 따라 오버로딩 할 필요 없이 하나의 함수로
메서드를 선언 가능!
- 상위 Class에 담았기 때문에 하위 클래스의 고유 속성은 사용할 수 없다.
- 하지만 상위 Class에 담았다 하더라도 자식에서 Override된 메서드의 경우 자식의
Method 가 호출된다!!!!
다형성의 활용 - (3) 리턴타입의 다형성
Employee XXX ( ) {
return new Engineer();
return new Manager();
}
- 매개변수 다형성과 같이 용도에 따라 활용 가능하다.
동적 바인딩
동적 바인딩 (Dynamic Binding)
- 런타임시에 실제 객체 확인 후 객체에 바인딩
- Java의 다형성이 가능하도록 해주는 밑바탕이다
정적 바인딩 (Static Binding)
- 컴파일 타임에 바인딩됨
ex)
Employee e = new Engineer();
e.getInformation()
Compile time : Employee의 getInfo로 간주
Runtime : Engineer의 getInfo로 간주 (생성한 주체가 Engineer니까 Engineer꺼로!!)
** 원래는 상위 타입으로 하위 타입 객체를 참조할 때 상위 타입의 기능밖에 사용 불가
(컴파일러가 허용을 안해서)
⇒ 동적 바인딩을 통해 하위 클래스에서 재정의된 메서드 사용 가능!!
⇒ 오버라이딩의 중요성 ( 부모 클래스에서 껍데기라도 만드는 이유)
UML (Unified Model Language)
UML
- 다른 사람들과의 의사소통을 목적으로 함
- 전체 시스템의 구조 및 클래스의 의존성 파악
연관관계
ㄴ 연관은 있다.
ㄴ 전체의 일부, 부분집합 (전체와 연관이 명확한 경우)
ㄴ 단순집합 연관 (Aggregation) : ex) 컴퓨터와 GPU
ㄴ 강한집합 연관 (Composition) : 부분이 전체 없이는 존재 못하는 관계
ex) 나무와 줄기, 나무와 나뭇잎
this
this
- non-static 영역(instance 메서드, 생성자, instace initializer)에서만 사용할 수 있는 내장변수
- 현재 생성중인, 실행중인 그 객체 자기 자신을 일컬음
this의 사용
(1) 지역변수와 인스턴스 변수의 구분
(2) 생성자가 오버로딩된 경우, 자신의 또 다른 생성자 호출
(3) 자기자신의 객체를 메서드의 매개변수로 전달하거나 리턴
this의 메모리 구조
this는 Runtime 시점에 결정되고, Stack에 내장변수로서 존재한다.
super
- non-static 영역에서 사용되는 내장변수
- 현재 생성중인, 실행중인 객체의 부모를 의미하도록 사용하는 논리적인 개념
super의 사용법
(1) - 자신의 메소드와 부모의 메서드를 구분하기 위해 (메서드 재정의 상황에서)
(2) - 자식의 생성자에서 부모의 생성자를 명시적으로 호출하기 위해