Chap.10 자바 컴파일링의 안쪽 PS Lab. 이지연.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
최윤정 Java 프로그래밍 클래스 상속 최윤정
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
4장 자바 기본 구조 4.1 자바 응용 프로그램 분석 4.2 자바 애플릿 프로그램 분석
4부 클래스 라이브러리 “4부에서는 자바 언어의 API인 클래스 라이브러리에 관해 설명합니다
제 9 장 구조체와 공용체.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Chapter 4. 클래스와 객체 PS Lab. 이지연.
Lesson 5. 레퍼런스 데이터형.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
4.1 자바 응용 프로그램 분석 4.2 식별자(identifier)와 예약어 4.3 변수와 자료형
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Lesson 9. 예외처리.
Lesson 6. 형변환.
5장. 참조 타입.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
6장. 클래스.
레퍼런스 타입에 대하여 열거 타입의 선언과 이용
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
3장 자바의 기본문법(2).
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
14장. 포인터와 함수에 대한 이해.
10장. 예외처리.
자바 5.0 프로그래밍.
C#.
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
JA A V W. 03.
Lesson 4. 수식과 연산자.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Effective Java [Issue 1 and 2]
2장. 변수와 타입.
Chap. 14 성능향상시키기 PS Lab. 이지연.
자바 5.0 프로그래밍.
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Power Java 제11장 상속.
Chapter 02. 자바 기본 문법.
JA A V W. 06.
9장 부프로그램 (3) 순천향대학교 컴퓨터공학부 하 상 호.
CHAP 21. 전화, SMS, 주소록.
[ 단원 04 ] 반복과 배열.
제5장 변수, 연산자, 수식.
9장 부프로그램 (3) 순천향대학교 컴퓨터공학부 하 상 호.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
Lecture 02 프로그램 구조 및 문법 Kwang-Man Ko
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Lecture 04 객체지향 페러다임 Kwang-Man Ko
발표자 : 이지연 Programming Systems Lab.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
제 4 장 Record.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
제 3장 연 산 자 연 산 자 의 종 류 연 산 자 우 선 순 위 형 변 환.
자바 가상 머신 프로그래밍 Chapter 3. 메소드 작성하기 Pslab 오민경.
Pointers summary.
7 생성자 함수.
6 객체.
3장 자바의 기본문법(2).
Presentation transcript:

Chap.10 자바 컴파일링의 안쪽 PS Lab. 이지연

표현식과 문장 표현식(expression) : 값을 산출해 내는 자바 코드 조각 문장(statement) : 값을 산출해 내지 않지만 실행되면서 생겨난 결과가 프로그램 상태에 영향을 주는 코드 단위 세미콜론(;)으로 끝남 블록(block) : 여러 개의 문장을 중괄호로 묶음

표현식의 여러 형태들 숫자 타입 : int, double, long, float, byte, boolean, short, char 강제변환 : 예) int집합에 속해 있는 원소를 short집합에 있는 원소로 매핑하는 일 객체타입 : 클래스는 객체를 만들 수 있는 타입이고 객체는 클래스의 인스턴스이다. 서브타입 : 그 타입과 함께 그 타입이 포함하고 있는 모든 타입 서브클래스는 수퍼클래스의 서브타입이다.

표현식 결과값의 타입 런타임 타입 : 표현식이 실행될 때 실제로 만들어지는 결과값의 타입 vector.elementAt(5) 자바 컴파일러가 정확한 런타임 타입을 예측하는 것은 어려움 컴파일 타입 타입 : 자바 컴파일러가 타입에 대해 추론할 수 있는 가장 구체적인 것

표현식 결과값의 타입(계속) 컴파일러가 표현식의 컴파일 타임 타입을 찾아내는 규칙 2개의 int르 함께 더한 표현식의 컴파일 타임 타입은 int이다. 메소드 호출 표현식의 컴파일 타임 타입은 그 메소드의 반환 타입이다. 상수 값의 컴파일 타임 타입은 그 상수의 타입이다. 지역 변수를 읽는 표현식의 컴파일 타입은 그 지역 변수에 선언된 타입이다.

