Chapter 4. 클래스와 객체 PS Lab. 이지연.

Slides:



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

Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
최윤정 Java 프로그래밍 클래스 상속 최윤정
5장. 객체지향과 클래스.
JAVA 클래스와 멤버 2014년 4월 2일 19:00 손은경 강원대학교 데이터베이스 연구실 강원대학교 데이터베이스 연구실.
제 08 장 자바 빈즈 학기 인터넷비즈니스과 강 환수 교수.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
제 9 장 구조체와 공용체.
JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Lesson 5. 레퍼런스 데이터형.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Lesson 6. 형변환.
5장. 참조 타입.
Chap08 다중 스레드 8.1 스레드 개요 8.2 Thread 클래스와 스레드 생명주기 8.3 스레드 생성과 사용
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
레퍼런스 타입에 대하여 열거 타입의 선언과 이용
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
3장 자바의 기본문법(2).
Lesson 7. 클래스와 메소드 - 1.
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
Chap.10 자바 컴파일링의 안쪽 PS Lab. 이지연.
10장. 예외처리.
자바 5.0 프로그래밍.
11장. 1차원 배열.
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
Method & library.
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
인터넷응용프로그래밍 JavaScript(Intro).
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
19. 함수 포인터와 void 포인터.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
15장 컬렉션 프레임워크 Section 1 컬렉션 프레임워크의 개요 Section 2 리스트 Section 3 셋
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
Part 4 클래스 라이브러리 Chapter 10 : 다중 스레드 Chapter 11 : 패키지와 주요 클래스
자바 5.0 프로그래밍.
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
Power Java 제11장 상속.
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
15강. 폼 데이터 값 검증 Validator를 이용한 검증 ValidationUtils 클래스
JA A V W. 06.
CHAP 21. 전화, SMS, 주소록.
12. 상속 : 고급.
객체기반 SW설계 팀활동지 4.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Lecture 04 객체지향 페러다임 Kwang-Man Ko
3. 모듈 (5장. 모듈).
발표자 : 이지연 Programming Systems Lab.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
자바 객체 지향 프로그래밍 Ps lab 김윤경.
13. 포인터와 배열! 함께 이해하기.
7 생성자 함수.
6 객체.
3장 자바의 기본문법(2).
Presentation transcript:

Chapter 4. 클래스와 객체 PS Lab. 이지연

Programming Systems Lab. 목 차 객체의 생성 필드의 사용 객체에서의 메소드 호출 캐스팅 객체의 반환 인터페이스 배열 Programming Systems Lab.

Programming Systems Lab. 객체란 무엇인가? 유일성 : 하나의 객체는 프로그램 상의 어떤 다른 객체와도 같지않다 클래스 : 각각의 객체는 하나의 클래스의 맴버이어야 한다. 필드 : 같은 클래스에서 생성된 모든 객체는 동일한 필드를 갖는다. 메소드 : 클래스에 정의되어 있는 메소드들을 호출할 수 있다. Programming Systems Lab.

Programming Systems Lab. 객체와 참조자 참조자 : 객체에 묶여있는 일종의 끈 힙에 있는 객체를 가리키는 선 P. 120 [그림 4.1]JVM의 메모리 상태 Programming Systems Lab.

Programming Systems Lab. 클래스 이름 표현 JVM에서는 패키지 이름 포함하여 클래스 이름 전부 적어야 한다. 알파벳, 숫자, 언더바, 슬래시 사용 가능 자바 언어의 마침표 ‘.’대신 슬래시 ’/’사용 자바 – Hello JVM – COM/yourcompany/Hello P.121 [표 4.1]완전한 클래스 이름의 예제 패키지 클래스 이름에서 마지막 슬래시 문자 이전의 문자열들이 같은 클래스 들의 집합 COM/company/Foo 와 COM/company/Bar는 같은 패키지 COM/company/Grape/Soda와 COM/company/Cola/Soda는 다른 패키지 P.122 [표 4.2]패키지 예제 Programming Systems Lab.

Programming Systems Lab. 객체의 생성 new 명령어를 사용하여 생성 new ClassName new java/lang/Integer 생성자 <init>라는 이름을 가지며 반환타입은 void invokespecial 명령어를 사용하여 호출 보안역할 : 모든 클래스가 자신의 수퍼클래스의 생성자를 호출하도록 함 Programming Systems Lab.

