No Slide Title

Similar documents
Microsoft PowerPoint 장.객체의이용.ppt

PowerPoint Presentation

PowerPoint Presentation

PowerPoint Presentation

PowerPoint Presentation

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

No Slide Title

PowerPoint Presentation

JAVA PROGRAMMING 실습 05. 객체의 활용

Microsoft PowerPoint 장강의노트.ppt

JAVA PROGRAMMING 실습 08.다형성

쉽게 풀어쓴 C 프로그래밍

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

No Slide Title

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - Lect04.pptx

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

PowerPoint 프레젠테이션

Design Issues

JAVA PROGRAMMING 실습 05. 객체의 활용

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

객체 Key Point 객체는그객체의특성을나타내는상태 (state) 와그객체의행동 (behaviors) 으로이루어진다. 좌표상의점 n 상태 : x 좌표값, y 좌표값 n 행동 : 점의이동 주사위 n 상태 : 표면값 n 행동 : 주사위굴리기 은행계좌 n 상태 : 예금주,

JAVA PROGRAMMING 실습 02. 표준 입출력

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

PowerPoint Presentation

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

쉽게 풀어쓴 C 프로그래밍

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µå

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint - 2강

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - chap06-2pointer.ppt

C# Programming Guide - Types

JAVA PROGRAMMING 실습 02. 표준 입출력

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

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

PowerPoint Presentation

Microsoft PowerPoint - C++ 5 .pptx

JAVA PROGRAMMING 실습 09. 예외처리

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

11장 포인터

PowerPoint 프레젠테이션

PowerPoint Presentation

쉽게

PowerPoint 프레젠테이션

Microsoft PowerPoint - Java7.pptx

쉽게 풀어쓴 C 프로그래밍

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

슬라이드 1

TEST BANK & SOLUTION

PowerPoint 프레젠테이션

4장.문장

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

PowerPoint Presentation

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap10-함수의활용.pptx

PowerPoint Presentation

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - 04-UDP Programming.ppt

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

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

슬라이드 1

02 C h a p t e r Java

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

C++ Programming

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

설계란 무엇인가?

Microsoft PowerPoint - chap03-변수와데이터형.pptx

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

제11장 프로세스와 쓰레드

PowerPoint Presentation

Network Programming

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

01-OOPConcepts(2).PDF

Microsoft PowerPoint - lec2.ppt

JUNIT 실습및발표

untitled

PowerPoint Presentation

Microsoft PowerPoint - Chapter 6.ppt

JVM 메모리구조

05-class.key

Java ...

예제 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

Microsoft PowerPoint - java1 [호환 모드]

Microsoft PowerPoint - Chap12-OOP.ppt

PowerPoint Template

Microsoft PowerPoint - chap06-5 [호환 모드]

비긴쿡-자바 00앞부속

쉽게 풀어쓴 C 프로그래밍

설계란 무엇인가?

adfasdfasfdasfasfadf

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

chap 5: Trees

Transcription:

객체의이용 이충기 명지대학교컴퓨터공학과

들어가며 Q: 어떤집의설계도에따라집을서울, 용인과강릉에짓는다면이집들을어떻게구별할까? A: 2

객체와참조 실세계의한대상을모델한클래스를이용하기위해서는객체를생성해야한다. 한클래스로부터여러개의객체들을생성할수있다. 이객체들을서로구별하기위해객체를가리키는참조형변수를사용한다. 참조는가리키는객체의주소이다. 3

객체와참조 Account 클래스를이용하기위해서우리는먼저객체를가리키는변수를선언했다. 예 : Account acct; - Account 클래스의객체를만들지않는다. - Account 클래스의객체를가리킬수있는 acct라는참조변수 ( 혹은지시자 ) 를선언한다. - 이참조변수는 Account 객체에대한지시자이나초기값으로 null이라는기본값을가진다. 따라서아무것도가리키지않는다. 4

