alsgur6180.log
로그인
alsgur6180.log
로그인
다형성
김민혁
·
2022년 1월 20일
팔로우
0
OOP
자바
0
다형성(Polymorphism)
하나의 객체가 많은 형(타입)을 가질 수 있는 성질
상속 관계
에 있을 때
조상 클래스의 타입으로 자식 클래스 객체를 레퍼런스
할 수 있다.
다형성으로 다른 타입의 데이터를 하나의 배열로 관리할 수 있다.
Object는 모든 클래스의 조상이므로 Object의 배열은 어떤 타입의 객체라도 저장할 수있다.
기본형도 Wrapper 클래스에 의해 오토박싱되어 담을 수 있다.
매개변수에도 다형성이 많이 사용된다. ex: println(Object obj)
API에서 파라미터로 Object를 받는다는 것은 모든 객체를 처리한다는 말이다.
다형성과 참조형 객체의 형 변환
메모리에 있는 것과 사용할 수 있는 것의 차이
메모리에 있더라도 참조하는 변수의 타입에 따라 접근할 수 있는 내용이 제한됨
참조형 객체의 형 변환
작은 집(child)에서 큰 집(super)으로 -> 묵시적 캐스팅
자손 타입의 객체를 조상 타입으로 참조: 형변환 생략 가능
조상의 모든 내용이 자식에 있기 때문에 가능하다.
큰집(super)에서 작은 집(child)으로 -> 명시적 캐스팅
조상 타입을 자손 타입으로 참조: 형변환 생략 불가
명시적 캐스팅은 개발자를 믿고 프로그램이 바꿔주는것이기 때문에 실제 메모리의 객체를 확인하고 캐스팅해줘야 한다.
instanceof 연산자를 통해 확인할 수 있다.
if(person instanceof SpiderMan){ SpiderMan sman = (SpiderMan)person; }
참조 변수의 레벨에 따른 객체의 멤버 연결
상속 관계에서 객체의 멤버 변수가 중복될 때
참조 변수의 타입에 따라 연결이 달라짐
상속 관계에서 객체의 메서드가 중복될 때(메서드가 override 되었을 때)
무조건 자식 클래스의 메서드가 호출됨 -> viertual method invocation
최대한 메모리에 생성된 실제 객체에 최적화 된 메서드가 동작한다.(멤버 은폐가 됨)
김민혁
학생
팔로우
이전 포스트
데이터 은닉과 보호
다음 포스트
명시적 선언 & 묵시적 선언
0개의 댓글
댓글 작성