Programming Systems Lab. 필드의 사용 getfield 명령어 사용 인자 : 클래스, 이름, 필드의 설명자 class Greeting { String intro=“Hello”; } .method static useGreeting(LGreeting;)V aload_0 ;0번 슬롯에 들어있는 객체를 스택에 집어넣는다. getfield Greeting/intro Ljava/lang/String; ;“Hello”라는 문자열이 스택의 최상단에 들어있을 것이다. P.126 [그림 4.2][그림 4.3]getfield 명령어 수행 Programming Systems Lab.

Programming Systems Lab.

Programming Systems Lab. 필드의 사용(계속) 타입과 getfield 명령어 getfield할 필드가 float형인 경우 fadd, freturn사용 필드의 상속 다른 클래스를 수퍼클래스로 갖는 경우, 수퍼클래스에 있는 모든 정적이지 않은 필드를 상속받음 Programming Systems Lab.

Programming Systems Lab. 필드의 사용(계속) 필드 값의 변경 putfield 명령어 사용 .method static makeAustralian(LGreeting;)V aload_0 ; Greeting 객체를 스택에 집어넣는다. ldc “G’ Day” ; 새로 바꾸어줄 intro필드의 값을 스택에 집어넣는다. putfield Greeting/intro Ljava/lang/String; return .end method Programming Systems Lab.

Programming Systems Lab. 객체에서의 메소드 호출 invokevertual명령어 사용 ;RightTriangle 객체가 지역변수 배열 0번에 들어있다고 가정하자 aload_0 ; RightTriangle 객체를 스택에 집어넣는다. ldc 3.0 ; 스택에 3.0과 4.0을 인자로 집어넣는다. ldc 4.0 invokevertual RightTriangle/sumOfSquares(FF)F ; 스택에는 메소드 호출의 결과로 25.0이 들어있을 것이다. 정적 메소드는 invekestatic명령어 사용 메소드가 호출되는 객체 필요없이 인자만 필요 Programming Systems Lab.

Programming Systems Lab. 가상 메소드 호출 .class Hello .methd greet()V getstatic java/lang/System/out Ljava/io/PrintStream; ldc “Hello, world” invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V .end method .end class .class Hola .super Hello ldc “Hola, mundo” 만약 프로그램 상에서 Hola객체가 스택의 최상단에 있을 때 invokevirtual Hello/greet()V 명령어를 실행하면 결과는 Hola, mundo Programming Systems Lab.

Programming Systems Lab. 메소드의 오버라이드와 오버로딩 오버라이드 : 수퍼클래스에 존재하는 것과 동일한 이름과 설명자의 메소드를 정의 서브클래스에서는 새로 정의된 메소드만 사용 오버로딩 : 같은 이름을 가지더라도, 인자가 다른 경우 두 메소드는 다른 메소드로 취급 .class Printer .method print(Ljava/lang/Object;)V : .end method .method print(Ljava/lang/String;)V Programming Systems Lab.

Programming Systems Lab.

Programming Systems Lab. 직접적인 메소드 호출 invokespecial명령어 : 어떤 메소드가 사용될지를 정확하게 알 수 있는 경우 사용 지역변수 배열 0번에 Hola 객체를 가지고 있는 경우 aload_0 ;Hola 객체를 스택에 집어넣는다. invokespocial Hello/geet()V aload_0 ;다시 집어넣는다. invokevirtual Hello/greet()V 결과 Hello, world Hola, mundo Programming Systems Lab.

Programming Systems Lab. super키워드 super키워드 : 가상 디스패치 매커니즘을 사용하여 현재 클래스의 수퍼클래스에서 구현된 메소드를 찾음 .class super Bicycle .method tuneUp()V : .end class .class super MountainBike .super Bicycle .class super DownhillBicycle .super MountainBike invokespecial Bicycle/tuneUp()V Programming Systems Lab.

