[CH6. 객체지향프로그래밍1] 오버로딩

4. 메서드 오버로딩

4.1 메서드 오버로딩이란?

한 클래스 내에 같은 이름의 메서드를 매개변수를 다르게 해서 여러개 정의 하는것.

4.2 오버로딩의 조건

  1. 메서드 이름이 같아야 한다.
  2. 매개변수의 개수 또는 타입이 달라야 한다.
  3. 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다.

4.3 오버로딩의 예

1
2
3
4
5
6
7
8
9
10
void println();
void println(booleand x);
void println(char x);
void println(char[] x);
void println(double x);
void println(float x);
void println(int x);
void println(long x);
void println(String x);
void println(Object x);
  • 매개 변수의 타입과 개수가 같아서 오버로딩 성립 안하는 예

    1
    2
    int add(int a, int b){ return a+b;}
    int add(int x, int y){ return x+y;}
  • 리턴 타입만 다른 경우 오버라이딩 성립 안함

    1
    2
    int add(int a, int b){ return a+b;}
    int add(int a, int b){ return (long) a+b;}
    • 같은 매개변수를 순서만 바꿔서 작성하면 오버로딩이지만 헷갈리는 좋지 않은 방법
      1
      2
      int add(int a, long b){ return a+b;}
      int add(long a, int b){ return a+b;}

4.4 오버로딩의 장점

  • 동일 기능의 메서드가 하나의 이름으로 정의될 수 있음
  • 메서드 이름 절약가능

5. 생성자(Constructor)

5.1 생성자란?

인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드

  1. 생성자의 이름은 클래스의 이름과 같아야함
  2. 생성자는 리턴 값이 없음
  • new 연산자가 인스턴스를 생성하는것이지, 생성자가 인스턴스를 생성하는것은 아님

5.2 기본 생성자(default constructor)

생성자를 안 만들어도 컴파일러가 기본으로 생성자 하나 만들어줌.
publid 클래스이름(){};

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Data1{
int value;
}

class Data2{
int value;

Data2(int x){
value = x;
}
}

class ConstructorTest {
public stataic void main(String[] args){
Data1 d1 = new Data1();
//컴파일 에러 발생
Data2 d2 = new Data2();
Data2 d2 = new Data2(int 1);
}
}

5.3 매개변수가 있는 생성자

인스턴스 생성할때 초기값을 넣어 초기화 할 수 있음

1
2
3
4
5
6
7
8
9
10
11
12
class Car{
String color;
String gearType;
int door;

Car(){}
Car(String c, String g, int d){
color= c;
gearType = g;
door =d;
}
}

이렇게 사용하면 됨

1
Car c = new Car("white", "auto", 4};

5.4 생성자에서 다른 생성자 호출하기 - this(), this

같은 클래스 내에서 생성자도 아래 조건을 만족 할 경우 서로 호출이 가능함

  • 생성자의 이름으로 클래스 이름 대신 this를 사용한다.
  • 한 생성자엥서 다른 생성자를 호출할 때는 반드시 첫줄에서만 호출이 가능하다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class Car{
    String color;
    String gearType;
    int door;

    Car(){
    this("white", "auto", 4);
    }

    Car(String color){
    this(color, "auto", 4}

    Car(String color, String gearType, int door){
    this.color= color;
    this.gearType = gearType;
    this.door =door;
    }
    }
  • this - 인스턴스 자신을 가리키느 ㄴ참조변수, 인스턴스의 주소가 저장되어있다.
    모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재한다.

    • this.(), this(매개변수) - 생성자, 같은 클래스의 다른 생성자를 호출 할 때 사용한다.

5.5 생성자를 이용한 인스턴스 복사

동일한 현재 상태를 갖는 인트턴스 하나 더 생성할때 생성자를 사용함.
어떤 상태인지 자세히 몰라도 똑같은 인스턴스 새로 추가 가능.

1
2
3
4
5
Car(Car c){
color= c.color;
gearType = c.gearType;
door =c.door;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Car{
String color;
String gearType;
int door;

Car(){
this("white", "auto", 4);
}

Car(Car c){
color= c.color;
gearType = c.gearType;
door =c.door;
}
Car(String color){
this(color, "auto", 4}

Car(String color, String gearType, int door){
this.color= color;
this.gearType = gearType;
this.door =door;
}
}

*** 인스턴스를 생성할 때는 아래 두가지 사항을 결정해야함

  1. 클래스 - 어떤 클래스의 인스턴스를 생성할 것인가?
  2. 생성자 - 선택한 클래스의 어떤 생성자로 인스턴스를 생성할것인가?

댓글

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×