Transcript Document

7장. 클래스 : 기능
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 + "입니다");
}
}
1
학습목표
클래스의 기능에 해당하는 부분에 관해 학습한다.
객체를 생성할 때 수행되는 생성자에 관해 학습한다.
생성자 오버로딩에 관해 학습한다.
클래스의 기능을 나타내는 메소드에 관해 학습한다.
메소드 오버로딩에 관해 학습한다.
메소드 값 전달 기법에 관한 학습한다.
2
 목차
 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
1 생성자(Constructor)
 생성자
-
클래스로부터 객체가 생성될 때 객체의 초기화 과정을 기술하는 특수한 메소드
-
객체가 생성될 때 무조건 수행
-
객체가 생성될 때 한 번만 수행
형식
7장. 클래스 : 기능
[public/private] 클래스이름(매개변수){
.............
초기화 문장들
.............
}
4
1 생성자(Constructor)
 생성자
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();
오류 발생, 적합한 생성자가 없다.
..................
7장. 클래스 : 기능
5
1 생성자(Constructor)
 실습예제
Box5Test.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
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);
3개의 매개변수로 객체 생성
int vol = mybox1.width *
mybox1.height * mybox1.depth;
System.out.println("박스의 부피 : " + vol);
}
}
7장. 클래스 : 기능
6
1 생성자(Constructor)
 프로그램 설명
-
05~10
: 생성자를 정의하였다. 클래스의 이름과 동일한 생성자를 사용하였으며, 매개변수
로 받은 값을 자신의 객체 변수에 초기화 과정을 수행하였다.
-
14
: Box5 클래스가 3개의 매개변수를 가진 생성자를 가지고 있으므로, 반드시 3개의 매개
변수를 지정하여 객체를 생성하여야 한다.
7장. 클래스 : 기능
7
2 생성자 오버로딩(Overloading)
 같은 이름의 생성자를 여러 개 중첩(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;
}
7장. 클래스 : 기능
8
2 생성자 오버로딩(Overloading)
public Box5(int w, int h, int d)
{
width = w;
height = h;
depth = d;
}
}
public class Box5Test {
................
Box5 mybox1 = new
Box5 mybox2 = new
Box5 mybox3 = new
Box5 mybox4 = new
................
}
}
7장. 클래스 : 기능
Box5();
Box5(10);
Box5(10,20);
Box5(10,20,30);
매개변수의 개수와 형식에 따라
적합한 생성자 수행
9
2 생성자 오버로딩(Overloading)
 실습예제
Box6Test.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
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;
}
}
7장. 클래스 : 기능
10
2 생성자 오버로딩(Overloading)
 실습예제
Box6Test.java
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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);
}
}
7장. 클래스 : 기능
11
2 생성자 오버로딩(Overloading)
 프로그램 설명
-
00
: 3개의 정수 매개변수를 가진 생성자를 선언하였다.
-
00
: 3개의 실수 매개변수를 가진 생성자를 오버로딩하여 선언하였다.
-
00
: 3개의 정수 매개변수를 가지고 객체를 생성하였다. 정수 매개변수를 가진 생성자가
수행된다.
-
00~00
: 3개의 실수 매개변수를 가지고 객체를 생성하였다. 실수 매개변수를 가진 생성자
가 수행된다.
-
00
: 정수와 실수가 섞여 있는 경우 정수가 자동 형변환되어 실수 매개변수 생성자를 수행
한다.
7장. 클래스 : 기능
12
3 예약어 this
 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;
}
}
7장. 클래스 : 기능
13
3 예약어 this
 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;
}
}
7장. 클래스 : 기능
이 객체 변수를 의미
14
3 예약어 this
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 mybox2 = new
Box5 mybox3 = new
Box5 mybox4 = new
................
}
}
7장. 클래스 : 기능
같은 클래스 내의 다른 생성자 호출
Box5();
Box5(10);
Box5(10,20);
Box5(10,20,30);
15
4 메소드
 메소드
-
객체가 할 수 있는 행동을 정의
형식
[접근 한정자] [static/final/abstract/synchronized] 반환값타입 메
소드이름([매개변수들])
{
............
지역변수 선언 및 메소드 행위 기술
............
}
-
static : 클래스 메소드
-
final : 종단 메소드
-
abstract : 추상 메소드
-
synchronized : 스레드의 동기화를 위한 메소드
7장. 클래스 : 기능
16
4 메소드
4-1
접근 한정자
 메소드 선언 시 사용되는 접근 한정자
