제1장 자바 언어 소개

Similar documents
제4장. 객체지향 프로그래밍 II

Microsoft PowerPoint - lec4_1 [호환 모드]

PowerPoint Presentation

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

JAVA PROGRAMMING 실습 08.다형성

PowerPoint Presentation

gnu-lee-oop-kor-lec06-3-chap7

PowerPoint Presentation

Microsoft PowerPoint - lec7_package [호환 모드]

Microsoft PowerPoint - 2강

PowerPoint Presentation

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

JAVA PROGRAMMING 실습 09. 예외처리

Network Programming

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

슬라이드 1

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - CSharp-10-예외처리

쉽게 풀어쓴 C 프로그래밍

No Slide Title

Microsoft PowerPoint - chap11

Microsoft PowerPoint - Lect04.pptx

Microsoft PowerPoint - java2 [호환 모드]

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

제11장 프로세스와 쓰레드

PowerPoint Presentation

PowerPoint Presentation

PowerPoint 프레젠테이션

Cluster management software

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

C++ Programming

PowerPoint 프레젠테이션

Design Issues

Microsoft PowerPoint - java1 [호환 모드]

PowerPoint Presentation

JAVA PROGRAMMING 실습 07. 상속

(Microsoft PowerPoint - java2-lecture3.ppt [\310\243\310\257 \270\360\265\345])

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

PowerPoint 프레젠테이션

Slide 1

12-file.key

02 C h a p t e r Java

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

C++ Programming

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint - 04-UDP Programming.ppt

PowerPoint Template

PowerPoint Presentation

PowerPoint 프레젠테이션

Microsoft PowerPoint - additional08.ppt [호환 모드]

쉽게 풀어쓴 C 프로그래밍

Semantic Consistency in Information Exchange

01-OOPConcepts(2).PDF

JAVA PROGRAMMING 실습 05. 객체의 활용

PowerPoint Template

17장 클래스와 메소드

PowerPoint Presentation

예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 2

03-JAVA Syntax(2).PDF

PowerPoint Presentation

07 자바의 다양한 클래스.key

Microsoft PowerPoint - ch07 - 포인터 pm0415

슬라이드 1

PowerPoint Presentation

JVM 메모리구조

Chap12

(Microsoft PowerPoint - CLXBUOPUGXNK.ppt [\310\243\310\257 \270\360\265\345])

9장.예외와 단정

슬라이드 1

설계란 무엇인가?

교육자료

1

JUNIT 실습및발표

PowerPoint Template

윤성우의 열혈 TCP/IP 소켓 프로그래밍

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

Java ~ Java program: main() class class» public static void main(string args[])» First.java (main class ) /* The first simple program */ public class

PowerPoint 프레젠테이션

Microsoft PowerPoint - Chapter 6.ppt

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Microsoft PowerPoint - lec12 [호환 모드]

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

PowerPoint Presentation

JAVA PROGRAMMING 실습 02. 표준 입출력

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint - additional01.ppt [호환 모드]

자바 프로그래밍

쉽게 풀어쓴 C 프로그래밍

No Slide Title

Microsoft PowerPoint - chap06-2pointer.ppt

Transcription:

프로그래머를위한 Java 2 제3장객체지향프로그래밍

Software Components 2 Programs are easier to construct and modify they are made up of separate components A software component can be thought of any program element that transforms input into output Input Component Output 15 38 16 Compute average 22

Software Components 3 Components can be combined to make larger components

Object-Oriented Oriented Programming 4 Java is object-oriented language Programs are made from software components called objects Initially, we can think of an object as data for it and a collection of services Object contains data and methods to provide the service

Object-Oriented Oriented Programming 5 Class A class represents a concept An object is defined by a class Multiple objects can be created from the same class

Object-Oriented Oriented Programming 6 A class represents a concept and an object represents the realization of that concept Objects Class My first car Car John's car Dad's car

3.1.1 객체와클래스개념 7 용어정리 객체 (object) 실세계혹은인간의생각속에존재하는사물혹은개념 추상화 (abstraction) 객체들의공통된특성을파악하고, 불필요한특성을제거하는과정 클래스 (class) 추상화를통해서객체들의공통된사항을모아놓은것 멤버필드 ( 속성 ) 클래스의특성중에서변수혹은값으로표현할수있는것 메소드 ( 멤버함수, 행위 ) 클래스의특성중에서함수로표현할수있는것 캡슐화 (encapsulation) 클래스의특성을외부에서접근하지못하도록한것

3.1 객체지향개념 8 정보은폐 멤버필드와메소드를클래스의외부에서는접근하지못하도록하는기능 상속 새로운클래스를정의할때, 이미존재하는클래스를바탕으로 필요한속성만추가하여작성하는방법 서브클래스 상속을통해새로정의되는클래스 슈퍼클래스 상속에서바탕이되는클래스

3.1.1 객체와클래스개념 9 추상화

3.1 객체지향개념 10 객체지향프로그래밍의장점 생산성향성 객체를하드웨어의 IC 처럼재사용 자연적인모델링 보통사람들의생각을프로그래밍언어로표현 재사용 상속성, 클래스통합을통한코드재상용의극대화 유지보수의용이성 함수수정에있어주변에미치는영향이최소화됨

3.1.1 객체와클래스개념 11 실세계객체와프로그램세계의클래스

3.1.1 객체와클래스개념 12 프로그램세계에서클래스와객체 객체 Object = Data + Methods Object = 클래스의인스턴스 (an instance of a class) 클래스 Class = 객체의타입 (description of a type of Object) 프로그램 Program = 서로협력하는객체들의집합 (a set of Objects invoking each other Methods)

실세계의객체와컴퓨터상의객체 13

3.1.1 객체와클래스개념 (Message Passing) 14 메시지패싱 Driver Car car; Car 클래스객체페달 페달을밟았다. 힘좀더내봐 운전자 엔진 객체 Car pedal push(){ } Engine engine; Pedal pedal; Wheel wheel; engine.powerup(); car.pedal.push() engine powerup(){ 객체바퀴 빨리돌아라 wheel speedup(){...... } } wheel.speedup()

