7 장 . 클래스 : 기능

49
7 장 . 장장장 : 장장 1 public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 장 장장 장장장 장장장장장 System.out.println(" 장장장 장장 " + sum + " 장장장 "); } } JAVA

Upload: nichole-whitehead

Post on 15-Mar-2016

39 views

Category:

Documents


7 download

DESCRIPTION

7 장 . 클래스 : 기능. Java. public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt (a1[0]); b = Integer.parseInt (a1[1]); sum = a + b ; // 두 수를 더하는 부분입니다 System.out.println (" 두수의 합은 " + sum + " 입니다 "); } - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

1

public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두 수를 더하는 부분입니다 System.out.println(" 두수의 합은 " + sum + " 입니다 "); }}

JAVA

Page 2: 7 장 .  클래스  :  기능

클래스의 기능에 해당하는 부분에 관해 학습한다 .

객체를 생성할 때 수행되는 생성자에 관해 학습한다 .

생성자 오버로딩에 관해 학습한다 .

클래스의 기능을 나타내는 메소드에 관해 학습한다 .

메소드 오버로딩에 관해 학습한다 .

메소드 값 전달 기법에 관한 학습한다 .

학습목표

2

Page 3: 7 장 .  클래스  :  기능

section 1 생성자 (Constructor)

section 2 생성자 오버로딩 (Overloading)

section 3 예약어 this

section 4 메소드 - 4-1 접근 한정자

- 4-2 클래스 메소드

- 4-3 final, abstract, synchronized 메소드

- 4-4 메소드 반환 값 (return value)

section 5 메소드 오버로딩 (Overloading)

section 6 메소드에 값 전달 (Argument passing) 방법

목차

3

Page 4: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

1 생성자 (Constructor)

4

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

- 객체가 생성될 때 무조건 수행

- 객체가 생성될 때 한 번만 수행

[public/private] 클래스이름 ( 매개변수 ){............. 초기화 문장들.............}

형식

Page 5: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

1 생성자 (Constructor)

5

생성자

class Box { private int width; private int height; private int depth; private int vol; public Box(int w, int h, int d) { width = w; height = h; depth = d; }}class BoxTest { .................. Box mybox1 = new Box(10,20,30); Box mybox2 = new Box(); .................. 오류 발생 , 적합한 생성자가 없다 .

Page 6: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

1 생성자 (Constructor)

6

실습예제Box5Test.java01020304050607080910111213141516171819

class Box5 { int width; int height; int depth; public Box5(int w, int h, int d) { width = w; height = h; depth = d; }}public class Box5Test { public static void main(String args[]) { Box5 mybox1 = new Box5(10,20,30); int vol = mybox1.width * mybox1.height * mybox1.depth; System.out.println(" 박스의 부피 : " + vol); }}

3 개의 매개변수로 객체 생성

생성자로서 초기화 과정 수행

Page 7: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

1 생성자 (Constructor)

7

프로그램 설명- 05~10 : 생성자를 정의하였다 . 클래스의 이름과 동일한 생성자를 사용하였으며 ,

매개변수로 받은 값을 자신의 객체 변수에 초기화 과정을 수행하였다 . - 14 : Box5 클래스가 3 개의 매개변수를 가진 생성자를 가지고 있으므로 , 반드시 3 개의

매개변수를 지정하여 객체를 생성하여야 한다 .

Page 8: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

2 생성자 오버로딩 (Overloading)

8

같은 이름의 생성자를 여러 개 중첩 (overloading) 하여 사용할 수 있다class Box5 { int width; int height; int depth; public Box5() { width = 1; height = 1; depth = 1; } public Box5(int w) { width = w; height = 1; depth = 1; } public Box5(int w, int h) { width = w; height = h; depth = 1; }

Page 9: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

2 생성자 오버로딩 (Overloading)

9

public Box5(int w, int h, int d) { width = w; height = h; depth = d; }}public class Box5Test { ................ Box5 mybox1 = new Box5(); Box5 mybox2 = new Box5(10); Box5 mybox3 = new Box5(10,20); Box5 mybox4 = new Box5(10,20,30); ................ }}

매개변수의 개수와 형식에 따라 적합한 생성자 수행

