Skip to content

Latest commit

 

History

History
137 lines (99 loc) · 5.08 KB

2024-05-18.md

File metadata and controls

137 lines (99 loc) · 5.08 KB

날짜: 2024-05-18


🌤️ 스크럼

  • 학습 목표 1 : 자바의 오버로딩과 오버라이딩 공부하기

⚡️ 새로 배운 내용

[ 오버로딩(Overloading) ]

자바의 한 클래스 내에 이미 사용 중인 이름을 가진 메소드를 추가로 정의하는 것

  • 메소드 이름은 같지만 매개변수의 개수나 타입이 다르다.
  • 반환 값만 다르게 지정하는 것은 오버로딩이 아니다.
  • 접근 제어자를 자유롭게 지정할 수 있다.
  • 즉, 오버로딩은 매개변수의 타입, 개수, 순서의 차이로만 구현할 수 있다.
class OverloadingMethods {
	public void print() {
		System.out.println("오버로딩1");
	}

	String print(Integer a) {
		System.out.println("오버로딩2");
		return a.toString();
	}

	void print(String a) {
		System.out.println("오버로딩3");
		System.out.println(a);
	}

	String print(Integer a, Integer b) {
		System.out.println("오버로딩4");
		return a.toString() + b.toString();
	}
}

class OverloadingTest {

	public static void main(String[] args) {
		OverloadingMethods om = new OverloadingMethods();

		om.print(); // 오버로딩1
		System.out.println(om.print(3)); // 오버로딩2 3
		om.print("Hello!"); // 오버로딩3 Hello!
		System.out.println(om.print(4, 5)); // 오버로딩4 45
	}
}
  • 사용하는 이유

    • 같은 기능을 하는 메소드에 대해 같은 이름을 부여할 수 있다.
    • 메소드 이름을 절약할 수 있다.

    → 개발자가 일관된 이름을 사용하여 메소드를 호출할 수 있다.

[ 오버라이딩(Overriding) ]

부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것

  • 메소드 시그니처(메소드 이름, 매개변수, 반환 타입)가 같아야 한다.
  • 자식 클래스에서 오버라이딩하는 메소드의 접근 제어자는 부모 클래스의 메소드보다 좁은 범위로 지정할 수 없다.
  • static 메소드는 오버라이딩할 수 없다.
  • 부모 클래스에서 선언한 예외보다 더 많은 종류의 예외를 throws 할 수 없다.
class Parent {
  void print() {
    System.out.println("부모 클래스의 메소드");
  }
}

class Child extends Parent {
  @Override
  void print() {
    System.out.println("자식 클래스의 메소드");
  }
}

class OverridingTest {
  public static void main(String[] args) {
    Parent p = new Parent();
    p.print(); // 부모 클래스의 메소드

    Child c = new Child();
    c.print(); // 자식 클래스의 메소드
  }
}
  • 사용하는 이유

    • 부모 클래스의 메소드를 자식 클래스에서 재정의하여 사용할 수 있다.
    • 다형성을 구현할 수 있다.
  • @Override란?

    • 컴파일러에게 이 메소드가 오버라이딩된 메소드임을 알려주는 역할을 한다.
    • 만약 오버라이딩된 메소드가 부모 클래스의 메소드와 시그니처가 다르다면 컴파일 에러가 발생한다.

정리

구분 오버로딩(Overloading) 오버라이딩(Overriding)
정의 같은 이름의 메소드를 여러 개 정의하는 것 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것
메소드 이름 같음 같음
매개변수 다름 같음
반환 타입 상관 없음 같음
접근 제어자 상관 없음 부모 클래스의 메소드보다 좁은 범위로 지정할 수 없음
static 상관 없음 오버라이딩할 수 없음
예외 상관 없음 부모 클래스의 메소드보다 더 많은 종류의 예외를 throws 할 수 없음
적용 범위 같은 클래스 내 부모 클래스와 자식 클래스 사이

🔥 오늘의 도전 과제와 해결 방법


🤔 오늘의 회고

  • 스크럼 중 완료한 작업: 오버로딩과 오버라이딩 공부하기
  • 오버로딩과 오버라이딩의 개념을 이해하고, 각각의 특징을 정리할 수 있었다.
  • @Override가 어떤 용도인지 알게 되었다. 아래의 메소드에 기능을 추가하는 키워드(?)라고 생각했는데, 단순히 오버라이딩된 메소드임을 알려주는 역할을 한다는 것을 알게 되었다.
    • 어노테이션(Annotation)에 대해 추가 공부가 필요할 것 같다!

참고 자료 및 링크