객체간의의사소통 : 메시지패싱 15 실세계에서메시지패싱 운전자 Car 클래스객체페달객체바퀴 페달을밟았다. 힘좀더내봐 빨리돌아라 엔진 객체

객체간의의사소통 : 메시지패싱 16 자바언어에서메시지패싱 메시지패싱방법을사용 대부분의프로그래밍언어에서는함수호출을이용 Driver Car car; Car car.pedal.push() Engine engine; Pedal pedal; Wheel wheel; pedal push(){ } engine.powerup(); wheel speedup(){...... } engine powerup(){ } wheel.speedup()

3.1.2 클래스와객체만들기 17 추상화관점

3.1.2 클래스와객체만들기 18 1. 정의단계 클래스 -> 틀, 자료형 클래스를정의할때사물 ( 객체, 물건 ) 의중요하고필요하다고판단되는 특성과기능만추출해서표현한다. 2. 생성 ( 실체화 ) 단계 new 라는명령어를사용, new 다음에클래스이름과같은함수기술이때만들어진실체 ( 객체 ) 는변수에저장되고, 변수의타입은실체의종류가될것이다. 예 : Pen mypen = new Pen(); 3. 사용단계 변수에점 (.) 을이용하여프로그램에서생성된객체를사용한다. 예 : mypen.write();

3.1.2 클래스와객체만들기 19 프로그램에서클래스를정의하고사용하는단계 1. 공장 ( 생산라인 ) 을만든다. 2. 물건을만든다. 3. 물건을이용 ( 사용 ) 한다. 특성중요한추출기능 프로그램으로표현 class Pen { String color; int price; mypen.write(); Pen mypen = new Pen(); } void write() { System.out.println("Hello"); }

3.1.2 클래스와객체만들기 20 예제 : Pen.java 예제 : PenUser.java 1 class Pen { 2 String color; 3 int price; 4 5 void write() { 6 System.out.println("Hello"); 1 class PenUser { 2 public static void main(string args[]) { 3 Pen mypen = new Pen(); 4 mypen.write(); 5 } 6 } 7 } 8 } -Method Invocation -Message passing 결과 C:\> java PenUser Hello

3.1.3 레퍼런스타입 21 레퍼런스와포인터

3.1.3 레퍼런스타입 22 객체생성방법 (C++ vs. Java)

3.1.3 레퍼런스타입 23 메모리영역 1 int a = 100 ; 2 Car mycar; 3 mycar = new Car(); 4 Car yourcar = mycar;

3.2 자바클래스 24 자바클래스작성문법 [ classmodifier ] class name [ <typeparameter> ] [ extends name ] [ implements name [, name ] ] { [[ constructormodifier ] name ( argumentlist ) [ throws name [, name ] ] { } ] [ fieldmodifier ] type name [ = initialvalue ] ; } [ methodmodifier ] [ <typeparameter> ] returntype name ( argumentlist ) [ throws name [, name ] ] { }

3.2 자바클래스 25 모디파이어종류

