50
1 KUMHO SOFTWARE DEVELOPMENT 6.1 클클클클 클클 클클 6.2 클클클 클클 6.3 클클클 클클 6.4 클클 클클 6.5 클클클클 클클 클클클 6.6 클클클 클클 클클 6.7 클클클 (Constructor) 6.8 클클클 클클클클 (overloading) 6.9 클클클 this 6.10 클클클 6.11 클클클 클클클클 (overloading) 6.12 클클클클 클 클클 클클 (argument passing) 6.13 finalize 클클클클 클클클 클클 (garbage collection) 6. 클클클

6.1 클래스의 일반 구조 6.2 클래스 선언 6.3 객체의 생성 6.4 멤버 변수 6.5 멤버변수 접근 한정자 6.6 변수의 유효 범위

  • Upload
    atara

  • View
    65

  • Download
    7

Embed Size (px)

DESCRIPTION

6 . 클래스. 6.9 예약어 this 6.10 메소드 6.11 메소드 오버로딩 ( overloading) 6.12 메소드에 값 전달 방법 ( argument passing) 6.13 finalize 메소드와 쓰레기 수집 ( garbage collection). 6.1 클래스의 일반 구조 6.2 클래스 선언 6.3 객체의 생성 6.4 멤버 변수 6.5 멤버변수 접근 한정자 6.6 변수의 유효 범위 - PowerPoint PPT Presentation

Citation preview

Page 1: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

1KUMHO SOFTWARE DEVELOPMENT

6.1 클래스의 일반 구조

6.2 클래스 선언

6.3 객체의 생성

6.4 멤버 변수

6.5 멤버변수 접근 한정자

6.6 변수의 유효 범위

6.7 생성자 (Constructor)6.8 생성자 오버로딩

(overloading)

6.9 예약어 this6.10 메소드6.11 메소드 오버로딩 (overloading)6.12 메소드에 값 전달 방법 (argument passing)6.13 finalize 메소드와 쓰레기 수집 (garbage collection)

6. 클래스

Page 2: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 2

클래스는 객체를 생성하는 형판

자바 프로그램은 클래스의 집합

클래스는 크게 2 개의 요소로 구성

– 객체가 가질 수 있는 데이터의 속성 ( 데이터를 포함할 수도 있음 )

– 데이터를 조작할 수 있는 메소드

6.1 클래스의 일반 구조

Page 3: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 3

클래스의 구성

클래스

클래스 헤더

메 소 드

생 성 자

멤버 변수

클래스 멤버

6.1 클래스의 일반 구조

Page 4: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 4

클래스의 일반 구조