Page 10: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

2 생성자 오버로딩 (Overloading)

10

실습예제Box6Test.java0102030405060708091011121314151617181920

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

두 개의 생성자를 오버로딩

두 개의 생성자를오버로딩

Page 11: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

2 생성자 오버로딩 (Overloading)

11

실습예제Box6Test.java2122232425262728293031323334353637383940

public class Box6Test { public static void main(String args[]) { Box6 mybox1 = new Box6(10,20,30); Box6 mybox2 = new Box6(10.5,20.5,30.5); Box6 mybox3 = new Box6(10.5,20.5,30); int vol1 = mybox1.width * mybox1.height * mybox1.depth; double vol2 = mybox2.dwidth * mybox2.dheight * mybox2.ddepth; double vol3 = mybox3.dwidth * mybox3.dheight * mybox3.ddepth; System.out.println (" 정수 박스의 부피 : " + vol1); System.out.println (" 실수 박스의 부피 : " + vol2); System.out.println (" 정수와 실수가 섞여있는 박스의 부피 : " + vol3); }}

생성자의 매개변수에적합한 생성자 수행

Page 12: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

2 생성자 오버로딩 (Overloading)

12

프로그램 설명- 00 : 3 개의 정수 매개변수를 가진 생성자를 선언하였다 .- 00 : 3 개의 실수 매개변수를 가진 생성자를 오버로딩하여 선언하였다 .- 00 : 3 개의 정수 매개변수를 가지고 객체를 생성하였다 . 정수 매개변수를 가진 생성자가

수행된다 .- 00~00 : 3 개의 실수 매개변수를 가지고 객체를 생성하였다 . 실수 매개변수를 가진

생성자가 수행된다 .- 00 : 정수와 실수가 섞여 있는 경우 정수가 자동 형변환되어 실수 매개변수 생성자를

수행한다 .

Page 13: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

3 예약어 this

13

This- 자바의 예약어 (reserved word)- 현재의 객체를 의미

class Box { int width; int height; int depth; public void Box(int width, int height, int depth) { width=width; height=height; depth=depth; } }

Page 14: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

3 예약어 this

14

This

class Box { int width; int height; int depth; public void Box(int width, int height, int depth) { this.width=width; this.height=height; this.depth=depth; } }

이 객체 변수를 의미

Page 15: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

3 예약어 this

15

class Box5 { int width; int height; int depth; public Box5() { this(1,1,1); } public Box5(int w) { this(w,1,1); } public Box5(int w, int h) { this(w,h,1); } public Box5(int w, int h, int d) { width = w; height = h; depth = d; }}public class Box5Test { ................ Box5 mybox1 = new Box5(); Box5 mybox2 = new Box5(10); Box5 mybox3 = new Box5(10,20); Box5 mybox4 = new Box5(10,20,30); ................ }}

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

Page 16: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

4 메소드

16

메소드- 객체가 할 수 있는 행동을 정의

- static : 클래스 메소드

- final : 종단 메소드

- abstract : 추상 메소드

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

[ 접근 한정자 ] [static/final/abstract/synchronized] 반환값타입 메소드이름 ([ 매개변수들 ]){............ 지역변수 선언 및 메소드 행위 기술............ }

형식

Page 17: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

4-1 접근 한정자4 메소드

17

메소드 선언 시 사용되는 접근 한정자- 멤버 변수 접근 한정자와 같이 public, private 가 사용

public class Test1 { public int a; int b; private int c; public void method1() { } viod method2() { } private void mothod3() { }}

public 멤버 변수 선언접근 한정자를 지정하지 않고 선언

private 멤버 변수 선언public 메소드 선언접근 한정자를 지정하지 않음

private 메소드 선언

Page 18: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

4-1 접근 한정자4 메소드

18

같은 패키지에 속해있는 클래스에서 사용하는 예

public class SamePackage { Test1 t1 = new Test1(); t1.a = 3; t1.b = 5; t1.c = 7; t1.mothod1(); t1.mothod2(); t1.mothod3(); }

접근 가능

접근 불가능접근 가능접근 가능접근 불가능접근 가능

Page 19: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

4-1 접근 한정자4 메소드