객체와참조 acct 가 null 이아닌값을가지게하기위해서 Account 객체를만들필요가있다. 예를들면, acct = new Account( ); acct Account 클래스의한객체 자바가 new 라는 keyword 를만날때새로운객체가만들어지며그객체를위해메모리안에공간을할당한다. 위문의실행결과 acct 는위그림과같이 Account 클래스의한객체를가리킨다. 그객체는 Account 클래스에서정의된모든변수들과메소드들을가진다. 각변수는고유한사본 (copy) 을가진다. 메소드들은그클래스의모든객체들사이에공유된다. 5

객체와참조 자세한내용 : acct ( 클래스 Account 의객체에대한참조 ) 데이터영역 : int ownername; int balance; 데이터에적용되는메소드들 : public void setownername(string name) public int getownername( ) public void setbalance(int amount) public int getbalance( ) public void deposit( )... 6

객체와참조 Account acct1 = new Account(); Account acct2 = new Account(); Account acct3 = new Account(); 우리가 Account 객체를만들때마다우리는각객체변수의고유한사본을얻는다. 이는 OOP 의가장강력한면중의하나이다! 데이터영역 : int ownername; int balance; acct3 acct1 데이터영역 : int ownername; int balance; 데이터에적용되는메소드들 : public void setownername(string name) public int getownername( ) public void deposit( )... acct2 데이터에적용되는메소드들 : 데이터영역 public : void setownername(string name) int ownername; public int getownername( ) int balance; public void deposit( )... 데이터에적용되는메소드들 : public void setownername(string name) public int getownername( ) public void deposit( )... 7

참조대지시자 자바에는지시자가없다고한다. 실제로자바의변수는거의대부분이지시자이다. 모든기본형이아닌데이터는객체여야한다. 모든객체는참조를통해서접근하는동적데이터이다. 참조는사실상함축적인지시자이다. 자바는명확한지시자를가지지않는다 : 지시자를명백하게다루는방법이없다. 다시말해지시자연산 (pointer arithmetic) 이가능하지않다. 지시자에대해모른다면지시자는마술이다. 지시자에대해이해한다면참조가실제로무엇인지안다! 8

객체와참조 기본형변수와참조형변수를구분해야한다 : Code: Memory: int a;? int b;?? a = 5; 5? b = a; 5 5 a b 9

객체와참조 Code: Memory: Account acct1; Account acct2; acct1 acct2 acct1 = new Account( A,10); acct1 ON= A, B=10 acct2 acct2 = acct1; // 주 : 두개의참조들이 // 한객체를가리킨다 acct1 = new Account( B,20); acct1 = acct2; // 이전참조는쓰레기가된다! acct1 acct2 acct1 acct2 acct1 acct2 ON= A, B=10 ON= B, B=20 ON= A, B=10 ON= B, B=20 ON= A, B=10 10

객체와참조 기본형에서동등의의미 : int Tigers; int Lions; Tigers = 9; Lions = 7; Tigers Lions 9 7 System.out.println(Tigers = = 9); System.out.println(Lions = = 7); System.out.println(Tigers = = Lions); Tigers // true를출력한다 // true를출력한다 // false를출력한다 Lions Tigers = Lions; 7 7 System.out.println(Tigers = = 7); // true를출력한다 System.out.println(Lions = = 7); // true를출력한다 System.out.println(Tigers = = Lions); // true를출력한다 System.out.println(Tigers > Lions); // false를출력한다 (!) 11

객체와참조 객체에대한참조에서동등의의미 : Account acct1 = new Account( A, 10); Account acct2 = new Account( A, 10); System.out.println(acct1 = = acct2); // false를출력한다 // acct1 은 acct2가가리키는같은객체를가리키는가? System.out.println(acct1.equals(acct2)); // true를출력한다 // acct1은 acct2가참조하는객체와같은내용을가지는객체를참조하는가? acct1 ON= A, B=10 acct2 ON= A, B=10 == 는두개의참조가메모리내의같은곳을가리키는지를비교한다!.equals( ) 는객체들이같은내용을가지고있는지를비교한다! 12