-
멤버 변수 접근 한정자와 같이 public, private가 사용
public class Test1 {
public int a;
int b;
private int c;
public void method1() { }
viod method2() { }
private void mothod3() { }
}
7장. 클래스 : 기능
public 멤버 변수 선언
접근 한정자를 지정하지 않고 선언
private 멤버 변수 선언
public 메소드 선언
접근 한정자를 지정하지 않음
private 메소드 선언
17
4 메소드
4-1
접근 한정자
 같은 패키지에 속해있는 클래스에서 사용하는 예
public class SamePackage {
Test1 t1 = new Test1();
t1.a = 3;
t1.b = 5;
t1.c = 7;
t1.mothod1();
t1.mothod2();
t1.mothod3();
}
7장. 클래스 : 기능
접근 가능
접근 가능
접근 불가능
접근 가능
접근 가능
접근 불가능
18
4 메소드
4-1
접근 한정자
 다른 패키지에 속해 있는 클래스에서 사용하는 예
public class OtherPackage {
Test1 t2 = new Test1();
t2.a = 3;
t2.b = 5;
t2.c = 7;
t2.mothod1();
t2.mothod2();
t2.mothod3();
}
7장. 클래스 : 기능
접근 가능
접근 불가능
접근 불가능
접근 가능
접근 불가능
접근 불가능
19
4 메소드
4-1
접근 한정자
 실습예제
Box7Test.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
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;
}
}
7장. 클래스 : 기능
20
4 메소드
4-1
접근 한정자
 실습예제
Box7Test.java
17
18
19
20
21
22
23
24
25
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);
}
}
7장. 클래스 : 기능
객체 변수에 직접 접근하여 초기화된 변숫값을 고침
21
4 메소드
4-1
접근 한정자
 프로그램 설명
-
02~04
: 접근 한정자를 사용하지 않고 객체 변수를 선언하는 것은 보안 부분을 매우 취약
하게 하는 요인이다. Box7 클래스가 생성자를 통한 초기화와 부피를 구해서 알려주는 클래
스라고 가정하면, 외부에서 그 기능만을 사용할 수 있도록 최소한의 부분만 공개해야 하며,
다른 부분은 접근 한정자를 이용하여 철저히 은폐하여야 한다.
-
11~15
: 접근 한정자를 사용하지 않고 메소드가 기술되었다. 실제 부피를 구하는 메소드
의 이름은 그 클래스를 사용하는 측에서는 알 필요가 없는 정보이다. 좀 더 철저한 보안을
위해서는 부피를 계산하는 메소드는 접근 한정자에 의해 은폐되어야 하고, 계산된 부피만
알려주는 읽기 전용의 메소드가 필요하다.
-
20
: 접근 한정자를 사용하지 않음으로서 발생할 수 있는 잘못 사용된 예이다. width 객체
변수의 접근 한정자를 지정하지 않음으로서 같은 패키지에 속한 다른 클래스에서 자유롭게
그 변수의 값을 조작할 수 있다.
7장. 클래스 : 기능
22
4 메소드
4-1
접근 한정자
 실습예제
Box8Test.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
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로 선언
}
7장. 클래스 : 기능
23
4 메소드
4-1
접근 한정자
 실습예제
Box8Test.java
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public int getvolume()
{
return vol;
}
부피의 값을 읽어오는 메소드만
public으로 선언
}
public class Box8Test {
public static void main(String args[]) {
Box8 mybox1 = new Box8(10,20,30);
// mybox1.width = 20;
private로 선언된 변수에 접근하면 오류 발생
// int vol1 = mybox1.volume();
private로 선언된 메소드에 접근하면 오류 발생
System.out.println
("정수 박스의 부피 : " + mybox1.getvolume());
}
}
7장. 클래스 : 기능
24
4 메소드
4-1
접근 한정자
 프로그램 설명
-
02~05
: 클래스 내에 선언되는 모든 객체 변수에 접근 한정자를 사용하며, 공개될 필요가
없는 변수들은 모두 private로 선언하여 객체 변수가 오용되는 것을 방지한다.
-
13~16
: 부피를 구하는 메소드의 이름을 공개할 필요가 없다. private로 메소드 선언
-
17~20
: 계산된 부피 값을 읽어오는 전용 메소드를 작성하여 public으로 선언한다. 이렇게
읽기 전용의 메소드를 사용함으로써 보안을 강화할 수 있다.
-
25~26
7장. 클래스 : 기능
: private로 선언된 객체 변수와 메소드에 접근하면 오류가 발생된다.
25
4 메소드
4-2
클래스 메소드
 클래스 메소드
