3:1:01 ~ 3:1:13


이론 정리

함수 호출

class TEST{
int A ;
	void print(){
		int intPrint;
	}
}

메서드 호출 순서를 정리하자면

  1. 프로그램이 작동된다.
  2. 우선 모든 메서드의 이름이 주소로 변환한다.
  3. 코드 영역에 메서드 내부의 지역 변수와 인스턴스과는 별개로 우선 인스트럭션 셋(기능)이 탑제 된다 .
  4. 메서드 가 호출되면. 각각다른 인스턴스를 구분해서 메서드 내부의
    1. 지역변수 : stack, 인스턴스 : heap 영역에 탑제
      1. 인스턴스가 생성(new)되면 모든 인스턴스의 정보와 인스턴스의 변수(맴버변수)는 heap 영역에 탑제 된다. 힙영역은 메모리의 낮은주소 - > 높은 주소의 방향으로 할당된다.
        1. static이 붙은 변수는 인스턴스 생성과 별개로 프로그램 동작부터 메소드 영역에 탑제 되는 클레스 변수(클레스 고유의 변수 : static variable)가 된다.
      2. 메서드의 지역변수와 매개변수는 스택 영역에 탑되된다. 메소드 동작 끝 과 함께 소멸, LIFO. 스텍 영역은 높은 주소 - > 낮은주소 방향으로 할당된다.
  5. 코드영역에서 인스트럭션 셋을 찾아서 작동 된다.
  • 위 과정에서 인스턴스 각각이 공유하는 메서드는 한번만 코드영역에 탑제 되고. 한번 탑제된 메서드의 기능이 공용으로 사용된다.
  • 메서드 오버로딩은 메서드 이름을 주소로 변환 할때. 뒤에 더미 파라미너가 붙어서 탑제 된다.

예를 들어서 print 메소드를 주체로 설명했을때. print메소드에 해당하는 코드영역(메서드 영역)의 인스트럭션 셋는 heap영역의 인스턴스의 변수에 해당하는 메모리 주소를 찍어 준다고 할수 있다.

가상 함수 (함수가 만들어지는 과정 +a)

왜 가상의 함수 라고 불리우는가 ? 무엇을 가상의 함수라고 부르는 걸까?

가상 함수라는 것은 앞으로 새롭게 등장한 기능이나 새로운 대상이 아니다.

지금까지 사용하고 있었던 자바의 모든 메소드는 가상함수 였던 것이다. (에>_<? ) 반전!.

외 가상의 함수라 부르는가.?

모든 메소드가 작동 될때까지 . 정확하게 코드영역(메서드 영역)의 인스트럭션 셋을 가르키는 주소가 확정 되어 있지 않은 상태이다. 작동 될때 비로소 호출된 메소드와 매치 되는 메모리의 인스트럭션 셋 주소값이 클레스간의 상호작용 연산이 끝난후 확정(바인딩)되어 메소드가 가르키는 주소 값이 가상 메서드 테이블에 정리 되게 된다.

클래스 마다 가상 메소드 테이블 영역이 있으며 메서드 영역의 인스트럭션 셋의 주소가 작동 되었을때 비로소 확정(입력 : 바인딩) 되게 된다.

예를 들어서 하위 클레스의 메소드는 상위 클레스의 메소드와 같은 메모리영억의 주소값을 가지고 있으며. 오버라이딩된 되거나 하위 클레스에서 새롭게 만들어진 메소드에는 새로운 주소가 부여된다.

TEST 코드를 짜다가 고민해야 하는것을 발견했습니다. 아래 코드의 출격값이 이해가 부족하기 때문에 여러 커뮤니티에서 질문을 드리고 답변을 기다리고 있습니다.

Do

package TEST_A;

public class Do {
	public static void main(String[] args) {
		SuperClass_A reperanceValue = new SubClass_A(); 
		reperanceValue.showClassInfo();// 인스턴스(SubClass_A) 의 변수가 참조 되었습니다.
		System.out.println(reperanceValue.name);// 참조변수(SuperClass_A ) 타입의 변수가 참조 되었습니다.
	}
}

SubClass_A

package TEST_A;

public class SubClass_A extends SuperClass_A {
	String name = "SubClass_A" ;
	
	public void showClassInfo() {
		System.out.println(this.name);
	}
	public void method_SubClass_A() {
		System.out.println("method_SubClass_A");
	}
}

SuperClass_A

package TEST_A;

public class SuperClass_A {
String name = "SuperClass_A" ;
	public void showClassInfo() {
		System.out.println(this.name);
	}
	public void method_SuperClass_A() {
		System.out.println("method_SuperClass_A");
	}
}

전문 용어


 

에러 메세지


학습 시간


 

캠 스터디


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

  - 이해가 가지 않는 부분을 다른 분들의 블로그에서 참고하기 용도

2) 구루미 온라인 독서실

  - 학습 시간을 관리 하거나 경쟁 하는 용도 

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 

+ Recent posts