메서드 오버로딩 ~

호이잇·2023년 7월 4일
0

JAVA

목록 보기
9/12

메서드 오버로딩

  • 하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 것을 메서드 오버로딩, 간단히 오버로딩이라고 한다.

오버로딩의 조건

  • 메서드의 이름이 같아야 한다.

  • 매개변수의 개수 또는 타입이 달라야 한다.

  • 메개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않음
    (리턴타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.)

    생성자

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

  • 인스턴스 변수의 초기화 또는 인스턴스 생성시 수행할 작업에 사용

  • 몇가지 조건을 제외하고는 메서드와 같다.

  • 모든 클래스에는 반드시 하나 이상의 생성자가 있어야한다.

  • 인스턴스 초기화 - 인스턴스 변수에 적절한 값을 저장하는것

    생성자의 조건

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

  • 생성자는 리턴값이 없다. (하지만 void를 쓰지 않는다.)

기본 생성자

  • 매개변수가 없는 생성자
  • 클래스에 생성자가 하나도 없으면 컴파일러가 기본 생성자를 추가한다.
    (생성자가 하나라도 있으면 컴파일러는 기본 생성자를 추가하지 않는다.)

    모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.

    매개변수가 있는 생성자

생성자에서 다른 생성자 호출 - this()

this() -생성자, 같은 클래스의 다른 생성자를 호출할 때 사용 다른 생성자 호출은 생성자의 첫 문장에서만 가능

참조변수 this

this - 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어있음 모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재

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

상속

  • 기존의 클래스를 재사용해서 새로운 클래스를 작성하는것.
  • 두 클래스를 조상과 자손으로 관게를 맺어주는 것.
  • 자손은 조상의 모든 멤버를 상속받는다.(생성자, 초기화블럭 제외)
  • 자손의 멤버개수는 조상보다 적을 수 없다.(같거나 많다.)

클래스간의 관계 - 상속관계

  • 공통부분은 조상에서 관리하고 개별부분은 자손에서 관리한다.
  • 조상의 변경은 자손에 영향을미치지만, 자손의 변경은 조상에 아무런 영향을 미치지 않는다.
    ex) 원(Circle)은 도형(Shape)이다.

클래스간의 관계 - 포함관계 (composite)

  • 한 클래스의 멤버 변수로 다른 클래스를 선언하는 것
  • 작은 단위의 클래스를 먼저 만들고, 이 들을 조합해서 하나의 커다란 클래스를 만든다.

단일상속 (Single Inheritance)

  • Java는 단일상속만을 허용한다.

Object클래스 - 모든 클래스의 최고조상

  • 조상이 없는 클래스는 자동적으로 Object클래스를 상속받게 된다.
  • 상속계층도의 최상위에는 Object클래스가 위치한다.
  • 모든 클래스에는 Object클래스에 정의돈 11개의 메서드를 상속받는다.

오버라이딩(Overriding)

  • 조상클래스로부터 상속받은 메서드의 내용을 상속받는 클래스에 맞게 변경하는 것을 오버라이딩이라고 한다.

오버라이딩의 조건

  • 선언부가 같아야 한다.(이름, 매개변수, 리턴타입)
  • 접근제어자를 좁은 범위로 변경할 수 없다.
    -조상의 메서드가 protected라면, 범위가 같거나 넓은 protected나 public으로만 변경할 수 있다.
  • 조상크래스의 메서드보다 많은 수의 예외를 선언할 수 없다.

오버로딩 vs 오버라이딩

참조변수(super)

  • this : 인스턴스 자신을 가리키는 참조변수, 인스턴스의 구조가 저장되어있다. 모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재한다.
  • super : this와 같다. 조상의 멤버와 자신의 멤버를 구별하는
    데 사용된다.

패키지(Package)

  • 서로 관련된 클래스와 인터페이스의 묶음.
  • 클래스가 물리적으로 클래스파일(.class)인 것처럼, 패키지는 물리적으로 폴더이다. 패키지는 서브패키지를 가질 수 있으며, '.'으로 구분한다.
  • 클래스의 실제 이름은 패키지명이 포함된 것이다.
    (String클래스의 full name은 java.lang.String)

import문

  • 사용할 클래스가 속한 패키지를 지정하는데 사용.
  • import문을 사용하면 클래스를 사용할 때 패키지명을 생략할 수 있다.
  • import문은 패키지문과 클래스선언 사이에 선언한다.

제어자

  • 클래스, 변수, 메서드의 선언부에 사용되어 부가적인 의미를 부여한다.
  • 제어자는 크게 접근 제어자와 그 외의 제어자로 나뉜다.
  • 하나의 대상에 여러 개의 제어자를 조합해서 사용할 수 있으나, 접근제어자는 단 하나만 사용할 수 있다.

static - 클래스의, 공통적인

final - 마지막의, 변경될 수 없는

abstract - 추상의, 미완성의

접근 제어자 (Access modifier)

  • 멤버 또는 클래스에 사용되어, 외부로부터의 접근을 제한한다.

제어자의 조합

업로드중..

  • 메서드에 static과 abstract를 함께 사용할 수 없다.
    - static메서드는 몸통(구현부)이 있는 메서드에만 사용할 수 있기 때문이다.
  • 클래스에 abstract와 final을 동시에 사용할 수 없다.
    - 클래스에 사용되는 final은 클래스를 확장할 수 없다는 의미이고, abstract는 상속을 통해서 완성되어야 한다는 의미이므로 서로 모순되기 때문이다.
  • abstract메서드의 접근제어자가 private일 수 없다.
    - abstract메서드는 자손클래스에서 구현해주어야 하는데 접근 제어자가 private이면, 자손클래스에서 접근할 수 없기 때문이다.
    메서드에 private와 final을 같이 사용할 필요는 없다.
    - 접근 제어자가 private인 메서드는 오버라이딩될 수 없기 때문이다. 이 둘 중 하나만 사용해도 의미가 충분하다.
profile
코린이의 전원일기

0개의 댓글