-
클래스 변수와 비슷한 특징을 가짐
class Box {
int width;
int height;
int depth;
long idNum;
static long boxID = 100;
static long getcurrentID() {
클래스 메소드는 클래스 변수만 사용. depth는 객체 변수이므로
depth++;
오류 발생
return boxID++;
}
}
7장. 클래스 : 기능
26
4 메소드
4-2
클래스 메소드
 실습예제
Box9Test.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
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();
7장. 클래스 : 기능
27
4 메소드
4-2
클래스 메소드
 실습예제
Box9Test.java
17
18
19
20
21
22
23
24
25
26
27
28
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() + "번 입니다");
}
}
7장. 클래스 : 기능
28
4 메소드
4-2
클래스 메소드
 프로그램 설명
-
07~12
: static을 사용하여 클래스 메소드를 선언하였다. 클래스 메소드 내에서는 객체 변
수를 사용할 수 없으나, 클래스 메소드 내부에서만 사용하는 지역 변수는 선언하여 사용할
수 있다.
-
17, 19, 24~26 : 클래스 메소드의 호출은 클래스 이름을 통해서 하는 것이 원칙이다. 객체
이름을 통해서도(mybox1.getCurrentID())도 접근이 가능하다.
7장. 클래스 : 기능
29
4 메소드
4-3
final, abstract, synchronized 메소드
 final로 선언된 메소드
-
서브 클래스에서 오버라이딩(overriding)될 수 없음을 의미
 abstract로 선언된 메소드
-
추상 메소드로써 추상 클래스 내에서 선언
-
추상 메소드는 선언 부분만 가지고 몸체 부분은 가질 수 없음
-
몸체 부분은 서브 클래스에서 오버라이딩됨
 synchronized 메소드
-
스레드를 동기화할 수 있는 기법을 제공하기 위해 사용
7장. 클래스 : 기능
30
4 메소드
4-4
메소드 반환 값(return value)
 메소드 선언부에는 그 메소드 반환 값의 자료형이 지정되어야 함
 반환 값이 없을 경우에는 void로 지정
 void형이 아닌 메소드
-
반드시 지정된 형과 같은 값을 return문을 사용하여 반환
7장. 클래스 : 기능
31
4 메소드
4-4
메소드 반환 값(return value)
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 객체를 반환
}
7장. 클래스 : 기능
32
5 메소드 오버로딩(Overloading)
 메소드 오버로딩
-
객체지향 언어의 특징 중에 하나인 다형성(polymorphism)을 제공
-
하나의 메소드 이름으로 다양한 연산을 수행할 수 있는 방법을 제공
-
중첩된 메소드가 호출되면 매개변수의 형과 개수를 비교하여 적합한 메소드가 실행
7장. 클래스 : 기능
33
5 메소드 오버로딩(Overloading)
 실습예제
Box10Test.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
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;
}
7장. 클래스 : 기능
34
5 메소드 오버로딩(Overloading)
Box10Test.java
실습예제
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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());
}
}
7장. 클래스 : 기능
35
5 메소드 오버로딩(Overloading)
 프로그램 설명
-
06, 10
: 생성자에서 같은 이름의 메소드를 호출하고 있지만, 매개변수의 형에 따라 적합한
메소드가 수행된다.
-
12~19
: 두 개의 메소드를 오버로딩하여 선언하였다. 매개변수의 개수는 같지만, 형이 달
라서 오버로딩될 수 있다.
7장. 클래스 : 기능
36
5 메소드 오버로딩(Overloading)
 실습예제
OverloadTest.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
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 {
7장. 클래스 : 기능
37
5 메소드 오버로딩(Overloading)
OverloadTest.java
실습예제
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
}
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("인수의 개수가 많습니다.");
}
}
7장. 클래스 : 기능
38
5 메소드 오버로딩(Overloading)
 프로그램 설명
-
02~16
: 넓이와 부피를 구하는 메소드 calc()를 오버로딩으로 선언하였다. 메소드가 호출
되면 매개변수의 개수에 따라 적합한 메소드가 수행된다.
-
27, 30, 33, 36
7장. 클래스 : 기능
: 적합한 메소드가 호출되어 수행된다.
39
6 메소드에 값 전달(Argument passing) 방법
 실 매개변수와 형식 매개변수로 기본 자료형이 사용되는 경우
