Chap. 8 자바 가상 머신의 클래스 로더 사용 PS Lab. 이지연.

Slides:



Advertisements
Similar presentations
Copyright © 2015 Pearson Education, Inc. 6 장 : 프로그래밍 언어.
Advertisements

멘토링 2 주차 장 프로그래밍을 위한 자바의 자료형  값이 변하지 않는 상수  메모리 기억공간인 변수.
지하철 안내 앱 소개 제작자 : 손성준 P.S 이 사진은 내용과 관계없음을 명백히 알립니다.( 솔직히 전기동차라는 공통점이 있긴 하지만 ) 그리고 본인이 촬영하였음을 알립니다.
아름다운 이들의 행복한 길음안나의 집.
Chapter 02. C언어 기반의 C++ 박 종 혁 교수 UCS Lab SeoulTech Tel:
6장 java.applet.Applet의 네트워크 메쏘드들
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
2장 닷넷 프레임워크.
우리아이의 미래를 행복하게 만듭니다.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
Programming for the java Virtual machine
제14장 원격 메소드 호출 김 기 환. 조 명 휘.
CHAP 4. 이벤트 처리.
4부 클래스 라이브러리 “4부에서는 자바 언어의 API인 클래스 라이브러리에 관해 설명합니다
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
2강. JAVA 프로그래밍이란?-II & 변수 JAVA 프로그램 환경설정과 실행 방법 변수란?
정적 메소드와 정적 변수 상수 래퍼 클래스 포매팅
Power Java 제4장 자바 프로그래밍 기초.
10장 객체-지향 프로그래밍 II ©창병모.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)
CHAP 7. 메뉴와 대화상자.
AOP 개념 및 Spring의 AOP 기능.
제 11 장 java.lang 패키지 제 12 장 문자열 제 13 장 유틸리티 제 14 장 입출력 제 15 장 네트워킹
Chap07 예외 처리 7.1 예외의 개요 7.2 예외 관련 클래스 7.3 예외 처리.
프로그램 분석의 구현.
Power Java 제7장 클래스와 객체.
DataScience Lab. 박사과정 김희찬 (월)
This, static, final 지정 예약어 자바 4대 중첩 클래스
주소록 프로그램.
CHAP 6. 이벤트 처리.
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
23강 API - II - 약방의 감초 Random 클래스 - Scanner 및 Sysout - Wrapper 클래스의 이해
DataScience Lab. 박사과정 김희찬 (월)
자바의 신 Volume 1 1부(1~3장) 자바의 신 메인 홈 : 자바의 신 페이스북: 자바의 신 문제 풀이 :
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
WAP Java Seminar
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
Chap10 다중 스레드 Section 1 : 스레드 개요 Section 2 : Thread 클래스와 스레드 생명주기
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
4장 - PHP의 표현식과 흐름 제어-.
Chap. 14 성능향상시키기 PS Lab. 이지연.
[INA470] Java Programming Youn-Hee Han
Java Chapter 4 ~ 주차.
컴퓨터공학실습(I) 3주 인공지능연구실.
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
Chap02 객체 지향 개념 2.1 객체지향(object-oriented)과 절차지향(procedural-oriented)
JA A V W. 04.
Spring DI 이해 및 활용.
7강. 객체지향 프로그램의 본질 메소드 프로그래밍의 한계 객체의 개념 및 클래스의 이해
제 4 장 클래스 작성 Lab 4- 2.
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
자바 5.0 프로그래밍.
C# 10장. 참조형.
6장 클래스(상속).
2015년 2학년 1반.
6월 1주 주간메뉴표 NEW 엄마손 조식 쉐프 삼촌 중식 참새 방앗간 석식 ◎원산지 안내 : 쌀(국내산)
제 14 장 응용 계층과 클라이언트-서버 모델 클라이언트-서버 모델 14.2 동시성 14.3 프로세스 14.4 요약.
Java 5장. 객체지향 개념 public class SumTest {
캡슐화 (Encapsulation) 두원공과대학 소프트웨어개발과 이 원 주.
11장 다형성과 추상 클래스, 인터페이스 Section 1 객체의 형 변환 Section 2 연산자 Section 3 다형성
DataScience Lab. 박사과정 김희찬 (화)
C# 09장. 클래스와 객체.
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 02. C언어 기반의 C++ 2.
자바 가상 머신 프로그래밍 Chapter 3. 메소드 작성하기 Pslab 오민경.
Chapter8 : 인터페이스와 패키지 8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용
Presentation transcript:

Chap. 8 자바 가상 머신의 클래스 로더 사용 PS Lab. 이지연

목차 클래스의 로딩과 링킹 클래스 로더를 사용하지 않는 클래스 로딩 직접 만드는 클래스 로더 Class객체의 활용 리플렉션(Reflection)

클래스의 로딩 첫번째 단계 : 로딩 두번째 단계 : 링킹 클래스의 이름과 클래스 계층도 상에서의 클래스의 위치 및 그 클래스의 필드와 메소드의 종류에 대해 알게 됨 두번째 단계 : 링킹 클래스가 기본적인 형태를 제대로 갖추고 있는지 가상 머신의 제약조건을 거스르지 않음을 보장하도록 검증하는 단계 정적으로 초기화를 수행하는 <clinit>호출

로딩 모든 클래스 로더는 클래스 java.lang.ClassLoader의 서브 클래스 loadClass라고 부르는 메소드에 의해 로드 시작 Class loadClass(String name, boolean resolve); defineClass메소드 : 가상 머신에게 name에 해당하는 특정한 바이트 집합이 찾고자 하는 클래스라는 것을 알려주는 작업 수행

로딩(계속) 인터페이스는 링킹단계에서 검사 수퍼클래스를 로드하는 과정에서 클래스 로더가 찾을 수는 없지만 시스템자체에서 지원하는 클래스 class CoolWidget extends java.awt.Panel “java.awt.Panel”을 인자로 전달하여 findSystemClass호출

링킹 클래스가 몇 가지 요건을 충족시키는지 확인하기 위해 검증한 후 초기화 ClassLoader 내의 resolveClass메소드에 의해 수행 loadClass가 클래스를 리졸브(resolve)하도록 요청 받은 경우에,(resolve인자의 값이 true인 경우) loadClass의 마지막 부분에서 호출

링킹(계속) 검증(6장) 초기화 클래스의 <clinit>메소드를 호출 인터페이스에 의해 요구되는 메소드들은 모두 구현되어야 한다. 명령어들은 상수 풀의 참조자를 정확하게 사용해야 한다. 메소드에 의해 스택의 오버플로가 발생하면 안 된다. 메소드는 int를 reference로 사용하지 말아야 한다. 초기화 모든 정적필드를 위한 기억장소 할당 디폴트값 할당(숫자의 경우 0, reference의 경우 null) 클래스의 <clinit>메소드를 호출 필드 초기화 표현식과 메소드의 이름 없이 static으로 표시된 코드 처리

클래스 로더를 사용하지 않는 클래스 로딩 시스템 클래스 : 클래스 로더 없이 로드되는 클래스 CLASSPATH환경 변수를 사용하는 방법 ClassLoader클래스와 무관하게 클래스를 로드시키는 내부적 방법 name.class파일을 CLASSPATH내의 각 디렉토리에서 찾음 배열클래스는 클래스 로더를 사용하지 않고 로드된다.

직접 만드는 클래스 로더 ClassLoader의 서브클래스를 만들고 loadClass를 구현함으로써 새로운 클래스 로더를 만들 수 있다. 자바 1.0 플랫폼에서 클래스 로더를 작성하는 템플릿 : P.240, 241참고

클래스의 캐싱 defineClass가 호출되면 defineClass는 클래스의 이름을 반환된 Class 객체로 매핑 Class findLoadedeClass(String name); defineClass가 호출되면 defineClass는 클래스의 이름을 반환된 Class 객체로 매핑 이 후에 findLoadedClass는 어떤 클래스 로더에 의해서 로드되었느냐에 관계없이 동일한 이름에 대해 같은 Class객체 반환

예제 웹 브라우저의 자바 애플릿을 로드하기 위한 클래스 로더 : P. 243 참고 동적 컴파일과 함께 사용되는 ByteArrayClassLoader : P.244 참고

Class객체의 활용 newInstance : 새로운 인스턴스를 생성하여 디폴트 생성자를 호출시키고 인스턴스를 Object로서 반환 P. 245 예제 Object o=programOneClass.newInstance();

리플렉션 자바1.1 리플렉션 API : 클래스가 가지고 있는 메소드를 호출하거나 필드의 값을 읽고 쓸 수 있다. 필드나 메소드를 표현하기 위한 새로운 클래스들 필요 java.lang.reflect패키지 : 필드는 Field의 인스턴스, 메소드는 Method의 인스턴스로 표현 Field x=programOneClass.getField(“X”); Field y=programOneClass.getField(“Y”); x.setInt(o,90); y.setInt(o,20);

리플렉션(계속) 인자를 취하는 생성자를 호출하는 것 허용 Progam1 클래스에 Program1(int x, int y)생성자를 추가시켰다면 Class[] arg_types={Integer.TYPE, Integer.TYPE}; Constructor programOneConstructor= programOneClass.getConstructor(arg_type); Object[] arguments={new Integer(1000), new Integer(12)}; Object newProg1=programOneConstructor.newInstance(arguments);