객체와참조 객체에대한참조에서동등의의미 : 두가지의다른논리적검사가가능하다 : 1. = = ( 동등 ) 연산자 기본형에도적용 두개의참조가같은객체를가리키는지를알아본다. 2. equals( ) 메소드 객체에만적용 한객체의내용이다른객체의내용과같은지를알아본다. Object 라는클래스에이미만들어져있는특별한메소드로서모든클래스에서사용가능하다. 실제로특정클래스에서객체들을비교할수있도록 equals() 메소드를재정의할수있다. 여러분은모든데이터클래스에서이메소드를정의해야한다. 그렇지않으면동등연산자를이용한비교에매이게될수있다. 13

메소드다중정의 한클래스내에같은이름을가지는메소드를여러개정의하는것을메소드다중정의 (method overloading) 라고부른다. 다중화된메소드들은다음조건중의하나를만족시켜야한다 : - 형식매개변수들의수가다르다. - 형식매개변수들의수가같을때는형식매개변수들중적어도하나의데이터형이다르다. 예 : public void amethod(int x, int y) {... public void amethod(int x) {... 다음메소드호출은첫번째메소드에대응된다 : amethod(10, 20); 14

생성자메소드다중정의 클래스는하나이상의생성자메소드를가질수있다. 이경우에각생성자메소드는고유한형식매개변수의목록을가져야만한다. 생성자메소드호출시적어도하나의생성자메소드에대응되어야한다. 다음이주어지면 : public String ( ) public String (String value) 우리는다음과같이할수있다 : String Input1 = new String (); String Input2 = new String ( Year 2000 ); 그러면 Input1 은 라는값을갖는빈문자열을가리킨다. Input2 는 Year 2000 라는값을갖는문자열을가리킨다. 15

예 : 생성자메소드 class Person { String Name; int Age; public Person (String NewName){ setname (NewName); public Person (String NewName, int NewAge) { setname (NewName); setage (NewAge); 생성자메소드가변경자메소드를호출한다는것에유의하라. public void setname (String NewName){ Name = newname; public void setage (int NewAge) { Age = NewAge: 16

생성자메소드 Person 클래스가만들어진후다음과같은 Person 객체를만들수있다 : Person p1 = new Person ( 이도령 ); Person p2 = new Person ( 성춘향, 18); 두개의생성자메소드중어느것인가는실제매개변수의수와유형이결정한다. 그래서우리는다음과같이할수없다 : public Person (String NewFirstName) {... public Person (String NewLastName) {... 질문 : 이유는? 17

기본생성자메소드 우리가생성자메소드를정의하지않는다면기본생성자메소드 (default constructor) 가자동적으로호출될것이다. 기본생성자메소드는어떠한매개변수도가지지않고아무일도하지않는다. Person 클래스의기본생성자메소드는다음과같다 : public Person ( ) { 대신에새로운기본생성자메소드를정의하여사용할수있다. 기본생성자메소드는객체변수들의값을표준자바의기본값들로초기화한다. 즉, 숫자형변수들은 0 으로논리형 (boolean) 변수들은 false 로참조형변수들은 null 로초기화한다. 18

자바매개변수 자바는두가지종류의매개변수 (parameter) 를제공한다 : 값에의한넘김 (pass-by-value): 기본형값들을넘겨준다 참조값에의한넘김 (pass-by-constant-reference): 객체가가리키는참조값을넘겨준다 컴파일러가어느것을넘겨줄지를선택한다. 자바에서는여러분이넘겨주는방법을선택할수없다. 19

자바매개변수 값에의한넘김 : 한값이호출된메소드로넘어간다. 호출된메소드가원래값의한사본을얻는다. 참조값에의한넘김 : 호출이이루어질때객체를참조하는현재값이넘어간다. 호출된메소드가그값을읽을수는있으나변경할수는없다. 그값의일시적인사본만이변경될수있다 기술적으로미묘한차이가있으나실제적으로는차이가없다. 20

자바매개변수 public void exchange(int One, int Two) { System.out.println (One, +,, + Two); // line a int Temp = One; One = Two; Two = Temp; System.out.println (One, +,, + Two); // line b // of swap 그러면다음코드부분을수행하면 : int This = 5; int That = 6; System.out.println(This, +,, + That); exchange(this, That); System.out.println(This, +,, + That); 아래와같은결과를얻는다 : // line c // line d 5, 6 ( from line c ) 5, 6 ( from line a of exchange) 6, 5 ( from line b of exchange) 5, 6 ( from line d ) 21

자바매개변수 public void test (String Input) { System.out.println (Input); // line a Input = new string ; System.out.println (Input); // line b // of test 그러면다음코드부분을수행하면 : String Temp = original string ; System.out.println(Temp); // line c test(temp); System.out.println(Temp); // line d 아래와같은결과를얻는다 : original string ( from line c ) original string ( from line a of test) new string ( from line b of test) original string ( from line d ) 22

자바매개변수 값만이호출된메소드로넘어간다면우리가할일은?!? 지향을생각하라! 객체 데이터와메소드가캡슐화되어있다. 즉, 우리는객체에속하는데이터를읽거나변경하기위해객체의해당메소드를호출한다. 클래스내에서데이터는매개변수를거치지않고메소드에접근가능하다. 외부에서의접근은객체에게메소드를통해해달라고요청함으로써이루어진다 : 접근자 ( get ) 메소드 : 값을되돌려주는함수 변경자 ( set ) 메소드 : 데이터상태를바꿔주는프로시져 객체밖에서는메소드를통해접근한다. 23

자바매개변수 자바매개변수는입력데이터를제공하기위해사용되는메소드의일부로서선언된다. 따라서매개변수는메소드의지역변수로간주된다. 이는매개변수가메소드가호출될때자동적으로만들어진다는것을의미한다. 메소드가종료될때매개변수는자동적으로없어진다. 보통지역변수와는달리객체를만들거나초기화를할필요가없다. 왜냐하면실제매개변수의값이메소드로넘어올때이러한일들이처리되기때문이다. 24

객체대클래스선언 변수는객체변수 (instance variable) 와클래스변수 (class variable) 로나뉜다. 메소드도객체메소드 (instance method) 와클래스메소드 (class method) 로나뉜다. 객체변수나메소드는한클래스의객체에속한다. 클래스변수나클래스메소드는클래스에속한다. static 이라는키워드가클래스변수혹은클래스메소드를나타낸다. 이키워드가없으면객체변수나객체메소드를나타낸다. 25

객체대클래스변수 우리가생성된객체들의총수를알고싶다고가정하자. 다음을고려하라 : class Human { String Name; int Population = 0; public Human (String Name) { this.name = Name; Population++; // 틀림! 각객체에대해 Name 이라는변수를선언한다. 따라서, 각 Human 객체는자신의이름을가진다. 그러나... Human 의각객체에대해 Population 이라는계수기를선언한다. 따라서, 각 Human 객체는 1 의값을가지는자신의 Population 이라는변수를가진다. 이는적절하지않다! 26

객체대클래스변수 class Human { String Name; static int Population = 0; public Human (String Name) { this.name = Name; Population++; 각객체에대해 Name 이라는변수를선언한다. 따라서, 각 Human 객체는자신의이름을가진다. 추가 주 : 각 Human 객체는 Population 이라는계수기를가지지않는다. 클래스변수인 Human 클래스에대한 Population 이라는계수기를정의한다. 따라서, 각 Human 객체는이공유하는계수기를하나만큼증가시킬것이다. 27

객체대클래스변수 각객체가자신의변수를가져야만할때객체변수를사용하라. 예 : 특정객체의속성들 클래스자체가모든객체들에관한데이터의한사본을유지해야할때클래스변수를사용한다. 예 : 인구세기, 요약데이터, 순번부여, 공유자원 28

객체대클래스변수 상수 : class ConstantExample { final int MAXSIZE = 10; 각객체마다다르나사실상같은상수를선언한다. 이는이득이없는낭비다. class ConstantExample { static final int MAXSIZE = 10; 클래스의모든객체들에의해사용되는한공용상수를선언한다. 29

변수의범위 (Scope) 지역 (local) 변수 ( 메소드의일부로서선언된 ): 메소드안에서만볼수있다. 메소드밖에서는지역변수는아무런의미가없다. 객체변수와클래스변수 ( 클래스의일부로선언된 ): 객체에서는어디서든지볼수있다. 이는클래스내에서정의된메소드안에서매개변수로값을넘겨주지않고도변수값을볼수있다는것을의미한다. 그범위를넘어서는값을볼수도있고볼수없을수도있다. 메소드내에서지역변수명이객체변수명보다우선순위가높다. 30

메소드호출 메소드는객체혹은클래스를대상으로호출되어야한다. 또한그메소드가어느객체혹은어느클래스에적용되어야하는지분명해야한다. 어떤메소드호출이클래스내에있다면그클래스가해당되는메소드를포함한다고가정된다. class CompanyStock { public double getamountearned ( ) { double Open = getopenvalue(); /* 이클래스내의메소드를호출한다 */ double Close = getclosevalue(); /* 이클래스내의메소드를호출한다 */... public double getopenvalue() { return 1234.5d; public double getclosevalue(){ return 2345.6d; 31

메소드호출 호출되는메소드가클래스내에정의되어있지않다면해당클래스나객체가명시되어야한다. class StockstreetJitters {... public void panicsell ( ) { BankChair chongjae = new BankChair(); if (chongjae.raiseinterest()) { buyonmargin(); else { sellallstock(); 사용구문 : < 객체참조변수 >.< 메소드이름 > 32

클래스라이브러리 클래스라이브러리 (library) 는프로그램을개발할때사용할수있는클래스들의모음이다. 자바표준클래스라이브러리는자바개발환경의일부이다. 클래스라이브러리에있는클래스들은자바언어의일부가아니다. 그러나우리는그클래스들에많이의존한다. 우리가이미사용해왔던 System, Scanner, String 과같은클래스들은자바표준클래스라이브러리의일부이다. 33

패키지 (Package) 자바표준클래스라이브러리의클래스들은패키지들로구분된다. 주요패키지들 java.lang 일반적인지원 java.applet 웹을위한애플릿들의작성 java.awt 그래픽스와그래픽사용자인터페이스 java.swing 추가적인그래픽사용자인터페이스기능들 java.net 네트워크통신 java.util 일반적인유틸리티 java.io 입출력지원 34

import 선언 한패키지에있는클래스들을사용하기위해서우리는완전한클래스이름을쓰거나 import 선언문을사용해야한다. 예 : import java.util.scanner; import java.util.*; 35

문자열과객체 모든문자열은자바의이미정의된 String 클래스의한실례이다. 따라서, 문자열은객체이다. 자바는문자열이자주사용되기때문에사용편의를위해추가적지원을한다. 36

문자열과객체 자바는쌍따옴표안에있는텍스트를만날때마다자동적으로새로운문자열객체를만든다. 따라서다음코드는다음과같은세가지일을한다 : String str1 = Hello World ; 1. str1 이한문자열객체를가리킬수있는참조변수를선언한다. 2. 한문자열객체를만든다. 3. 그객체의값을 Hello World 로초기화한다. 이는자바가표준객체들을다루는방법과일치하지않는다. 표준객체의경우에는, 우리는명확하게 1. new 를통해객체를만들고, 2. 생성자메소드를통해초기화한다. 37

문자열과객체 Code: String str1; Account acct1; str1 = Hello World ; acct1 = A, 10; Memory: str1 acct1 str1 Hello World acct1 오류 : new 와생성자메소드를사용해야한다 str1 = Hello World ; acct1 = new Account( A, 10); str2 = new String(); str2 str1 Hello World acct1 ON= A, B=10?default? str2 = Test String ; str2?default? Test String 38

문자열지원기능들 1. 문자열객체를명백하게만들필요가없다. 2. 문자열들을하나로합치는것을지원하기위해 + 연산자가사용된다. 예를들면, System.out.println( Test + String ); 3. String 클래스에이미정의된메소드들이많이있다 : length( ) // 문자열의크기를되돌려준다 charat(index) // (index + 1) 번째위치에있는문자를되돌려준다. // 첫번째문자의지수는 0이다. substring(startindex) // (Startindex + 1) 번째위치에있는문자부터 // 끝문자까지의부분문자열을되돌려준다 substring(startindex, EndIndex) // (Startindex + 1) 번째위치에있는 // 문자부터 (Endindex - 1) 번째위치바로전에있는문자까지의 // 부분문자열을되돌려준다계속 39

예 : 문자열지원기능 String Example = Hello ; 0 1 2 3 4 H e l l o char c = Example.charAt(1); // c 의값은 e 이다 String substr1 = Example.substring(1); // substr1의값은 ello 이다 String substr2 = Example.substring(0, 4); // substr2 의값은 Hell 이다 40

문자열과객체 우리는문자열객체의내용을변경시킬수없다 ( 문자열은불변이다 (immutable) ). 여러분은한문자열을수정하고있다고생각할지모른다. 그러나메모리에서실제로일어나는일은 : * 새로운문자열이생성된다 * 전문자열은수거될지모른다 ; 더이상그문자열을가리키는참조변수가없다 예를들면 : String str1 = Hello World str1 = str1.substring(4) str1 str1 Hello World Hello World o World 선택사항 : 이러한제한을극복하기위해서 StringBuffer 라는클래스를보아라. 41

Random 클래스 Random 클래스는 java.util 패키지의일부로서의사난수들을생성하는메소드들을제공한다. 주요메소드들 nextint(int num) : 0 과 num - 1 사이에있는난수를되돌려준다. nextfloat() : 0.0 과 1.0( 포함안함 ) 사이에있는난수를되돌려준다. 42

예제프로그램 1: 주사위던지기모의실험 import java.util.random; public class SimulateDie { public static void main(string[] args) { Random generator = new Random(); int i, randomnumber; for (i = 1; i <= 5; i++) { randomnumber = generator.nextint(6)+1; System.out.println(i + 번째난수는 + randomnumber + 이다. ); 43

Math 클래스 Math 클래스는 java.lang 패키지의일부이다. Math 클래스는많은기본적인수학함수들을수행하는메소드들을포함한다. 주요메소드들 : abs(int num) : num 의절대값을되돌려준다 sin(double angle) : angle 의 sin 값을되돌려준다 sqrt(double num) : num 의제곱근값을되돌려준다 44

Math 클래스 모든메소드들은클래스메소드이다. 클래스이름을이용하여메소드를호출할수있다. 예 : c = Math.sqrt(a * a + b * b); 45

예제프로그램 2: 직각삼각형빗변계산 import java.util.scanner; public class CalHypotenuse { public static void main (String[]args) { double a, b, c; Scanner scan = new Scanner (System.in); System.out.print( 밑변의길이를입력하세요 : ); a = scan.nextdouble(); System.out.print( 높이의길이를입력하세요 : ); b = scan.nextdouble(); // 빗변의길이를구한다 c = Math.sqrt(a * a + b * b); System.out.println( 빗변의길이는 " + c + 이다. ); 46

포장자클래스 포장자 (wrapper) 클래스는특정기본형값을나타내는클래스이다. 기본형 byte short int long float double char boolean 포장자클래스 Byte Short Integer Long Float Double Character Boolean 47

포장자클래스 다음은정수 40 을객체로서나타내는 Integer 객체를생성한다 : Integer age = new Integer(40); 이객체는프로그램에서객체가필요한곳에서사용될수있다. Integer 클래스는한 String 객체에저장된정수값을대응하는 int 값으로변환하는 parseint 라는클래스메소드를포함한다. 예 : int num = Integer.parseInt( 123 ); 48

Autoboxing 과 Unboxing Autoboxing 은기본형값과대응하는포장자객체사이의자동변환이다. Integer obj1; int num1 = 12; obj1 = num1; // 자동적으로 Integer 객체를생성 반대과정인 unboxing 은역시필요할때자동적으로일어난다. Integer obj2 = new Integer(12); int num2; num2 = obj2; 49

요약 객체와참조 문자열과객체 매개변수 객체와클래스선언 메소드호출 기존클래스사용 포장자클래스 50