class Class-name { // 클래스 헤더 부분

type1 varName1 = value1; typeN varNameN = valueN;

Class-name(args1) { // 생성되는 객체의 초기화 과정을 기술 ............. } Class-name(argsN) { ……… }

mtype mName1(margs1) { ……. // 메소드 기술 } mtype mNameN(margsN) {……. } }

맴버변수

생성자

메소드

6.1 클래스의 일반 구조

Page 5: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 5

클래스의 일반 구조 - 예

class SampleClass { // 클래스 헤더 부분 int a; int b; // 멤버 변수 부분 int c; public SampleClass(int x, int y, int z) { // 생성자 부분 . 이름이 클래스 명과 같다 . a = x; b = y; c = z; } public int sum() { // 메소드 부분 int d; d = a + b + c; return d; }}

6.1 클래스의 일반 구조

Page 6: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 6

[public/final/abstract] class Class-name { // 클래스 헤더 부분

......... // 클래스 멤버 부분

}

클래스 생성 시 클래스의 성격을 지정하는 한정자 사용

–public : public 은 다른 어떤 클래스에서도 이 클래스를 사용

( 클래스의 객체를 생성하는 것 ) 할 수 있음을 의미 .

한정자를 지정하지 않으면 같은 패키지 내의 클래스들만 접근 가능

–final : final 은 서브 클래스를 가질 수 없는 클래스 (7 장 )

–abstract : 추상 메소드를 가지는 추상 (abstract) 클래스를 의미 (7 장 )

6.2 클래스 선언

Page 7: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 7

클래스 선언 - 예

public class Box { int width; int height; // 데이터의 속성만 선언된 클래스

int depth;}public class Box {

int width; int height; // 데이터의 속성과 메소드를 가진 클래스

int depth; public void volume() { // 메소드

int vol; vol = width * height * depth; System.out.println("Volume is "+vol); } }

6.2 클래스 선언

Page 8: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 8

클래스 선언 - 예

class Box { int width; // 데이터의 속성과 생성자 , 메소드를 가진 클래스

int height; int depth; public void Box(int w, int h, int d) { // 생성자 , 클래스명과 이름이 같다 . width=w; height=h; depth=d; } public void volume() { // 메소드

int vol; vol = width * height * depth; System.out.println("Volume is "+vol); }}

6.2 클래스 선언

Page 9: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 9

객체의 선언

클래스명 객체 참조 변수 ;

객체의 생성객체 참 조변수 = new 클래스명 ();

객체의 선언과 생성

클래스명 객체 참조 변수 = new 클래스명 ();

6.3 객체의 생성

Page 10: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 10

객체의 생성 - 예

class Box { int width; int height; int depth;}class MyBox {............Box mybox1;Box mybox2;mybox1 = new Box(); // 또는 Box mybox1 = new Box();mybox2 = new Box(); // 또는 Box mybox2 = new Box();............}

6.3 객체의 생성

Page 11: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 11

객체의 선언과 생성

객체의 선언 : 객체의 선언은 null 값을 가진 변수만을 의미

객체의 생성 : 객체에 대한 메모리가 할당되고 변수 ( 객체 참조 변수 ) 는 객체에 대한 참조 ( 주소 ) 를가진다 .

mybox1 = new Box();

null

null

mybox1

mybox2

Box mybox1;

Box mybox2;

mybox2 = new Box();

mybox1

mybox2

WidthHeightdepth

WidthHeightdepth

6.3 객체의 생성

Page 12: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 12

멤버 변수는 클래스내의 메소드 밖에서 선언된 모든 것을 의미한다 .멤버 변수는 객체가 가질 수 있는 속성들을 나타낸다 .

멤버 변수의 구분

종단 변수

클래스 변수

객체 변수

객체 참조 변수

객체 속성 변수

멤버 변수

6.4 멤버 변수

Page 13: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 13

멤버 변수 선언

[public/private/protected] [static/final] 변수형 변수명 ;

static : 클래스 변수 , final : 종단 변수

static 과 final 이 붙지 않은 변수 : 객체 변수 ( 객체 속성 변수 또는 객체 참조 변

수 )

접근 한정자 public/private/protected ==> 다음절에서 설명

6.4 멤버 변수

Page 14: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 14

(1) 객체 변수 ( 객체 참조 변수와 객체 속성 변수 )

객체 변수 : 객체가 가질 수 있는 특성을 표현

– 객체 속성 변수 : 객체가 가질 수 있는 속성을 나타내는 값으로서 기본 자료형의

값들로 구성

– 객체 참조 변수 : 객체를 지정하는 변수 . 자바에서는 기본 자료형을 제외한 모든

요소들을 객체로 취급

– 사용자는 객체를 생성한 다음 그 객체에 접근 하기 위해서는 객체 참조 변수를

통하여 그 객체의 멤버들에 접근할 수 있다 .

6.4 멤버 변수

Page 15: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 15

(1) 객체 변수 ( 객체 참조변수와 객체 속성 변수 ) - 예

class Box { int width; // 객체 속성 변수 width int height; // 객체 속성 변수 height int depth; // 객체 속성 변수 depth}class MyBox { int vol; // 객체 속성 변수 vol Box mybox1; // 객체 참조 변수 mybox1 Box mybox2; // 객체 참조 변수 mybox2 String boxname; // 객체 참조 변수 boxname // 자바에서 문자열은 객체로 취급한다 . …………… public static void main(String args[]){ mybox1 = new Box(); mybox2 = new Box(); ............} }

6.4 멤버 변수

Page 16: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 16

(1) 객체 변수 ( 객체 참조 변수와 객체 속성 변수 ) - 변수 대입의 예

............int my_count1 = 100;int my_count2 = my_count1;// 객체 속성 변수의 대입Box mybox1 = new Box();Box mybox2 = mybox1; // 객체 참조 변수의 대입............

6.4 멤버 변수

Page 17: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 17

객체 참조 변수 : 객체에 대한 주소가 복사되어 전달되므로 결국 같은 객체를 가리키게 된

다 .

Box mybox1 = new Box();

100

100

my_count1int my_count1 = 100;

int my_count2 = my_count1;

Box mybox2 = mybox1;

객체의 주소

객체의 주소

mybox1

mybox2

WidthHeightdepth

객체 속성 변수 : 변수의 값이 복사되어 전달

my_count2

6.4 멤버 변수

Page 18: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 18

(2) 클래스 변수

자바에서의 변수는 다음과 같은 형식으로 선언된다 .

[public/private/protected] [static/final] 변수형 변수 이름 ;

클래스 변수는 static 을 붙여 선언한다 .

클래스 변수는 전역 변수의 개념을 가진다 .

6.4 멤버 변수

Page 19: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 19

클래스 변수의 용도

– 객체 변수 ( 객체 참조 , 객체 속성 ) 는 객체가 생성될 때마다 각 객체에 변수들이

생성되지만 , 클래스 변수는 클래스로부터 생성된 객체들의 수와 상관없이

하나만 생성

– 한 클래스로부터 생성된 모든 객체들은 클래스 변수를 공유

– 클래스 변수를 이용하여 객체들 사이의 통신에 사용하거나 객체들의 공통 속성을

나타낼 수 있다 .

– 객체 변수와는 달리 클래스 변수는 클래스 이름을 통하여 접근

6.4 멤버 변수

Page 20: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 20

static int number;

객체 고유 데이터

객체 고유 데이터

객체 고유 데이터

객체 고유 데이터

클래스 Test

객체생성

클래스 Test 로 부터 생성된 모든 객체들은 Test.number 로 클래스 변수에 접근할 수 있다 .

객체 d

객체 c객체 b

객체 a

6.4 멤버 변수

Page 21: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 21

멤버 변수 - 클래스 변수 - 예

class Box { int width; int height; int depth; long idNum; static long boxID = 0; // 클래스 변수 선언 public Box() { idNum = boxID++; // 생성자가 수행될 때마다 클래스 변수의 값을 증가 }}

Box 클래스로부터 생성되는 모든 객체의 idNum 값은객체가 생성되는 순서에 따라 유일한 값을 가지게 된다 .

6.4 멤버 변수

Page 22: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 22

(3) 종단 (final) 변수

예약어 final 을 사용하여 종단 변수 지정

변할 수 없는 상수 값을 나타낸다 .

종단 변수는 관례상 대문자로 표기한다 .

final int MAX = 100;

final int MIN = 1;

6.4 멤버 변수

Page 23: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 23

(4) 접근 방법

클래스 변수와 객체 속성 변수에 접근하기 위해서는 “ .” 을 사용

클래스 변수 : 클래스 이름 . 클래스 변수

객체 속성 변수 : 객체 이름 . 객체 속성 변수

6.4 멤버 변수

Page 24: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 24

class A { int aa; int bb; int cc; static int s = 0;}class ATest { public static void main(String args[]) { A obja = new A(); obja.aa = 4; // 객체 참조 변수에 접근

obja.bb = obja.aa * 2; // 객체 참조 변수에 접근

obja.cc = A.s; // 객체 참조 변수에 클래스 변수 값을 저장 ............

........

6.4 멤버 변수

Page 25: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 25

자바는 객체 지향의 특성인 캡슐화 (encapsulation) 와 정보 은폐 (information hiding) 를

제공하기 위해 멤버 변수에 한정자를 사용

멤버 변수 한정자로 public, private, protected 를 제공

접근 한정자가 없는 멤버 변수는 동일한 패키지와 하위 클래스에서 사용이 가능

6.5 멤버 변수 접근 한정자

Page 26: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 26

멤버 변수 접근 한정자 - public

“public” 으로 선언된 객체 변수는 소속된 클래스가 접근 가능하면 항상 접근 가능

class Box { public int width; public int height; public int depth; public long idNum; static long boxID = 0; public Box() { idNum = boxID++;} }class PublicDemo { public static void main(String args[]) { Box mybox1 = new Box(); mybox1.width = 7; // 접근 가능

mybox2.depth = 20; // 접근 가능

...............

6.5 멤버 변수 접근 한정자

Page 27: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 27

멤버 변수 접근 한정자 - private

“private” 으로 선언된 객체 변수는 소속된 클래스 내에서만 사용 가능

class Box { private int width; // private 로 선언 이 클래스 내부에서만 사용

private int height; private int depth; .............

} class PrivateDemo {

public static void main(String args[]) { Box mybox1 = new Box(10, 20, 30); mybox1.width = 7; // 에러 발생

...............

6.5 멤버 변수 접근 한정자

Page 28: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 28

멤버 변수 접근 한정자 - protected

“protected” 로 선언된 객체 변수는 소속된 클래스의 하위 클래스와 소속된 클래스와 같은 패키지의 클래스에서만 사용 가능

class Box { private int width; private int height; private int depth; protected int count; // 이 클래스와 이 클래스의 하위 클래스에서 사용 .............}class ProtectedDemo1 extends Box { // extends 를 이용하여 Box 클래스의 하위 클래스로 생성 public static void main(String args[]) { Box mybox2 = new Box(); mybox2.count = 7; // 접근 가능 ………………

6.5 멤버 변수 접근 한정자

Page 29: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 29

유효 범위를 기준으로 변수를 구분하면

– 멤버 변수

– 메소드 매개 변수와 지역 변수

– 예외 처리기 매개 변수

6.6 변수의 유효 범위

Page 30: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 30

변수의 유효 범위

멤버 변수의 유효 범위

메소드 매개 변수와 메소드 지역 변수의 유효 범위

예외 처리기 매개 변수의 유효 범위

class MyClass { …………… 멤버 변수들 ……………

public void aMethod( 메소드 매개 변수 ) { ……… 메소드 지역변수들 ……… catch( 예외 처리기 매개 변수 ) { ………… ………… ………… } ……… }

…………}

6.6 변수의 유효 범위

Page 31: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 31

생성자는 클래스로부터 객체가 생성될 때 초기화 과정을 기술하는 특수한 메소드

생성자의 이름은 클래스 이름과 같다 .

생성자는 객체가 생성될 때 자동으로 한번만 수행

접근 한정자의 의미는 멤버변수의 접근 한정자와 같다 .– 단 생성자가 private 로 선언되는 경우는 클래스 내부에서만 사용한다는 의미이다 .

[public/protected/private] 클래스 이름 ( 매개 변수 ) {

........ // 초기화 문장들

}

6.7 생성자 (Constructor)

Page 32: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 32

생성자 (Constructor) - 예

class Box { private int width; // 변수를 private 로 선언하여 외부에서 접근을 막는다 . private int height; // 정보의 은폐 제공 private int depth; private int vol; public Box(int a, int b, int c) { // 클래스의 이름과 같은 이름으로 생성자 선언 width = a; // 초기화 작업 수행 height = b; depth = c; } public int volume() { vol = width * height * depth; return vol; }}class BoxTestDemo { public static void main(String args[]) { int vol; Box mybox1 = new Box(10, 20, 30); vol = mybox1.volume(); System.out.println("mybox1 객체의 부피 : " + vol); }}

6.7 생성자 (Constructor)

Page 33: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 33

클래스에 하나 이상의 생성자를 중첩하여 사용할 수 있다 .

여러 개의 생성자를 사용할 때는 생성자의 이름은 같지만 매개 변수의 타입과 개수는 달라야 한다 .

6.8 생성자 오버로딩 (overloading)

Page 34: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 34

생성자 오버로딩 (overloading)- 예

class Box { int width; int height; int depth; public Box() { width=1; height=1; depth=1; } public Box(int w) { width=w; height=1; depth=1; }

public Box(int w, int h) { width=w; height=h; depth=1; }public Box(int w, int h, int d) { width=w; height=h; depth=d; }

4 개의 생성자가 서로 다른 매개변수를 가진다

Box mybox1 = new Box();Box mybox2 = new Box(5);Box mybox3 = new Box(5, 10);Box mybox4 = new Box(5, 10, 15);

6.8 생성자 오버로딩 (overloading)

Page 35: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 35

생성자 오버로딩 (overloading)- 예

class Box { int width, height, depth; double dwidth, dheight, ddepth; public Box(int w, int h, int d) { width=w; height=h; depth=d; } public Box(double w, double h, double d) { dwidth=w; dheight=h; ddepth=d; }}

매개변수의 개수는 같지만 타입이 다른 경우

Box mybox5 = new Box(5, 10, 15);Box mybox6 = new Box(20.3, 10.7, 15.23);

6.8 생성자 오버로딩 (overloading)

Page 36: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 36

“this” 는 현재의 객체를 의미

생성자나 메소드의 매개변수와 객체 변수가 같은 이름을 가질 때 사용

같은 클래스 내의 다른 생성자를 호출할 때 사용

class Box { int width; int height; int depth; public void Box(int width, int height, int depth) { width=width; // 같은 변수 ( 생성자 매개변수 )

height=height; // 값을 배정

depth=depth; }}

다음 슬라이드

생성자 매개변수객체속성변수

6.9 예약어 this

Page 37: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 37

class Box { int width; int height; int depth; public Box(int width, int height, int depth) { this.width=width; this.height=height; this.depth=depth; }} this.width 는 현재 객체의 객체 속성 변수 width 를

의미 .this 를 사용함으로서 같은 이름을 객체 변수와 생성자 매개변수의 이름으로 사용할 수 있다 .

같은 이름을 객체 속성 변수와 생성자 매개변수의 이름으로 사용 )

6.9 예약어 this

Page 38: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 38

같은 클래스 내의 다른 생성자를 호출

class Box { int width; int height; int depth; public Box() { this(1,1,1); } public Box(int w) { this(w,1,1); } public Box(int w, int h) { this(w,h,1); } public Box(int w, int h, int d) { width=w; height=h; depth=d; }}

이 클래스는 어떠한 형태로 객체가 생성되어도 결국 마지막 생성자가 호출된다 .여기서 사용된 this 는 같은 클래스 내의 다른 생성자를 호출하는 역할을 한다 .

6.9 예약어 this

Page 39: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 39

메소드

– 객체가 할 수 있는 행동을 정의

– 메소드의 이름은 소문자로 시작하는 것이 관례

[ 접근 한정자 ] [static/final/abstract/synchronized] 반환 값 메소드

이름 ([ 매개 변수들 ]) {

................ // 지역변수 선언 및 메소드 행위 기술

}

6.10 메소드

Page 40: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 40

(1) 접근 한정자

접근 한정자 public/private/protected 는 멤버 변수 접근 한정자와 같은 의미

(6.5 절 참조 )

6.10 메소드

Page 41: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 41

메소드 - (2) 클래스 메소드 : static

“static” 을 붙여 클래스 메소드 선언

클래스 변수와 같이 클래스 명을 통하여 접근

클래스 메소드 내에서는 클래스 변수만 사용할 수 있다 .

예제

6.10 메소드

Page 42: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 42

메소드 - (3) final, abstract, synchronized 메소드

final : final 로 선언된 메소드는 하위 클래스에서 치환 (overriding) 될 수 없는 메소드이다 .

(7 장 설명 )

abstract : 추상 메소드로서 추상 클래스 내에 선언될 수 있다 .(7 장 설명 )

synchronized : 스레드 동기화를 위한 메소드

6.10 메소드

Page 43: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 43

메소드 - (4) 메소드 접근

일반 메소드와 클래스 메소드에 접근

클래스 메소드 접근 형식 : 클래스이름 . 클래스메소드이름 ( 매개 변수 )

일반 메소드 접근 형식 : 객체이름 . 객체메소드이름 ( 매개 변수 )

6.10 메소드

Page 44: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 44

메소드 - (5) 메소드 반환 값

메소드 선언부에 반환 값이 지정되어야 한다 .

반환 값이 없을 경우 “ void” 로 지정

기본 자료형 뿐만 아니라 참조 자료형의 데이터도 반환

public int sum(int a, int b) { // 메소드 선언 int c; c = a + b; return c;}

기본 자료형 데이터를 반환하는 메소드메소드 선언부에 지정된 반환 타입과실제 반환하는 데이터 타입이일치해야 한다 .

6.10 메소드

Page 45: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 45

메소드 - (5) 메소드 반환 값

public Box volume_compute(Box instance_box) { Box v_box = new Box(); v_box.width = instance_box.width; v_box.height = instance_box.height; v_box.depth = instance_box.depth; v_box.volume= v_box.width * v_box.height * v_box.depth; return v_box;}

참조 자료형인 객체를 반환하는 메소드

6.10 메소드

Page 46: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 46

- 생성자 오버로딩과 같은 개념

- 한 클래스 내에서 같은 이름의 메소드를 사용

- 같은 이름의 메소드는 매개변수의 타입과 개수가 달라야 한다 .

- 다형성 (polymorphism) 제공

6.11 메소드 오버로딩 (overloading)

Page 47: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 47

자바는 메소드에 값을 전달할 때 값 - 전달 (call by value) 방법을 사용

실 매개 변수의 형에 따라 다른 결과를 나타낸다 .

자바는 8 개의 기본 자료형을 제외하고 모두 참조 자료형이다 .– 실 매개 변수가 기본 자료형인 경우

– 실 매개 변수의 값을 형식 매개 변수에 복사

– 형식 매개 변수의 값이 변화되어도 실 매개 변수의 값은 변하지 않는다 .

– 실 매개 변수가 참조 자료형인 경우

– 실 매개 변수 ( 객체 ) 의 주소를 형식 매개 변수에 복사

– 형식 매개 변수의 값이 변화되면 실 매개 변수의 값이 변한다 .

(call by reference 효과 )

6.12 메소드에 값 전달 방법 (argument passing)

Page 48: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 48

실 매개 변수와 형식 매개 변수로 기본 자료형이 사용되는 경우의 값 - 전달 기법

메소드에 값 전달 방법 (argument passing)

5

4.5

5

4.5

메모리

복사형식 매개 변수

int a=5;float f=4.5;………methodA(a,f); // methodA 호출

methodA(int b, float g) {………}

실 매개 변수

a

f

bg

6.12 메소드에 값 전달 방법 (argument passing)

Page 49: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 49

실 매개 변수와 형식 매개 변수로 참조 자료형이 사용되는 경우의 값 - 전달 기법

메모리

14000 번지( 메모리 주소 )

복사

14000

int a

int b

14000

클래스A 의객체

메소드에 값 전달 방법 (argument passing)

class A {int a;int b; }……A obA = new A(); ………methodA(obA) //

methodA 호출

methodA(A objectA) {……}ojbectA

obA

6.12 메소드에 값 전달 방법 (argument passing)

Page 50: 6.1  클래스의 일반 구조 6.2  클래스 선언 6.3  객체의 생성 6.4  멤버 변수 6.5  멤버변수 접근 한정자 6.6   변수의 유효 범위

KUMHO SOFTWARE DEVELOPMENT 50

JVM( 자바 가상 기계 ) 은 효율적인 시스템 운영을 위해 더 이상 필요없는 객체들을 대상으로

쓰레기 수집 기능을 자동으로 수행

JVM 은 쓰레기 수집 전에 그 객체의 finalize() 메소드를 호출한다 .

사용자는 클래스 생성 시 finalize() 메소드를 이용하여 객체에서 사용된 파일이나 소켓 같은

자원들을 반납하는 과정을 기술할 수 있다 .

protected void finalize() throws Throwable { items = null; super.finalize(); }

6.12 finalize 메소드와 쓰레기 수집 (garbage collection)