19

다른 패키지에 속해 있는 클래스에서 사용하는 예

public class OtherPackage { Test1 t2 = new Test1(); t2.a = 3; t2.b = 5; t2.c = 7; t2.mothod1(); t2.mothod2(); t2.mothod3();}

접근 가능

접근 불가능접근 불가능접근 가능접근 불가능접근 불가능

Page 20: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

4-1 접근 한정자4 메소드

20

실습예제Box7Test.java01020304050607080910111213141516

class Box7 { int width; int height; int depth; public Box7(int w, int h, int d) { width = w; height = h; depth = d; } int volume() { int vol = width * height * depth; return vol; }}

접근 한정자를 사용하지 않고 객체 변수 선언

접근 한정자를 사용하지 않고메소드 선언

Page 21: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

4-1 접근 한정자4 메소드

21

실습예제Box7Test.java171819202122232425

public class Box7Test { public static void main(String args[]) { Box7 mybox1 = new Box7(10,20,30); mybox1.width = 20; int vol1 = mybox1.volume(); System.out.println (" 정수 박스의 부피 : " + vol1); }}

객체 변수에 직접 접근하여 초기화된 변숫값을 고침

Page 22: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

4-1 접근 한정자4 메소드

22

프로그램 설명- 02~04 : 접근 한정자를 사용하지 않고 객체 변수를 선언하는 것은 보안 부분을 매우

취약하게 하는 요인이다 . Box7 클래스가 생성자를 통한 초기화와 부피를 구해서 알려주는 클래스라고 가정하면 , 외부에서 그 기능만을 사용할 수 있도록 최소한의 부분만 공개해야 하며 , 다른 부분은 접근 한정자를 이용하여 철저히 은폐하여야 한다 .

- 11~15 : 접근 한정자를 사용하지 않고 메소드가 기술되었다 . 실제 부피를 구하는 메소드의 이름은 그 클래스를 사용하는 측에서는 알 필요가 없는 정보이다 . 좀 더 철저한 보안을 위해서는 부피를 계산하는 메소드는 접근 한정자에 의해 은폐되어야 하고 , 계산된 부피만 알려주는 읽기 전용의 메소드가 필요하다 .

- 20 : 접근 한정자를 사용하지 않음으로서 발생할 수 있는 잘못 사용된 예이다 . width 객체 변수의 접근 한정자를 지정하지 않음으로서 같은 패키지에 속한 다른 클래스에서 자유롭게 그 변수의 값을 조작할 수 있다 .

Page 23: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

4-1 접근 한정자4 메소드

23

실습예제Box8Test.java01020304050607080910111213141516