237 page
7장. 클래스 : 기능
40
6 메소드에 값 전달(Argument passing) 방법
 매개변수와 형식 매개변수로 참조 자료형이 사용되는 경우
238 page
7장. 클래스 : 기능
41
6 메소드에 값 전달(Argument passing) 방법
 실습예제
ArgumentTest1.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
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);
}
}
7장. 클래스 : 기능
뒤에 문자열을 첨가
매개변수로 받은
데이터를 출력하는
메소드
42
6 메소드에 값 전달(Argument passing) 방법
 실습예제
ArgumentTest1.java
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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() 메소드 호출");
3개의 매개변수로 display() 호출
d.display(a, b, c);
d.change(a, b, c);
3개의 매개변수로 change() 호출
System.out.println("=============================");
System.out.println("값을 변환한 다음 두번째 display() 호출");
d.display(a, b, c);
}
}
7장. 클래스 : 기능
43
6 메소드에 값 전달(Argument passing) 방법
 프로그램 설명
-
02
: 이 메소드에서는 매개변수로 받은 값을 변환시키고 있다. 첫 번째 값은 기본 자료형
의 값이고, 나머지 두 개의 값은 참조 자료형의 값이다. 기본 자료형의 경우 값이 복사되기
때문에 변화를 시켜도 호출한 쪽의 데이터는 변하지 않는 반면, 참조 자료형의경우 주소가
복사되기 때문에 데이터 값을 변환시키면 호출한 쪽의 데이터도 변하게된다.
-
07
: 변환되기 전과 변환된 후의 값을 출력시켜주는 메소드
-
24
: 값을 변환시키는 change() 메소드를 호출하였다.
-
27
: change() 메소드 호출 후에 다시 출력하였다.
7장. 클래스 : 기능
44
6 메소드에 값 전달(Argument passing) 방법
7장. 클래스 : 기능
45
 학습정리
 생성자
① 생성자는 클래스로부터 객체가 생성될 때 초기화 과정을 수행하는 메소드이다.
② 생성자를 생성자 메소드로 부르기도 한다.
③ 생성자의 이름은 클래스 이름과 동일해야 한다.
 생성자 오버로딩
① 하나의 클래스에 같은 이름의 생성자를 중첩하여 선언하는 것을 생성자 오버로딩
이라 한다.
② 오버로딩되는 생성자는 매개변수의 개수와 타입이 반드시 달라야 한다.
③ 생성자 오버로딩은 객체지향의 다형성을 구현한다.
46
 학습정리
 예약어 this
① this 예약어는 현재의 객체를 의미한다.
② this 예약어는 클래스내에서 다른 생성자를 호출할 때도 사용된다.
③ this 예약어를 사용함으로서 의미있는 변수명을 사용할 수 있다.
 메소드와 오버로딩
① 메소드는 클래스의 핵심인 기능을 나타내는 부분이다.
② 메소드의 접근 한정자는 객체변수의 접근 한정자의 의미와 같다.
③ 클래스 메소드는 클래스 이름을 통해 접근 가능하며, 클래스 메소드내에서는 클래
스 변수만을 사용할 수 있다.
④ 메소드는 기본 자료형 뿐만 아니라 참조자료형인 객체도 반환할 수 있다.
⑤ 메소드 역시 생성자와 같이 중첩 사용될 수 있으며, 중첩된 메소드는 매개변수의 개
수와 타입이 반드시 달라야 한다.
47
 학습정리
 메소드에 값 전달 기법
① 자바는 메소드 호출 시 매개변수에 값을 전하기 위해 값-전달(call by value) 방법을
사용한다.
② 값-전달 기법은 실매개 변수의 값을 형식매개변수에 복사하는 기법이다.
③ 값-전달 기법에서 사용되는 매개변수의 형이 기본 자료형일 경우에는 실제 값이 복
사되어 전달되지만, 참조자료형인 경우에는 주소가 복사되어 전달된다.
④ 참조자료형인 경우에 주소가 전달되므로 결국 실매개변수와 형식매개변수가 같은
객체를 가리키게 된다. 이 경우 형식매개변수의 값이 변화되면 실매개 변수의 값도
변화된다.
48
7장. 클래스 : 기능
49