3.2 자바클래스 26 예제 : Circle1.java 1 class Circle { 2 protected int r; 3 4 public double getcircumference() { 5 return 3.14*2*r; 6 } 7 8 public double getarea() { 9 return 3.14*r*r; 10 } 11 12 public int getradius() { 13 return r; 14 } 15 16 public void setradius(int r) { 17 this.r = r;..

3.2 자바클래스 27 예제 : CircleUser1.java 1 class CircleUser { 2 public static void main(string args[]) { 3 Circle c = new Circle(); 4 c.setradius(7); 5 System.out.println(" 원둘레 :"+ c.getcircumference()); 6 System.out.println(" 원면적 :"+ c.getarea()); 결과 C:\> java CircleUser 원둘레 :43.96 원면적 :153.86

3.3.1 생성자 28 생성자 클래스이름과동일한이름을갖는함수 생성자의리턴타입은기술하지않음 역할 - 멤버필드의초기화 생성자가없는클래스는디폴트생성자를가지고있다

3.3.1 생성자 29 예제 : Circle2.java 1 class Circle { 8 public Circle(int r) { 9 this.r = r; 10 } 예제 : CircleUser2.java 1 class CircleUser { 2 public static void main(string args[]) { 3 Circle c = new Circle(7); 4 System.out.println(" 원둘레 :"+ c.getcircumference()); 5 System.out.println(" 원면적 :"+ c.getarea());

3.3.2 this 30 this 클래스내에서자기자신을가리키는레퍼런스 static으로선언된메소드에서는사용될수없다. 두가지목적으로사용 자기자신의멤버필드나메소드를명확히지시하기위해서사용 객체전체를함수의매개변수로전달해야하는경우에사용 예제 : This.java 9 void a (int a) { 10 this.a = a; 11 b.dojob(this); 12 } 13 }

3.3.3 this() 31 this( ) 생성자에서사용되는 this() 는클래스의다른생성자를호출 생성자가많은경우매개변수에의해생성자가구분 생성자에서 this() 는맨처음부분에나와야한다. 예제 : Circle3.java 4 public Circle() { 5 this(0); 6 } 8 public Circle(int r) { 9 this.r = r; 10 }

3.3.5 패키지와 import 32 패키지 (package) 유사한클래스들의모임 package 문장기술 특징 package package_name ; package 문장을사용하지않는경우에는디폴트패키지에속하게된다. 패키지내에서클래스들은서로자유롭게다른클래스들을참조 다른패키지의클래스를사용하기위해서는 import 문을사용 import package_name.class_name ; 패키지경로는클래스파일의디렉토리경로와같다. 예 ) java.awt.graphics --> java/awt/graphics import 문장을사용하지않고다른패키지의클래스를참조하기위해서는패키지이름과클래스이름을같이사용 예 ) java.awt.graphics g ;

3.3.5 패키지와 import 33 예제 : ColorPen.java 1 package com.coding_free.java2; 2 3 public class ColorPen { 4 private String color; 5 private int price; 저장및컴파일 저장 C:\java2\src\ch3\com\coding_free\java2 컴파일 C:\> javac -d. com/coding_free/java2/colorpen.java

3.3.5 패키지와 import 34 예제 : ColorPenUsre.java 1 package penna; 2 3 import com.coding_free.java2.*; 4 5 class ColorPenUser { 6 public static void main(string args[]) { 7 ColorPen mypen = new ColorPen(); 저장, 컴파일및실행 저장 : C:\java2\src\ch3\penna 컴파일 : C:\> javac -d. penna/colorpenuser.java 실행 : C:\> java penna.colorpenuser

3.3.5 패키지와 import 35 Static import 클래스의 static 멤버필드와메소드를임포트할수있는기능 형태 import static TypeName.Identifier ; import static TypeName.* ; 예제 : StaticImportTest.java 1 import static java.lang.system.*; 2 3 public class StaticImportTest { 4 public static void main(string args[]) { 5 out.println("hello World");

3.4 public 클래스 36 public 클래스의의미 public으로선언된경우 같은패키지내에서자유롭게사용. 다른패키지에서도자유롭게사용. public 으로선언되지않은경우 같은패키지내에서는자유롭게사용 다른패키지에서접근시에러가발생

3.5 가시성 37 가시성 멤버필드와메소드에적용 가시성종류 public 클래스내외어느곳에서나접근이가능 protected 같은패키지내에있는클래스들은모두접근가능 다른패키지의클래스들은이클래스로부터상속받은경우에만접근 가능 package 아무것도기술하지않음 같은패키지내에서는자유롭게접근할수있으나, 패키지외부에서는접근할수없음 private 클래스내부에서만접근가능

3.5 가시성 38 동일패키지 외부패키지 package class class package class class X class 상속 O O X O protected public private default 상속 O O X O class class O O 상속 X X protected public private default 상속 O X X class class class

3.6 transient, volatile 필드 39 3.6.1 transient 필드 멤버필드가객체의영속적인상태에일부분으로포함되지않는다 예 ) 다음의 Point 클래스가시스템서비스에의해영속적인메모리에 저장될때 transient 부분을제외한 x, y 부분만저장됨을의미한다. class Point { int x, y; transient float rho, theta; } transient 는현재까지세부적인내용은결정되지않았고, 앞으로세부적인사항들이결정될예정

3.6 transient, volatile 필드 40 3.6.2 volatile 필드 쓰레드간에공유되는데이터의일관성유지를위해사용 volatile 로선언된변수는일관성을유지하면서내용이업데이트됨 volatile 로선언된변수의내용을변경하는경우에는락 (lock) 이걸린다고볼수있다. 예 : class Test { static volatile int i = 0, j = 0; static void one() { i++; j++; } static void two() { System.out.println("i=" + i + " j=" + j);.. i, j 변수에 volatile 을선언하는것은 i, j 값을변경하는 one(), two() 메소드에 synchronized 를선언하는것과같은효과를가져온다.

3.7 오버로딩 (overloading) 41 오버로딩 ad-hoc polymorphism이라고도함 동일한연산자가자료의타입에따라다른작업을수행하는것 함수오버로딩 동일한이름을가지는함수가여러개존재가능 내부적으로는다른작업을하더라도의미면에서같다면동일한함수이름을사용 한클래스내에서함수이름은동일, 함수의매개변수는달라야함 함수시그내쳐 = 함수이름 + 매개변수개수 + 매개변수타입

3.7 오버로딩 (overloading) 42 함수의이름은같아도시그니쳐 (signiture) 는달라야한다. 시그니쳐 (signiture) - 함수이름, 아규먼트의수, 아규먼트의타입 동일한함수이름을사용하면컴파일러가시그니쳐를이용해서다른이름으로변경해서컴파일 함수이름이동일하고시그니쳐도동일하다면컴파일에러발생 함수의리턴타입은시그니쳐에포함되지않음 예제 : Overloading.java 한클래스내에서함수이름은동일하지만, 함수의아규먼트 ( 아규먼트의수, 아규먼트의타입 ) 가다른경우

3.7 오버로딩 (overloading) 43 예제 : Overloading.java 1 class Overloading { 2 public void say() { 3 System.out.println("Hello?"); 4 } 6 public void say(string msg) { 7 System.out.println(msg); 8 } 10 public void say(string msg, int n) { 11 for(int i =0; i < n; i++) { 12 System.out.println(msg); 13 } 14 } 16 public static void main(string args[]) { 17 Overloading a = new Overloading(); 18 a.say(); 19 a.say("how are you?"); 20 a.say("i am fine.", 3);...

3.7 오버로딩 (overloading) 44 폴리모피즘 동일한내용이다른타입에적용가능 기원 함수형언어에서시작됨 예 : 리스트의크기를알아보는 length 함수는리스트내부의데이터타입에관계없이적용되고, Int 타입의값을리턴한다. length :: [a] -> Int // Hakell 언어문법 종류 Parametric polymorphism 데이터타입과무관하게동일한코드로작동 코드재사용 함수형언어의폴리모피즘 자바의제네릭프로그래밍, C++ 의 template Ad-hoc polymorphism 데이터타입에따라다른코드가수행 문법재사용 연산자혹은함수오버로딩

4.1 상속 45 상속 기존에있는클래스를바탕으로다른특성을추가해새로운클래스를생성 서브클래스 (subclass), 파생클래스 (derived class), 자식클래스 (child class) 슈퍼클래스 (superclass), 베이스클래스 (baseclass), 부모클래스 (parent class) is - a 관계 "Human is an animal." 에서 human 과 animal 과의관계 human 은 animal 에속하면서 animal 의모든속성을상속받음 is - a 가성립하는경우에상속이가능하다. 서브클래스는슈퍼클래스의서브타입 (subtype) 자바에서는상속을위해서 extends 라는키워드를사용 자바는단일상속 (single inheritance) 만지원 하나의슈퍼클래스로부터상속받음 cf) 다중상속 C++

4.1.1 상속 46 사원과관리자의예 Employee 클래스 멤버필드 : 이름, 사번, 직책, 월급 메소드 : 일하다 Manager 클래스 멤버필드 : 이름, 사번, 직책, 월급, 부서 메소드 : 일하다

4.1.1 상속 47 Employee와 Manager의관계 is-a 관계 A manager is an employee. 상속관계 Employee : 슈퍼클래스, 부모클래스 Manager : 서브클래스, 자식클래스 자바에서상속 extends 키워드사용

4.1.1 상속 48 예제 : Employee.java 1 class Employee { 2 protected String name; 3 protected String idnum; 7 public Employee(String name, String idnum) { 8 this.name = name; 9 this.idnum = idnum; 20 public void work() { 21 System.out.println(" temployee ""+name + " " does his best."); 22 }

4.1.1 상속 49 예제 : Manager.java 1 class Manager extends Employee { 2 String dept; 4 public Manager(String name, String idnum, String dept) { 5 super(name, idnum); 6 this.dept = dept; 7 } 8 9 public void work() { 10 System.out.println("Manager ""+name + 11 " " works hard with his subordinates in "+dept+ dept."); 12 }

4.1.1 상속 50 예제 : Company.java 7 jmchoi = new Manager( Yoon Yong", "F99847", "Finance"); 10 lee = new Employee("lee", "F94732"); 12 employees = new Employee[4]; 13 employees[0] = yiyoon; 14 employees[1] = sblim; 19 public void makemoney() { 20 int n = employees.length; 21 for(int i=0; i < n; i++) { 22 employees[i].work(); 23 }

4.1.2 super 와 super() 51 super super는슈퍼클래스를지칭하는레퍼런스로사용 상위클래스의멤버필드나메소드를지칭할때사용 super.attribute super.method() static으로선언된메소드에서는사용될수없다. super() super() 는슈퍼클래스의생성자를호출 super() 는생성자의맨처음부분에위치 자식클래스의생성자는슈퍼클래스의생성자를호출해야한다. 슈퍼클래스의생성자를호출하지않는경우에는내부에서자동적으로슈퍼클래스의디폴트생성자가호출

4.1.3 오버라이딩 52 오버라이딩 (overriding) 클래스의상속관계에서발생 슈퍼클래스에있는메소드를서브클래스에서다른작업을하도록서브클래스에서동일한 함수이름으로재정의 cf) 오버로딩 (overloading) static 으로선언한클래스메소드에서는오버라이딩되지않는다. 예외상황을발생시킬수있는메소드는오버라이딩할수없다. 예 class Employee { public void work() { System.out.println(" temployee ""+name +."); } } class Manager extends Employee { public void work() { System.out.println("Manager ""+name + "...");

4.1.4 상속, 오버라이딩, 우버쉐도우 53 예제 : A.java 2 int a = 10; 4 void b() { 5 System.out.println("A"); 예제 : AA.java 1 class AA extends A { 2 int a = 20; 3 void b() 4 System.out.println("AA"); 5 6 void c() { 7 System.out.println("C");

4.1.4 상속, 오버라이딩, 우버쉐도우 54 메모리구조 A z b() AA void b() {..("A") } a c() 10 void b() {..("AA") } a 20 void c() {..("C") }

4.1.4 상속, 오버라이딩, 우버쉐도우 55 예제 : XYZ.java msg 출력

4.1.4 상속, 오버라이딩, 우버쉐도우 56 예제 : XYZ.java 40 Z z = new Z(); 41 Y y = z; 42 X x = z; 43 z.print(); 44 y.print(); 45 super.print(); 46 play(); 47 super.play(); 48 // y.doz(); 49 // super.super.print();

4.1.4 상속, 오버라이딩, 우버쉐도우 57 예제 : XYZ.java( 계속 ) 51 System.out.println(" ni ="+ i); 52 System.out.println("this.i = "+ this.i); 53 System.out.println("super.i = "+ super.i); 54 System.out.println("y.i = "+ y.i); 55 System.out.println("x.i = "+ x.i); 56 System.out.println("((Y)this).i = "+ ((Y)this).i); 57 System.out.println("((X)this).i = "+ ((X)this).i); 58 // super.super.i = 10;

4.1.4 상속, 오버라이딩, 우버쉐도우 58 결과 : XYZ.java C: > java Z I am a Z. I am a Z. I am an Y. Play..I am a Z. Play..I am an X. i =15 this.i = 30 super.i = 20 y.i = 20 x.i = 10 ((Y)this).i = 20 ((X)this).i = 10

4.1.4 상속, 오버라이딩, 오버쉐도우 59 오버라이딩 (overriding) 주의사항 가시성은커지는방향으로 예외 throws 문제 리턴타입이다른경우 오버쉐도우 (overshadow) 동일한이름의멤버필드가슈퍼클래스와서브클래스에있을때 오버쉐도우된멤버필드는 super 레퍼런스를이용하거나, 서브클래스를슈퍼클래스로형변환해서접근할수있다.

PolyMorphism 60 Poly : 많다는뜻의접두어 Morphism : 형태라는뜻 Polymorphism : 형태가많다는뜻 의미 (Semantics) 는하나지만실제형태는여러가지가될수있음. 예 ) 밥을먹다 : 누가밥을먹는가에다양한형태가존재 객체지향프로그래밍에서 polymorphism 의지원형태 Overloading Overriding

4.2.1 클래스에서형변환 61 슈퍼타입과슈퍼클래스 슈퍼타입 슈퍼클래스 같은개념은아니지만, 자바 /C++ 등의언어에서는같다고보아도무방함 예

4.2.1 클래스에서형변환 62 예제 : ReferenceCast.java 9 animal1 = new Animal(); 10 mammal1 = new Mammal(); 11 ape1 = new Ape(); 12 human1 = new Human(); 13 14 // human2 = ape1; // 컴파일에러 15 // human2 = mammal1; // 컴파일에러 16 // human2 = (Human) mammal1; // 컴파일 OK, 실행시에러 17 18 mammal2 = human1; // OK 19 // human2 = mammal2; // 컴파일에러 20 human2 = (Human) mammal2; // OK 21 // ape2 = (Ape) mammal2; // 컴파일 OK, 실행시에러 22 // ape2 = (Ape) animal1; // 컴파일 OK, 실행시에러

4.2.2 static 메소드숨김 63 static 메소드숨김 부모클래스에서정의한 static 메소드를자식클래스에서다시정의하는경우 부모클래스의메소드는숨겨져서보이지않음 자식클래스를부모클래스로타입변경하면, 부모클래스의메소드를사용할수있음 예 : MethodHiding.java 1 class Super { 2 static String greeting() { return "Goodnight"; } 3 String name() { return "Richard"; } 4 } 6 class Sub extends Super { 7 static String greeting() { return "Hello"; } 8 String name() { return "Dick"; }

4.3 인터페이스 64 인터페이스 자바에서서브타입을지원하기위해서만든개념 모든메소드가헤더만갖고있고, 바디는없음 형태 [ interfacemodifier ] interface name [ extends name ] { [ interfacefieldmodifier ] type name; [ interfacemethodmodifier ] returntype name ( argumentlist ) ; 인터페이스를구현하는클래스는 implements 키워드사용 }

4.3.1 인터페이스기초 65 인터페이스와추상클래스 추상클래스는클래스의메소드와멤버필드의일부분은구현, cf) 인터페이스는전혀구현되어있지않음 추상클래스를이용하는경우에는단일상속만지원 cf) 인터페이스는다중상속 (multiple inheritance) 을할수있음 인테페이스를구현하기위해서 implements 라는키워드를사용 인터페이스를구현하는것도서브타입 (subtype) 을만드는것임

4.3.1 인터페이스기초 66 예 )DrawableCircle

4.3.1 인터페이스기초 67 인터페이스사용예

4.3.1 인터페이스 (interface) 68 예제 : Drawable.java 1 import java.awt.graphics; 2 3 interface Drawable { 4 void paint(graphics g); 5 } 예제 : DrawableCircle.java 1 import java.awt.*; 2 3 class DrawableCircle extends Circle implements Drawable { 4 protected int x, y; 16 public void paint(graphics g) { 17 g.drawoval(x-r, y-r, 2*r, 2*r); 18 } 19 }

4.3.1 인터페이스 (interface) 69 예제 : DrawApplet.java 1 import java.awt.*; 2 import java.applet.*; 3 4 public class DrawApplet extends Applet { 5 Drawable drawable[]; 6 7 public void init() { 8 drawable = new Drawable[3]; 9 drawable[0] = new DrawableCircle(45, 45, 30); 10 drawable[1] = new DrawableRectangle(25, 25, 40, 65); 11 drawable[2] = new DrawableCircle(90, 70, 60); 12 } 13 14 public void paint(graphics g) { 15 int n = drawable.length; 16 for(int i=0; i< n; i++) { 17 drawable[i].paint(g); 18 }..

4.3.2 인터페이스특성 70 인터페이스특성 인터페이스의멤버필드는디폴드로 static, final 로선언 따라서인터페이스의멤버필드의값을변경하려는시도는컴파일시에에러를발생 인터페이스구현 서브타입 여러개의인터페이스를구현하는경우 콤마를이용해서기술 인터페이스의임플리멘츠도상속과같은개념 인터페이스를임플리멘츠한서브클래스는인터페이스의멤버필드를상속받아서사용할수있다. 인터페이스의상속 extends 키워드사용 interface ScaledDrawable extends Drawable{..}

4.4 static 과 final 의의미 71 final 클래스 그클래스는더이상상속을통해서재사용할수없음 final 클래스를상속받으려는클래스는컴파일시에에러가발생 클래스앞에 final 키워드사용 public final class FinalClass{. } final 메소드 final 이메소드에선언된경우, 오버라이딩이불가능 메소드앞에 final 키워드사용 public final void print(){. } final 멤버필드 값을변경할수없는상수의의미 final 멤버필드는값을초기화만할수있고, 새로이값을할당할수는없음 멤버필드앞에 final 키워드사용 public final int a = 10;

4.4 static 과 final 의의미 72 static 멤버필드 객체들간의전역변수처럼사용됨 클래스이름으로접근한다. (ex : Color.red) 멤버필드앞에 static 키워드사용 static int a = 3; static 메소드 혹은클래스메소드라고도함 인스턴스가아닌클래스이름으로메소드호출 ex : Math.abs(-10); 메소드앞에 static 키워드사용 public final static void sayhello(string arg){. } 주의 this, super 를사용할수없음 static 이아닌멤버필드는접근할수없음

4.4 static 과 final 의의미 73 static 초기화 클래스내에서 static 키워드를이용해서초기화루틴을사용할수있음 static 초기화는클래스가초기화될때수행 대표적인 static 초기화의예는네이티브메소드에서라이브러리를로드 static { System.loadLibrary("hello"); } 자바클래스에서멤버필드나메소드의위치는크게중요하지않았음 그러나 static 초기화에서는변수의위치는중요 뒤에선언된변수나함수를앞에서레퍼런스해서사용할수없음 예제 : BadStaticInitial.java 1 class BadStaticInitial { 2 static int i = j + 2; 3 static int j = 4; 4 }

5.1 내부클래스 (Inner Class) 74 내부클래스 클래스내부에정의된클래스 외부클래스의멤버필드와메소드에자유롭게접근가능 종류 내재된 (Nested) 톱레벨클래스 / 인터페이스 클래스나인터페이스가 static으로선언된경우 패키지의멤버 다른클래스에서사용될수있음 멤버클래스 클래스의멤버로정의됨 지역클래스 메소드내부에서정의됨 무명클래스 메소드내부에서정의됨

5.1.1 내재된톱레벨클래스 / 인터페이스 75 내재된 (Nested) 톱레벨클래스 / 인테페이스 다른클래스에포함되면서클래스나인테페이스가 static 으로선언된경우 다른톱레벨클래스와같이패키지의멤버이다. LinkedList 클래스에내재된인터페이스 Linkable 이있다면, Linkable 인터페이스는 LinkedList.Linkable 로접근할수있다. 예제 : LinkedList.java 1 public class LinkedList { 2 protected Linkable head; 3 4 public LinkedList() { 5 head = null; 6 }... 12 public interface Linkable { 13 public Linkable getnext(); 14 } 15 }

5.1.1 내재된톱레벨클래스 / 인터페이스 76 예제 : LinkableNode.java 3 public class LinkableNode implements LinkedList.Linkable {... 4 protected Object value; 5 protected LinkedList.Linkable next; 12 public LinkedList.Linkable next() { 13 return next; 14 } 15 16 public void next(linkedlist.linkable node) { 17 next = node; 18 }

5.2 멤버클래스 77 멤버클래스 클래스의멤버로 Inner 클래스가선언된경우이다. static 으로선언되지않는다. 자신을포함하는클래스의멤버필드와메소드들을자유롭게접근 예제 : DrawRecD.java.. 5 public class DrawRecD extends Applet { 6 int startx, starty, w, h;. 21 public class MouseMotionHandler extends MouseMotionAdapter { 22 public void mousedragged(mouseevent e) { 23 w = Math.abs(startX - e.getx()); 24 h = Math.abs(startY - e.gety()); 25 repaint(); 26 } 27 }.

5.3 지역클래스 78 지역클래스 메소드내부에정의된클래스 : 자바코드의블락 ({ }) 안에서정의된 Inner 클래스 지역변수의특성과유사하다. 멤버클래스는아니지만, 포함하는클래스의멤버필드와메소드를접근 예제 : SomeApplication.java.. 4 public class SomeApplication extends Frame { 5 public static final int EXIT = 0;.. 23 MenuItem createmenuitem(string label, char shortcut, final int command) { 24 MenuItem item = new MenuItem(label, new MenuShortcut(shortcut)); 25 26 class MenuItemHandler implements ActionListener { 27 public void actionperformed(actionevent e) { 28 docommand(command); 29 } 30 } 31 32 item.addactionlistener(new MenuItemHandler()); 33 return item; 34 }.

5.3 무명클래스 79 무명클래스 지역클래스의개념을확장 클래스정의와사용의 2 단계를 1 단계로결합 이름을갖지않고한번만사용 예제 : DrawRecD2.java. 8 public void init() { 9 addmouselistener(new MouseAdapter() { 10 public void mousepressed(mouseevent e) { 11 startx = e.getx(); 12 starty = e.gety(); 13 } 14 15 public void mousereleased(mouseevent e) { 16 w = Math.abs(startX - e.getx()); 17 h = Math.abs(startY - e.gety()); 18 repaint(); 19 } 20 } );

5.4 자바에서중요한클래스 80 5.4.1 Object 클래스 모든자바클래스의슈퍼클래스 extends Object 를쓰지않아도자동적으로상속 Object 클래스들의메소드 protected Object clone() 객체를복사하는데사용된다. public boolean equals(object obj) 두객체의내용이동일한지알아볼때사용되는메소드 public int hashcode() 객체를위한해쉬코드를리턴 해쉬코드는자바시스템에서객체를유일하게식별하는정수값

5.4 자바에서중요한클래스 81 데이터타입클래스

5.4. 자바에서중요한클래스 82 Boolean 클래스 Boolean 클래스는 boolean 기본타입을표현하기위한클래스 Boolean(boolean value), Boolean(String s) 두형태의생성자를가짐 두번째생성자의아규먼트 s는 "true" 문자열과동일하면 true 값을갖고, 다른경우에는 false 값을갖는다. Boolean 클래스로부터기본타입 boolean 값을얻기위해서는 booleanvalue() 메소드를이용

5.4. 자바에서중요한클래스 83 Byte 클래스 byte 기본자료타입을표현하기위해 JDK 1.1 이후에제공되는클래스 Byte(byte value), Byte(String s) 두형태의생성자를갖는다두번째생성자의아규먼트는문자열을 10진수의바이트값로변환하면서문자열의포맷이틀린경우에는 NumberFormatException 예외가발생 메소드 public static byte parsebyte(string s) 문자열을 byte 값으로변환하는메소드 public static byte parsebyte(string s, int radix) 문자열을 radix 에따라 10 진수, 2 진수등의 byte 값으로변환하는메소드 public byte bytevalue() 10 진수 byte 값을리턴하는메소드

5.4. 자바에서중요한클래스 84 Character 클래스 Character(char value) 형태의생성자를이용해서 char 기본타입을 나타내기위한클래스로사용 메소드 public char charvalue() public static boolean islowercase(char ch) public static boolean isuppercase(char ch) public static boolean isdigit(char ch) public static boolean isletter(char ch) public static boolean isletterordigit(char ch) public static char tolowercase(char ch) public static char touppercase(char ch) public static boolean iswhitespace(char ch)

5.4. 자바에서중요한클래스 85 Double 클래스 Double 클래스는 double 기본자료형을클래스로표현하기위해만들어진클래스로 Double(double value), Double(String s) 두형태의생성자 멤버필드 public static final double MAX_VALUE - double 형이갖을수있는최대값 public static final double MIN_VALUE - double 형이갖을수있는최소값 public static final double NaN - double 형에서숫자가아님을표현하기위해사용되는값 public static final double NEGATIVE_INFINITY - double 형의음의무한대값 public static final double POSITIVE_INFINITY - double 형의양의무한대값 메소드 public static boolean isnan(double v) - double 형이의미있는숫자가아닌지여부를알아보는메소드 public static boolean isinfinite(double v) public boolean isnan() - 의미있는숫자가아닌지여부를알아보는메소드

5.4. 자바에서중요한클래스 86 Double 클래스의값을각기본자료형의값으로변경하는데 사용되는메소드 public byte bytevalue() public short shortvalue() public int public long public float public double intvalue() longvalue() floatvalue() doublevalue()

5.4. 자바에서중요한클래스 87 Float 클래스 float 기본자료형을클래스로표현하기위해사용되는클래스 생성자 public Float(float value) public Float(double value) public Float(String s) 멤버필드 public static final float MAX_VALUE public static final float MIN_VALUE public static final float NaN public static final float NEGATIVE_INFINITY public static final float POSITIVE_INFINITY

5.4. 자바에서중요한클래스 88 메소드 public static boolean isnan(float v) public static boolean isinfinite(float v) public boolean isnan() Float 클래스의값을각기본자료형의값으로변환하는메소드 public byte bytevalue() public short shortvalue() public int intvalue() public long longvalue() public float floatvalue() public double doublevalue()

5.4. 자바에서중요한클래스 89 Integer 클래스 int 기본자료형을표현하기위한클래스 Integer 클래스는 Integer(int value), Integer(String s) 두개의생성자 멤버필드 public static final int MAX_VALUE public static final int MIN_VALUE 메소드 public static int parseint(string s) - 문자열을 10 진수의정수로변환 public static int parseint(string s, int radix) public byte public short public int public long public float public double bytevalue() shortvalue() intvalue() longvalue() floatvalue() doublevalue() - 문자열을 radix 로기술한진법의정수로변환

5.4. 자바에서중요한클래스 90 Short 클래스 short 기본자료형을표현하기위한클래스 Short 클래스는 Short(short value), Short(String s) 두개의생성자 멤버필드 public static final short MAX_VALUE public static final short MIN_VALUE 메소드 public static int parseshort(string s) public static int parseshort(string s, int radix) public byte bytevalue() public short shortvalue() public int intvalue() public long longvalue() public float floatvalue() public double doublevalue()

5.4. 자바에서중요한클래스 91 Math 클래스 수학함수와이에필요한상수들로구성 Math 클래스의모든메소드들은 static으로정의되어있기때문에프로그램내에서 Math 클래스의인스턴스를만들지않고 Math.method_name() 형태로메소드를호출해서사용할수있다. 멤버필드 public static final double E - 2.7182... public static final double PI - 3.14159...

5.4. 자바에서중요한클래스 92 멤버필드 public static type abs(type value) - 아규먼트 value 의절대값을리턴한다. public static type max(type a, type b) - a 와 b 중에서큰값을리턴한다. public static type min(type a, type b) - a 와 b 중에서작은값을리턴한다. public static double log(double a) - 자연로그 lna 값을리턴한다. public static double pow(double a, double b) -ab값을리턴한다. public static double sin(double a) - sin(a) 값을리턴한다. a는라디안값이다. public static double sqrt(double a) - a의제곱근값을리턴한다. public static double random() - 0.0 ~ 1.0 사이의임의의값을리턴한다.

5.4. 자바에서중요한클래스 93 예제 : MathDemo.java 1 public class MathDemo { 2 public static void main(string args[]) { 3 int a, b; 4 if(args.length == 0) { 5 a = 2; 6 b = 3; 7 } else { 8 a = Integer.parseInt(args[0]); 9 b = Integer.parseInt(args[1]); 10 } 11 System.out.println("pow("+a + ", "+b+") =>" + Math.pow(a,b)); 12 } 13 } 결과 % java MathDemo 4 5 pow(4, 5) =>1024.0

5.4. 자바에서중요한클래스 94 String 클래스 문자열을나타내기위해사용 생성자 public String() public String(String value) public String(char[] value) public String(char[] value, int offset, int count) public String(bytes[] value)

5.4. 자바에서중요한클래스 95 메소드 public char charat(int index) public boolean endswith(string suffix) public int indexof(char ch) public int lastindexof(char ch) public int length(char ch) public String replace(char old, char new) public String substring(int beginindex) public String substring(int beginindex, int endindex) public String tolowercase() public String touppercase() public String trim()

5.4. 자바에서중요한클래스 96 예제 : StringDemo.java 1 public class StringDemo { 2 public static void main(string args[]) { 3 String msg = "How are you?"; 4 String greeting = new String(msg); 5 6 if(msg == greeting) { 7 System.out.println("msg == greeting"); 8 }else if(msg.equals(greeting)) { 9 System.out.println("msg equals greeting"); 10 } 11 System.out.println("original msg: " + msg); 12 msg = msg.replace(' ',''); 13 System.out.println("changed msg: " + msg); 14 } 15 }

5.4. 자바에서중요한클래스 97 Vector 클래스 Vector 는크기가동적인배열로볼수있다. java.util 패키지에속해있다. 생성자 public Vector() - 빈벡터를생성한다. public Vector(int initialcapacity) - 초기벡터의크기를 initialcapacity 로만든다. public Vector(int initialcapacity, int capacityincrement) - 초기벡터의크기를 initialcapacity 로만들고, 부족할때마다 capacityincrement 만큼씩벡터크기가증가

5.4. 자바에서중요한클래스 98 메소드 public void add(int index, Object element) - element를 index 위치에추가 public void addelement(object element) - element를맨끝위치에추가 public void remove(int index) - index 위치의 element를삭제 public void removeelement(object element) - 벡터에서처음매칭되는 element를삭제 public Object elementat(int index) - index 번째의 element를리턴 public int size() - 현재벡터에있는 element의개수를리턴

5.4. 자바에서중요한클래스 99 예제 : VectorDemo.java 1 import java.util.*; 2 3 public class VectorDemo { 4 public static void main(string args[]) { 5 Vector vector = new Vector(2,2); 6 String str = "hello"; 7 char c = 'c'; 8 char carray[] = {'h', 'e', 'l', 'l', 'o }; 9 int i = 10; 10 11 vector.addelement(str); 12 vector.addelement(new Character(c)); 13 vector.addelement(carray); 14 vector.addelement(new Integer(i)); 15 16 print(vector); 17 }...

5.4. 자바에서중요한클래스 100 StringTokenizer 클래스 문자열을개별적인토큰으로분리하는방법을제공 생성자 public StringTokenizer(String str) - 문자열 str 을기본적인구별자 ("") 만을 이용해서토큰을구별하기위한생성자 public StringTokenizer(String str, String delim) - 문자열 str을구별자 (delim) 를이용해서토큰을구별하기위한생성자 public StringTokenizer(String str, String delim, boolean returntoken) -문자열 str을구별자 (delim) 를이용해서토큰을구별하고, 구별자를토큰과마찬가지고 nexttoken() 메소드에서리턴할것인지 메소드 여부를 returntoken 값으로기술하는생성자 public boolean hasmoretokens() - 토큰이더이상있는지여부를알아본다. public String nexttoken() - 다음토큰을리턴 public String nexttoken(string delim) - 새로운구별자 (delim) 를이용해서다음토큰을리턴 public int counttokens() - 토큰의개수를리턴

5.4 자바에서중요한클래스 101 예제 : StringToken.java 1 import java.util.*; 2 3 public class StringToken { 4 public static void main(string args[]) { 5 String url; 6 if(args.length == 0) 7 url = "http://mycom.soongsil.ac.kr/~jmchoi/"; 8 else 9 url = args[0]; 10 StringTokenizer st = new StringTokenizer(url, ":/.~", false); 11 while(st.hasmoretokens()) { 12 String token = st.nexttoken(); 13 System.out.println("token => " + token);..

6.1 자바의예외처리 102 실세계의예외처리 이부장 void c( ) { try { 박과장.b( );... 작업중단 } catch (Exception e){... } } 3 박과장 void b( ) throws Exception { 김대리.a( );... 작업중단 } 2 김대리 void a( ) throws Exception { 돌발상황발생 1 } 작업중단

6.1 자바의예외처리 103 예외처리 간단한에러 ( 예외 ) 가발생하였을때, 이오류를바로잡아서계속수행할수있도록오류를처리 예외혹은예외상황 - 심각하지않은에러 C 언어에서예외처리 방법 보통시그날처리루틴이나, 함수의리턴값으로 일반함수나시스템콜은음수값을혹은 0을리턴 필요할경우 errno에값을할당해서에러의타입을알리기도함

6.1 자바의예외처리 104 자바에서예외처리 처리과정 1. 예외 (Exception) 클래스를정의 2. 예외가발생할수있는함수 a() 에서예외가발생할조건을만족하면, Exception 클래스를 throw throw new 예외클래스생성자 () 문장을사용 3. a ( ) 함수를호출하는곳에서는 try-catch 문장을이용해서예외가발생하는경우에문제점을해결 예외클래스종류 자바에서예외 (Exception) 는클래스로표현 모든예외타입 (exception type) 은 Throwable 클래스나이것의서브클래스로부터상속 checked exception 메소드가선언한예외를 throw 하는지를컴파일러가체크 try-catch 문을사용해야한다. unchecked exception RuntimeException 이나 Error 로부터상속받는표준런타임예외와에러 try-catch 문을사용하지않아도컴파일시에에러가발생하지않음 예외타입은클래스이기때문에생성자, 멤버필드, 메소드등을가질수있다.

6.1 자바의예외처리 105 throws checked exception을메소드이름뒤에선언 public int dosomething(int x) throws Exception1, Exception2 { } throw 예외는 throw문장을이용해서발생시킨다 throw new Exception1(); throws를혼동하기쉬움 try-catch-finally 예외가발생할수있는문장들을 try문블락에기술한다. 수행도중에예외가발생하면 catch 문으로제어가넘어간다. catch 문은여러개가존재할수있다. finally문은예외발생여부에관계없이항상수행된다.

6.1 자바의예외처리 106 1. 예외가발생될가능성이있는 method 을판단한다. 2. 발생될예외를처리할 Class 를정의한다. 예 Class BoE exception Exception { } 3. Try-and-Catch 위의예외가발생할부분에 Try-and-Catch 를선언한다예 try { } catch (BoE) {... } 4. Throws 예외가발생할가능성이있는 method에대하여위에서정의한 Class 에대한예외를선언한다. 예 method_name () throws BoE {... } 5. Throw 예외가발생될메소드내에서예외발생조건을 check 하여, 예외가발생되면해당예외 Class 를실행한다 throw new BoE();

예외처리 107 JDK 에서제공되는예외 Exception 클래스상속관계

6.1 자바의예외처리 108 예외관련클래스들 Checked Exception Unchecked Exception

6.1 자바의예외처리 109 1. 예외클래스만들기 Exception 클래스를상속받아야한다. 1 public class BalanceOutOfBoundsException extends Exception { 2 public BalanceOutOfBoundsException() { 3 super(" 잔액을초과하였습니다."); 4 } 5 } 1 public class MalformedData extends RuntimeException { 2 public MalformedData() { 3 super(" 데이터포맷이잘못되었습니다."); 4 } 5 }

6.1 자바의예외처리 110 2. 예외가발생할수있는메소드정의하기 1 public class Account { 2 private long balance; 3 private String name; 4 5 public Account(String name) { 6 this.name = name; 7 } 8 9 public void deposit(int amount) throws MalformedData { 10 if(amount <= 0) { 11 throw new MalformedData(); 12 } 13 balance = balance + amount; 14 } 15 16 public void withdraw(int amount) 17 throws BalanceOutOfBoundsException, MalformedData { 18 if(amount <= 0) { 19 throw new MalformedData(); 20 } 21 22 if( balance < amount) { 23 throw new BalanceOutOfBoundsException(); 24 } 25 }

6.1 자바의예외처리 111 3. try-catch로예외잡기 3 Account hong = new Account(" 홍길동 "); 4 hong.deposit(10000); 5 // hong.deposit(-100); // MalformedData 예외발생 6 try { 7 hong.withdraw(5000); 8 // hong.withdraw(-50); // MalformedData 예외발생 9 } catch (BalanceOutOfBoundsException be) { 10 be.printstacktrace(); 11 } catch (MalformedData me) { 12 me.printstacktrace(); 13 } 14 hong.check();

예외처리 112 JDK에서제공되는예외클래스들의예 ArithmeticException 0으로나누는경우에주로발생하는예외상황 ArithmeticException 은 RuntimeException 으로부터상속받은예외클래스 ArrayIndexOutofBoundsException 배열의크기보다큰원소를접근하려고할때발생되는예외 NegativeArraySizeException 배열의크기가음수로된경우에발생하는예외 NullPointerException 생성되지않은객체를이용해서객체의멤버를접근하는경우에 발생하는예외