Programming Systems Lab. 캐스팅 checkcast 명령어 스택 맨 위에 있는 객체의 타입 검사 다른 명령어 들과는 다르게 자신의 피연산자 스택에서 꺼내지 않고 검사만 함 checkcast Address ;가상 머신은 스택의 맨 위에 있는 객체가 Address 객체로 바뀔 수 있다는 것을 알 수 있다. invokestatic Library/sendOverdueNotice(LAddress;)V Programming Systems Lab.

Programming Systems Lab. 캐스팅, 필드, 메소드, 그리고 자바 예제 class Greeting { String intro=“Hello”; String target() return “world”; } class FrenchGreeting extends Greeting String intro=“Bonjour”; return “le monde”; Programming Systems Lab.

Programming Systems Lab. 캐스팅, 필드, 메소드, 그리고 자바 예제(계속) public static void main(String argv[]) { Greeting english=new Greeting(); Greeting french=new FrenchGreeting(); System.out.println(english.intro+”,”+english.target()); System.out.println(french.intro+”,”+french.target()); System.out.println(((FrenchGreeting)french).intro+”,”+ ((FrenchGreeting)french).target()); } 결과 Hello, world Hello, le monde Bonjour, le monde Programming Systems Lab.

Programming Systems Lab.

Programming Systems Lab. 캐스팅, 필드, 메소드, 그리고 자바 예제(계속) aload_1 getfield Greeting/intro Ljava/lang/String; aload_2 checkcast FrenchGreeting getfield FrenchGreeting/intro Ljava/lang/String; ;englsh.target() invokevirtual Greeting/target()Ljava/lang/String; ;french.target() ;((FrenchGreeting)french).target() invokevirtual FrenchGreeting/target()Ljava/lang/String; Programming Systems Lab.

Programming Systems Lab. 객체의 반환 int 값 반환 : ireturn 참조자 반환 : areturn null 참조자 반환 : areturn Programming Systems Lab.

Programming Systems Lab. 인터페이스 실제로 클래스가 어떤 동작을 해야 할지를 적어놓는 일종의 명세서 인터페이스에 나와있지 않은 메소드를 구현해도 상관없으나 선언되어 있는 메소드는 반드시 구현되어야 함 클래스와 다른 점 필드를 가지지 않음 메소드는 public, abstract속성이어야 하고 정적 메소드나 네이티브 메소드이어서는 안됨 Programming Systems Lab.

Programming Systems Lab. 인터페이스 (계속) 인터페이스는 클래스의 수퍼클래스처럼 취급될 수 있다. invokeinterface 명령어를 사용하여 메소드 호출 invokeinterface Enumerator/anyMore()Z 1 Programming Systems Lab.

Programming Systems Lab. 정적 필드와 메소드 정적 필드 전체 클래스 상에서 하나만 존재 오직 하나만 존재하는 값을 저장하는데 사용 getfield, putfield 명령어 대신 getstatic, putstatic명령어 사용 정적 메소드 호출 : invokestatic명령어 사용 Programming Systems Lab.

Programming Systems Lab. 클래스 초기화 <clinit>이라는 이름의 정적 메소드 클래스를 초기화함 클래스가 로드될 때 JVM에 의해 호출 메소드를 호출해 줄 필요 없음 .method static <clinit>()V .limit stack 2 new IceCream dup invokespecial IceCream/<init>()V putstatic IceCream/vanilla LIceCream; : Programming Systems Lab.

Programming Systems Lab. 배열 참조자의 배열 anewarray 명령어 사용 iconst_5 anewarray java/lang/String P.161 [그림 4.8][그림 4.9][그림 4.10] 배열 Programming Systems Lab.

Programming Systems Lab.

Programming Systems Lab. 배열(계속) 다차원 배열 : multianewarray 명령어 사용 iconst_3 iconst_5 multianewarray [[I 2 iconst_2 aaload ; 배열의 3번째 원소를 얻어낸다 iconst_4 ; 얻어낸 배열의 5번째 슬롯에 데이터를 저장할 것이다. ldc 144 ; 배열에 넣은 값을 스택에 집어넣는다. iastore ; 값을 배열에 저장한다. Programming Systems Lab.

Programming Systems Lab. 배열(계속) 배열의 길이 자바언어 : args.length Oolong언어 aload_0 ; 배열의 참조자를 스택에 집어넣는다. arraylength ; 배열의 길이를 스택에 집어넣는다. Programming Systems Lab.