오버로딩, 생성자

sim·2023년 3월 13일

자바의 정석

목록 보기
18/20
  1. 오버로딩(overloading) : 한 클래스 안에 같은 이름의 메서드 여러개 정의하는 것.
  • 오버로딩 조건 : 메서드 이름이 같아야 / 매개변수의 개수 또는 타입이 달라야 / 반환 타입은 관계 없음.
    cf.

    int add(int a, int b) {return a+b; }
    int add(int x, int y) {return x+y; } //매개변수 이름만 다를 뿐 매개변수의 타입이 같음
    -> 오버로딩 성립X
    
    int add(int a, int b) { return a+b;}
    long add(int a, int b) {return (long)(a+b); } // 리턴타입만 다른 경우. 매개변수 타입과 개수가 일치하기 때문에
    -> 오버로딩 성립X
    
    long add (int a, long b) {return a+b; }
    long add (long a, int b) {return a+b; } // 서로 순서가 다른 경우 중복된 메서드가 아닌 
    -> 오버로딩으로 간주. 

ex. println() - boolean, char, char[], double, float, int, long, Object, String

  • 오버로딩의 올바른 예 - 매개변수는 다르지만 같은 의미의 기능수행
  1. 생성자(constructor)
  • 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'

  • 인스턴스 생성시 수행할 작업(iv 초기화)에 사용

  • 생성자의 이름은 클래스의 이름과 같아야 한다.

  • 생성자는 리턴 값이 없다. (void 안붙임 항상 반환값이 없으니까)

    1) 기본 생성자(default constructor)

  • 매개변수가 없는 생성자

  • 생성자가 하나도 없을 때만, 컴파일러가 자동 추가

    2) 매개변수가 있는 생성자
    ex.

    Class Car {
    	String color;
    	String gearType;
    	int door; 
       
        Car() {} //기본 생성자
        Car(String c, String g, int d) { //매개변수가 있는 생성자 -> 인스턴스를 생성하는 동시에 원하는 값으로 초기화 함.
        	color = c; 
            gearType = g;
            door = d;
        }
    }
    
    Car c - new Car("white", "auto", 4); //인스턴스 생성 후에 별도로 초기화하지 않아도 된다.

3) 생성자 this()

  • 생성자에서 다른 생성자 호출할 때 사용
  • 다른 생성자 호출시 첫 줄에서만 사용가능

4) 참조변수 this

  • 인스턴스 자신을 가리키는 참조변수
  • 인스턴스 메서드 (생성자 포함)에서 사용가능
  • 지역변수(lv)와 인스턴스 변수(iv)를 구별할 때 사용

ex.

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

Car(String color, String gearType, int door) {
	this.color = color;
    this.gearType = gearType;
    this.door = door;
} // this.color는 인스턴스변수, color는 지역변수(생성자의 매개변수로 정의된)

** static메서드 에서는 iv사용 불가, this도 사용불가.

profile
sim

0개의 댓글