컴파일 타임 타입과 타입 제약 타입 제약 : 어떤 타입에 대하여 어떤 연산을 수행할 수 있는지에 대한 제한을 두는 것 class Point{ // 구현 생략 } class Rectangle{ boolean contains(Point p) void move(Point p) } int a,b; float f1, f2; Point p; Rectangle r; Object o; P. 281, 282 합법적, 비합법적인 표현식들

문장과 표현식의 컴파일 스택에 대하여 따르는 일반적인 법칙 각 문장의 컴파일이 시작되었을 때 스택은 비어있고 끝날 때도 스택은 비어있다. 각 문장은 스택의 상단(top)에 추가적인 요소를 하나 더 푸시하는 것 외엔 스택에 아무 영향도 끼치지 않는다. 복합표현식 또는 복합문에 부분 표현식으로 이루어졌을 경우 일단 부분 표현식이 처리되고 그 결과가 스택에 푸시된다. 이들 부분 표현식의 결과는 복합 표현식 또는 복합문에 대하여 피연산자로 사용되며, 복합 표현식 또는 복합문은 스택에서 이것들을 제거(팝)하며 자신의 처리를 수행한다.

문장과 표현식의 컴파일(계속) System.out.write(bytes, 0, byes.length); getstatic java/lang/System/out Ljava/io/PrintStream ;System.out aload_1 ;bytes iconst_0 ;0 arrayLength ;.length invokevirtual java/io/PrintStream/write([BII)V

지역 변수 선언 a int b long name String state boolean output String message 스코프(scope) : 지역 변수는 자신이 선언된 블록 안에서만 의미를 가진다. void foo(int a, long b) { String name=“Joshua”; boolean state=false; while(state) String output=“Hello,world”; System.out.println(output); state=true; } if(name==null) String msg=“No name” int output=b-a; a int b long name String state boolean output String message String output int

필드와 변수 지역 변수의 load명령어 : fload, aload, iload 객체 필드의 명령어 : getfield 정적 필드의 명령어 : getstatic 대입(assignment) <지역변수, 객체필드, 정적필드> = <대입하려는 값을 주는 표현식> 필드에 대한 대입 : <표현식>.<필드 이름> = <표현식>

축약표기(컴파일러의 식별자 구별) 고려사항 컴파일러는 주어진 이름을 가진 지역변수가 있는지 체크한다. 실패하면 이 이름을 가지고 있는 정적이지 않은 필드가 현재의 클래스 안에 있는지 살핀다. 마지막으로 이 이름을 가지고 있는 정적 필드가 현재의 클래스 안에 있는 지 살핀다.

대입문 P. 293 [표 10.5]이외의 대입 표현식들 joe.print_employee().salary *= 1.15 1)joe.print_employee().salary=joe.print_employee().salary *1.15 2)Employee temporary=jeo.print_employee(); temporary.salary=temporary.salary * 1.15; x=y=z=0; x=(y=(z=0));

대입문에서의 타입 점검 class Employee{} class Supervisor extends Employee{} Object object; Employee employee1, employee2; supervisor supervisor; object=employee1; //OK employee2=supervisor; //OK object=supervisor; //OK employee1=employee2; //OK employee1=object; //에러! supervisor=employee2; //에러! supervisor=object; //에러! employee2=employee1; //OK

new Person(“James”, “Gosling”) 새 객체의 생성 class Person { String firstName; String lastName; Person(String first, String last){ firstName=first; lastName=last; } new Person(“James”, “Gosling”) new Person ;초기화되지 않은 Person 생성 dup ;참조자의 사본을 만듦 ldc “James” ;첫째 인자를 푸시 ldc “Gosling” ;둘째 인자를 푸시 ;생성자를 호출한다. invokespecial Person/<init> (Ljava/lang/String;Ljava/lang/String;)V

클래스 이름의 축약 표기 package your.package; import my.package.Person; import java.util.Hashtable; import java.io.*; : new Hashtable() new java/util/Hashtable dup inokespecial java/util/Hashtable/<init> ()V

산술 표현식 숫자 타입의 계층 double float long int P.301 [표10.7]타입변환 명령어

산술 표현식(계속) 1.0 + 1 P.302 [표 10.8]산술 표현식에서의 강제 타입 변환 예 fconst_1 ;1.0을 푸시 iconst_1 ;1을 푸시 fadd ;에러! float을 int에 더할 수 없다. fconst_1 ;float 1.0을 푸시 iconst_1 ;int 1을 푸시 i2f ;이제 스택에는 2개의 float가 들어있다. fadd P.302 [표 10.8]산술 표현식에서의 강제 타입 변환 예 P.303 [표 10.9]int를 만들어 내는 산술 표현식들

숫자 값의 캐스팅 캐스팅 : 프로그래머에 의한 강제적 타입변환 P. 305 [표 10.10]숫자 타입의 캐스팅 (int)1.0+1 의 코드 fconst_1 f2i iconst_1 iadd (int)(1.5*2) // 결과값은 3 ((int)1.5)*2 // 결과값은 2 P. 305 [표 10.10]숫자 타입의 캐스팅

~연산자 int나 long값을 받아 각각의 비트를 반대로 바꾼다. x ^ -1 과 같은 연산 예) ~x iload_1 iconst_m1 ixor lload_1 ldc2_w-1L lxor

test class test { public static void main(String[] args) float a=1.5f; int b=2; System.out.println(a*b); System.out.println((int)a*b); System.out.println(((int)a)*b); System.out.println((int)(a*b)); int x=1; System.out.println(~x); }