class Box8 { private int width; private int height; private int depth; private int vol; public Box8(int w, int h, int d) { width = w; height = h; depth = d; volume(); } private void volume() { vol = width * height * depth; }

접근 한정자를 사용하지 않고 객체 변수 선언

부피를 구하는 메소드를private 로 선언

Page 24: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

4-1 접근 한정자4 메소드

24

실습예제Box8Test.java1718192021222324252627282930

public int getvolume() { return vol; }}public class Box8Test { public static void main(String args[]) { Box8 mybox1 = new Box8(10,20,30); // mybox1.width = 20; // int vol1 = mybox1.volume(); System.out.println (" 정수 박스의 부피 : " + mybox1.getvolume()); }}

부피의 값을 읽어오는 메소드만public 으로 선언

private 로 선언된 변수에 접근하면 오류 발생private 로 선언된 메소드에 접근하면 오류 발생

Page 25: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

4-1 접근 한정자4 메소드

25

프로그램 설명- 02~05 : 클래스 내에 선언되는 모든 객체 변수에 접근 한정자를 사용하며 , 공개될

필요가 없는 변수들은 모두 private 로 선언하여 객체 변수가 오용되는 것을 방지한다 .- 13~16 : 부피를 구하는 메소드의 이름을 공개할 필요가 없다 . private 로 메소드 선언

- 17~20 : 계산된 부피 값을 읽어오는 전용 메소드를 작성하여 public 으로 선언한다 . 이렇게 읽기 전용의 메소드를 사용함으로써 보안을 강화할 수 있다 .

- 25~26 : private 로 선언된 객체 변수와 메소드에 접근하면 오류가 발생된다 .

Page 26: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

4-2 클래스 메소드 4 메소드

26

클래스 메소드- 클래스 변수와 비슷한 특징을 가짐

class Box { int width; int height; int depth; long idNum; static long boxID = 100; static long getcurrentID() { depth++; return boxID++; }}

클래스 메소드는 클래스 변수만 사용 . depth 는 객체 변수이므로 오류 발생

Page 27: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

4-2 클래스 메소드 4 메소드

27

실습예제Box9Test.java01020304050607080910111213141516

class Box9 { private int width; private int height; private int depth; public long idNum; static long boxID = 100; static long getCurrentID() { int count = 1; boxID = boxID + count; return boxID; }}public class Box9Test { public static void main(String args[]) { Box9 mybox1 = new Box9();

클래스 메소드 선언 ( 지역 변수 사용 가능 )

클래스 변수 선언

Page 28: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

4-2 클래스 메소드 4 메소드

28

실습예제Box9Test.java171819202122232425262728

mybox1.idNum = Box9.getCurrentID(); Box9 mybox2 = new Box9(); mybox2.idNum = Box9.getCurrentID(); System.out.println ("mybox1 의 id 번호 : "+ mybox1.idNum); System.out.println ("mybox2 의 id 번호 : "+ mybox2.idNum); System.out.println (" 다음 박스의 번호는 "+ Box9.getCurrentID() + " 번 입니다 "); }}

클래스 메소드 호출( 클래스 이름 사용 )

클래스 메소드 호출( 클래스 이름 사용 )

클래스 메소드 호출( 클래스 이름 사용 )

Page 29: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

4-2 클래스 메소드 4 메소드

29

프로그램 설명- 07~12 : static 을 사용하여 클래스 메소드를 선언하였다 . 클래스 메소드 내에서는 객체

변수를 사용할 수 없으나 , 클래스 메소드 내부에서만 사용하는 지역 변수는 선언하여 사용할 수 있다 .

- 17, 19, 24~26 : 클래스 메소드의 호출은 클래스 이름을 통해서 하는 것이 원칙이다 . 객체 이름을 통해서도 (mybox1.getCurrentID()) 도 접근이 가능하다 .

Page 30: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

4-3 final, abstract, synchronized 메소드4 메소드

30

final 로 선언된 메소드- 서브 클래스에서 오버라이딩 (overriding) 될 수 없음을 의미

abstract 로 선언된 메소드- 추상 메소드로써 추상 클래스 내에서 선언

- 추상 메소드는 선언 부분만 가지고 몸체 부분은 가질 수 없음

- 몸체 부분은 서브 클래스에서 오버라이딩됨

synchronized 메소드- 스레드를 동기화할 수 있는 기법을 제공하기 위해 사용

Page 31: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

4-4 메소드 반환 값 (return value)4 메소드

31

메소드 선언부에는 그 메소드 반환 값의 자료형이 지정되어야 함

반환 값이 없을 경우에는 void 로 지정

void 형이 아닌 메소드- 반드시 지정된 형과 같은 값을 return 문을 사용하여 반환

Page 32: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

4-4 메소드 반환 값 (return value)4 메소드

32

public int sum(int a, int b) { int c; c = a + b; return c; // 정수 값을 반환}

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; // Box 객체를 반환}

Page 33: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

5 메소드 오버로딩 (Overloading)

33

메소드 오버로딩- 객체지향 언어의 특징 중에 하나인 다형성 (polymorphism) 을 제공

- 하나의 메소드 이름으로 다양한 연산을 수행할 수 있는 방법을 제공

- 중첩된 메소드가 호출되면 매개변수의 형과 개수를 비교하여 적합한 메소드가 실행

Page 34: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

5 메소드 오버로딩 (Overloading)

34

실습예제Box10Test.java01020304050607080910111213141516171819

class Box10 { private int i_volume; private double d_volume; public Box10(int w, int h, int d) { volume(w, h, d); } public Box10(double w, double h, double d) { volume(w, h, d); } private void volume(int w, int h, int d) { i_volume = w * h * d; } private void volume(double w, double h, double d) { d_volume = w * h * d; }

데이터형에 적합한 메소드 실행

데이터형에 적합한 메소드 실행

같은 이름의 메소드 오버로딩 선언

Page 35: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

5 메소드 오버로딩 (Overloading)

35

실습예제Box10Test.java2021222324252627282930313233343536373839404142

public int get_i_volume() { return i_volume; } public double get_d_volume() { return d_volume; }}public class Box10Test { public static void main(String args[]) { Box10 mybox1 = new Box10(10,20,30); Box10 mybox2 = new Box10(10.5,20.5,30.5); Box10 mybox3 = new Box10(10.5,20.5,30); System.out.println (" 정수 박스의 부피 : " + mybox1.get_i_volume()); System.out.println (" 실수 박스의 부피 : " + mybox2.get_d_volume()); System.out.println (" 정수와 실수가 섞여있는 박스의 부피 : " + mybox3.get_d_volume()); }}

Page 36: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

5 메소드 오버로딩 (Overloading)

36

프로그램 설명- 06, 10 : 생성자에서 같은 이름의 메소드를 호출하고 있지만 , 매개변수의 형에 따라

적합한 메소드가 수행된다 . - 12~19 : 두 개의 메소드를 오버로딩하여 선언하였다 . 매개변수의 개수는 같지만 , 형이

달라서 오버로딩될 수 있다 .

Page 37: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

5 메소드 오버로딩 (Overloading)

37

실습예제OverloadTest.java01020304050607080910111213141516171819

class Overload{ void calc(){ System.out.println(" 매개변수가 없습니다 ."); } void calc(int width){ System.out.println(" 정사각형의 넓이 : " + width * width); } void calc(int width, int height){ System.out.println(" 직사각형의 넓이 : " + width * height); } void calc(int width, int height, int depth){ System.out.println(" 직육면체의 부피 : " + width * height * depth); }}

public class OverloadTest {

메소드를 오버로딩으로 선언

메소드를 오버로딩으로 선언

메소드를 오버로딩으로 선언

메소드를 오버로딩으로 선언

Page 38: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

5 메소드 오버로딩 (Overloading)

38

실습예제OverloadTest.java2021222324252627282930313233343536373839404142

public static void main(String args[]){ Overload ol = new Overload(); int input[] = new int[args.length]; for(int i=0; i<args.length; i++) input[i] = Integer.parseInt(args[i]); switch (args.length){ case 0: ol.calc(); break; case 1: ol.calc(input[0]); break; case 2: ol.calc(input[0], input[1]); break; case 3: ol.calc(input[0], input[1], input[2]); break; default: System.out.println(" 인수의 개수가 많습니다 ."); } }}

오버로딩 메소드 호출

오버로딩 메소드 호출

오버로딩 메소드 호출

오버로딩 메소드 호출

Page 39: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

5 메소드 오버로딩 (Overloading)

39

프로그램 설명- 02~16 : 넓이와 부피를 구하는 메소드 calc() 를 오버로딩으로 선언하였다 . 메소드가

호출되면 매개변수의 개수에 따라 적합한 메소드가 수행된다 .- 27, 30, 33, 36 : 적합한 메소드가 호출되어 수행된다 .

Page 40: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

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

40

실 매개변수와 형식 매개변수로 기본 자료형이 사용되는 경우

237 page

Page 41: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

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

41

매개변수와 형식 매개변수로 참조 자료형이 사용되는 경우

238 page

Page 42: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

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

42

실습예제ArgumentTest1.java010203040506070809101112131415

class Argument { public void change(int i, int j[], StringBuffer sb) { i = 20; j[3] = 400; sb.append(" 화이팅 자바 ."); } public void display(int i, int j[], StringBuffer sb) { System.out.println(" 객체 변수 i 의 값 : " + i); System.out.print(" 배열의 값 : "); for(int index = 0; index < j.length; index++) System.out.print(j[index] + " "); System.out.println(""); System.out.println(" 문자열 sb 의 값 : " + sb); }}

기본 자료형의 값을 변환배열 ( 참조 자료형 ) 의 요소를 변환

문자열 ( 참조 자료형 ) 뒤에 문자열을 첨가매개변수로 받은데이터를 출력하는메소드

Page 43: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

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

43

실습예제ArgumentTest1.java1617181920212223242526272829

class ArgumentTest1 { public static void main(String args[]) { Argument d = new Argument(); int a = 10; int b[] = { 1, 2, 3, 4 }; StringBuffer c = new StringBuffer(" 배우기 쉽죠 ?"); System.out.println(" 첫번째 display() 메소드 호출 "); d.display(a, b, c); d.change(a, b, c); System.out.println("============================="); System.out.println(" 값을 변환한 다음 두번째 display() 호출 "); d.display(a, b, c); }}

3 개의 매개변수로 display() 호출3 개의 매개변수로 change() 호출

Page 44: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

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

44

프로그램 설명- 02 : 이 메소드에서는 매개변수로 받은 값을 변환시키고 있다 . 첫 번째 값은 기본

자료형의 값이고 , 나머지 두 개의 값은 참조 자료형의 값이다 . 기본 자료형의 경우 값이 복사되기 때문에 변화를 시켜도 호출한 쪽의 데이터는 변하지 않는 반면 , 참조 자료형의경우 주소가 복사되기 때문에 데이터 값을 변환시키면 호출한 쪽의 데이터도 변하게된다 .

- 07 : 변환되기 전과 변환된 후의 값을 출력시켜주는 메소드

- 24 : 값을 변환시키는 change() 메소드를 호출하였다 .- 27 : change() 메소드 호출 후에 다시 출력하였다 .

Page 45: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

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

45

Page 46: 7 장 .  클래스  :  기능

생성자 ① 생성자는 클래스로부터 객체가 생성될 때 초기화 과정을 수행하는 메소드이다 .② 생성자를 생성자 메소드로 부르기도 한다 .③ 생성자의 이름은 클래스 이름과 동일해야 한다 .

생성자 오버로딩 ① 하나의 클래스에 같은 이름의 생성자를 중첩하여 선언하는 것을 생성자

오버로딩이라 한다 .② 오버로딩되는 생성자는 매개변수의 개수와 타입이 반드시 달라야 한다 .③ 생성자 오버로딩은 객체지향의 다형성을 구현한다 .

학습정리

46

Page 47: 7 장 .  클래스  :  기능

예약어 this ① this 예약어는 현재의 객체를 의미한다 .② this 예약어는 클래스내에서 다른 생성자를 호출할 때도 사용된다 .③ this 예약어를 사용함으로서 의미있는 변수명을 사용할 수 있다 .

메소드와 오버로딩 ① 메소드는 클래스의 핵심인 기능을 나타내는 부분이다 .② 메소드의 접근 한정자는 객체변수의 접근 한정자의 의미와 같다 .③ 클래스 메소드는 클래스 이름을 통해 접근 가능하며 , 클래스 메소드내에서는

클래스 변수만을 사용할 수 있다 .④ 메소드는 기본 자료형 뿐만 아니라 참조자료형인 객체도 반환할 수 있다 .⑤ 메소드 역시 생성자와 같이 중첩 사용될 수 있으며 , 중첩된 메소드는 매개변수의

개수와 타입이 반드시 달라야 한다 .

학습정리

47

Page 48: 7 장 .  클래스  :  기능

메소드에 값 전달 기법 ① 자바는 메소드 호출 시 매개변수에 값을 전하기 위해 값 - 전달 (call by value)

방법을 사용한다 .② 값 - 전달 기법은 실매개 변수의 값을 형식매개변수에 복사하는 기법이다 .③ 값 - 전달 기법에서 사용되는 매개변수의 형이 기본 자료형일 경우에는 실제 값이

복사되어 전달되지만 , 참조자료형인 경우에는 주소가 복사되어 전달된다 .④ 참조자료형인 경우에 주소가 전달되므로 결국 실매개변수와 형식매개변수가 같은

객체를 가리키게 된다 . 이 경우 형식매개변수의 값이 변화되면 실매개 변수의 값도 변화된다 .

학습정리

48

Page 49: 7 장 .  클래스  :  기능

7 장 . 클래스 : 기능

49

수고하셨습니다 .질문 있습니까 ?