05. 메서드 재정의와 가상 메서드 원리
이론 정리
메서드의 호출 과정은?
- 메서드 이름은 주소값이다.
- 메서드의 이름 자체가 주소이다.
- 프로그램 작동시 메모리 공간 : 메서드영역(코드영역 :스테텍:상수영역)에 메서드 명으로 탑제
- 메서드 명 중복(오버 로딩)상황 에서는 메서드명 뒤로 더미 데이터를 붙여 개별화
- 프로그램 작동후 메서드 호출시 코드영역에서 메서드 명으로 검색. 호출
- 메서드 의 지역변수들은 스택 메모리에 탑제
- 다른 인스턴스라도 같은 객체 기반의 메서드는 같은 코드영역의 주소에서 호출
- 인스턴스 생성시 변수들은 힙 메모리에 따로 생성
- 메서드는 작동시 한번만 메모리에 탑제(로드)
- 인스턴스 별로 메서드가 따로 생성되지 않는다.
test
package method;
public class test {
int num;
void aaa() {
System.out.println("aaa() 호출");
}
public static void main(String[] args) {
test a1 = new test();
a1.aaa();
test a2 = new test();
a2.aaa();
}
}
test코드 살펴보기
메모리영역에서 생기는 일
- 힙(유동 메모리) : a1의 int num와 a2의 int num이 탑제 된다.
- 스택 메모리(main함수의 지역변수) : a1, a2, args 탑제.
- 메서드영역(상수,static,코드영역) : aaa() 메서드 탑제.
- 메모리영역에서 발생되는 사건의 순서
- 스택 메모리에 main함수의 지역변수 공간에 변수들이 탑제.
- a1, a2, args
- 힙 메모리에 a1 , a2의 실제 인스턴스와, 멤버변수 a1의 num a2의 num이 탑제된다.
- 메서드 영역에 aaa()영역이 생성 된다.
- aaa() 메서드 내부의 변수들이 스택 메모리 영역에 탑제 된다.
- 스택 메모리에 main함수의 지역변수 공간에 변수들이 탑제.
- //두가지 인스턴스에서도 aaa() 메소드는 단일한 메소드가 호출 된다.
가상 메서드의 원리
- C나 C++에서는 virtual fucntion(가상함수) 이라고 부른다.
- 가상 메서드란 메서드의 이름 자체가 메모리의 코드 영역에서 주소값이 되는것이 아니라 JVM에서 관리되는 어드레스 테이블(VMT : virtual method table)에서 메서드에 매치(바인딩 : 맵핑 )되는 메모리 주소값을 기반으로 작동 되는것이다.
- 각 클레스마다 가상 메서드 테이블을 갖고 있다.
- 클레스의 상속 관계에서 오버 라이드 된 메서드는 별개의 메서드로 동작한다. (개층별 클레스마다 가상 메서드 테이블이 따로 존제하는데 제정의되지 않은 메소드는 주소값을 공유한다)
- 자바는 모든 메서드가 가상 메서드 이다. 다른 언어에서는 함수의 이름 자체가 주소 이다.
복습 & 실무적인 사용방법
06. 다형성과 다형성을 사용하는 이유
이론 정리
다형성(polymorphism : 폴리모리시즘) 이란?
- 하나의 코드가 다양한 데이터형(자료형)으로 구현되어 실행되는것.
- 하나의 코드에서 다른 결과가 나오는것
- 정보은닉. 상속과 더불어 객체 지향 의 가장 큰 특징이다.
- 잘 활용하면 유연하고 . 확장성이 있고. 유지보수가 편리하게 개발할수 있다.
- 이해하기 쉽지 않다.?!
- 이해하면 넘모 좋은 기능이라고 하니 강의를 반복 시청하면서. 다른 정리된 블로그들도 참고해 보겠습니다.
TEST CODE
package polymorphism;
class Animal{
public void move() {
System.out.println("동물이 움직입니다.");
}
}
class Humam extends Animal{
@Override
public void move() {
System.out.println("사람이 움직입니다.");
}
public void readBook() {
System.out.println("사람이 책을 읽습니다.");
}
}
class tiger extends Animal{
@Override
public void move() {
System.out.println("사자가 움직입니다.");
}
public void hunting() {
System.out.println("사자가 사냥을 합니다.");
}
}
class Eagle extends Animal{
public void move() {
System.out.println("독수리가 하늘을 날아 다닙니다.");
}
public void flying() {
System.out.println("독수리가 양날개를 쭉 펴고 날아 다닙니다.");
}
}
public class AnimalTest {
public static void main(String[] args) {
Animal hAnimal = new Humam();
Animal tAnimal = new tiger();
Animal eAnimal = new Eagle();
AnimalTest test = new AnimalTest();
test.moveAnimal(hAnimal);
test.moveAnimal(tAnimal);
test.moveAnimal(eAnimal);
}
public void moveAnimal(Animal animal) {
animal.move();
}
}
<스스로 과제> : 다형성 (polymorphism) 과제 시나리오 작성
순서 :
- 많은 객체에 상속 할수 있는 슈퍼(super) : 부모 객체를 만든다.!
- 자식 객체(child)들과 자식들이 하는 것을 만든다.
- 부모 객체로 인스턴스들을 만드는데 생성자가 자식 들이다. !
- 부모 타입을 매개변수로 받아서 행동하게 만드는 메소드를 만든다.
- 부모 객체 이지만 . 자식의 행동을 할수 있다는것이 증명 된다.
Human : 부모 객체
package polymorphism_2;
public class Human {
public void talk() {
System.out.println("탄수화물을 단식하자");
}
}
child
package polymorphism_2;
public class child extends Human{
public void talk() {
System.out.println("이몸도 요즘 어린이들의 비만이 문제라는데 다이어트 할래");
}
}
doctor
package polymorphism_2;
public class doctor extends Human {
public void talk() {
System.out.println("당신에게는 다이어트가 필요합니다");
}
}
Programmer
package polymorphism_2;
public class Programmer extends Human {
public void talk() {
System.out.println("사장님 저 집에 언제 가요? ");
}
}
TEST_1
package polymorphism_2;
public class TEST_1 {
public static void main(String[] args) {
Human cHuman = new child();
Human dHuman = new doctor();
Human pHuman = new Programmer();
TEST_1 T = new TEST_1();
T.mainTalk(cHuman);
T.mainTalk(dHuman);
T.mainTalk(pHuman);
}
public void mainTalk(Human human) {
human.talk();
}
}
복습 & 실무적인 사용방법
전문 용어
에러 메세지
학습 시간
캠 스터디
공부 모임
1) 카카오톡 오픈 채팅방
- 모르는것 질문하기
- 이해가 가지 않는 부분을 다른 분들이 블로그에서 정리한 글을 살펴보고 참고 하기
2) 구루미 온라인 독서실
- 학습 시간 관리하기
- 남들과 경쟁하기
온라인 강의 주소
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다
'학습방법 > 데일리 미션' 카테고리의 다른 글
[ 패스트캠퍼스 챌린지 03일차 ] 3:1:09 ~ 3:1:10 (0) | 2022.01.26 |
---|---|
[ 패스트캠퍼스 챌린지 02일차 ] 3:1:07 ~ 3:1:08 (0) | 2022.01.25 |
[ 패스트캠퍼스 챌린지 - 00일차 ] 3:1:03 ~ 3:1:04 (0) | 2022.01.23 |
[ 패스트캠퍼스 챌린지 - 01일차 ] 3:1:01 ~ 3:1:02 (0) | 2022.01.22 |
[ 패스트캠퍼스 챌린지 - 02일차 ] 2:2:21 ~ 2:2:24 (0) | 2022.01.21 |