10/8

Seunghee Ryu·2023년 10월 8일
0

TIL

목록 보기
3/15

오버로딩

오버로딩이란?

  • 한 클래스 내에 같은 이름의 메서드를 여러개 정의하는 것

오버로딩의 조건

  • 메서드 이름이 같아야 한다
  • 매개변수의 개수 또는 타입이 달라야 한다
  • 반환 타입은 영향력이 없다

오버로딩의 장점

  • 하나의 이름으로 여러 메서드를 정의할 수 있어서 기억하기 쉽고 오류의 가능성도 줄일 수 있다
  • 메서드의 이름을 절약할 수 있다

가변인자와 오버로딩

  • 메서드의 매개변수 개수가 고정적이었으나 JDK1.5부터 동적으로 지정해 줄 수 있게 되었으며 이 기능을 가변인자라고 한다
  • 가변인자는 타입... 변수명 과 같은 형식으로 선언한다
  • 가변인자 외에 매개변수가 있다면 가변인자를 매개변수 중 제일 마지막에 선언해야 한다
  • 가변인자는 인자의 개수를 가변적으로 할 수 있다(인자가 아예 없어도 된다)
  • 가변인자는 내부적으로 배열을 이용하기 때문에 가변인자가 선언된 메서드를 호출할 때마다 배열이 새로 생성된다
  • 매개변수의 타입을 배열로 하면 반드시 인자를 지정해줘야 하기 때문에 인자가 생략 불가능하다
  • 가변인자를 오버로딩 할 때 오버로딩된 메서드끼리 구별이 잘 되지 않는 경우가 있기 때문에 주의해야 한다.

생성자

생성자란?

  • 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드
  • 인스턴스 초기화 작업에 주로 사용되며 인스턴스 생ㅇ성 시에 실행되어야 할 작업을 위해서 사용된다
  • 클래스 내에 선언, 이름은 클래스 이름과 같으며 리턴 값이 없다
  • 리턴값이 없으면 void를 붙여야 하지만 모든 생성자가 리턴값이 없으므로 void를 생략함
  • 생성자도 오버로딩이 가능하기 때문에 여러개의 생성자가 존재할 수 있다
  • 연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것이 아니다
  • Card c = new Card();
    - 연산자 new에 의해 메모리(heap)에 Card 클래스의 인스턴스가 생성
    - 생성자 Card()가 호출되어 수행
    - 연산자 new의 결과로 생성된 Card 인스턴스의 주소가 반환되어 참조변수 c에 저장

기본 생성자

  • 클래스에 정의된 생성자가 하나도 없을 때 기본 생성자가 컴파일러에 의해 추가됨

매개변수가 있는 생성자

  • 매개변수가 있는 생성자를 사용하면 인스턴스를 생성하는 동시에 원하는 값으로 초기화 할 수 있음

생성자에서 다른 생성자 호출하기

  • 생성자의 이름으로 클래스 이름 대신 this를 사용
  • 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다
    - 생성자 내에서 초기화 작업 도중 다른 생성자를 호출하게 되면, 호출된 다른 생성자 내에서도 멤버변수의 값을 초기화 할 것이므로 다른 생성자를 호출하기 이전의 초기화 작업이 무의미해질 수 있기 때문이다.
  • this는 참조변수로 인스턴스 자신을 가리킨다(인스턴스의 주소가 저장되어 있으며 모든 인스턴스메서드에 지역변수로 숨겨진 채 존재한다)
  • this를 사용할 수 있는 것은 인스턴스 멤버 뿐이고 static 메서드는 this를 사용할 수 없다
    - static 메서드는 인스턴스를 생성하지 않고돌 호출될 수 있으므로 static 메서드가 호출된 시점에 인스턴스가 존재하지 않을수도 있기 때문이다

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

  • 현재 사용하고 있는 인스턴스와 같은 상태를 갖는 인스턴스를 하나 더 만들고자 할 때 생성자를 이용할 수 있다

0개의 댓글