오버로딩(Overloading)과 오버라이딩(Overriding)

2024. 11. 26. 10:09·프로그래밍 언어/Java
728x90

 

오버로딩(Overloading)

정의

  • 같은 이름의 메서드가 다른 매개변수 목록(개수, 타입, 순서)으로 정의되는 것.

특징

 

  • 컴파일 시점에 호출할 메서드가 결정됨.
  • 반환값은 오버로딩과 관계없음.
  • 같은 클래스 내에서 정의.

 

오버라이딩(Overriding)

정의

  • 부모 클래스에서 정의한 메서드를 자식 클래스에서 재정의하는 것.

특징

 

  • 메서드 시그니처(이름, 매개변수, 반환 타입)가 부모 클래스와 동일해야 함.
  • 런타임 시점에 호출할 메서드가 결정됨(다형성 구현).
  • 접근 제어자는 부모 클래스의 메서드보다 넓거나 동일해야 함.
  • @Override 애너테이션을 통해 오버라이딩 여부를 명시.

 


 

차이

선언부(Signature), 동작 시점(컴파일 vs 런타임)

  1. 오버로딩
    • 메서드 이름은 같지만 매개변수 목록이 다름.
    • 컴파일 시점에 호출될 메서드가 결정됨.
    • 컴파일러는 호출 시 제공된 매개변수의 타입과 개수를 기준으로 가장 적합한 메서드를 선택.
  2. 오버라이딩
    • 메서드 시그니처가 부모 클래스와 동일.
    • 부모 클래스의 레퍼런스로 자식 객체를 참조할 때, 자식 클래스에서 재정의된 메서드가 호출됨(다형성).
    • 런타임 시점에 호출될 메서드가 결정됨.

 


 

예시

오버로딩

  • 스프링 컨트롤러:
    • 요청 매핑 메서드 이름을 유지하면서 다양한 요청 처리.
     
@GetMapping("/user")
public String getUser(@RequestParam String id) {
    return "유저 ID: " + id;
}

@GetMapping("/user")
public String getUser(@RequestParam String id, @RequestParam String name) {
    return "유저 ID: " + id + ", 이름: " + name;
}

 

 

오버라이딩

  • 스프링 서비스:
    • 부모 클래스(또는 인터페이스)의 공통 메서드를 재정의하여 서비스 동작을 커스터마이징
@Service
public class CustomUserService extends UserService {
    @Override
    public User findUserById(String id) {
        // 사용자 정의 로직 추가
        return super.findUserById(id);
    }
}

 

 

 


 

면접 질문

 

Q. 오버로딩과 오버라이딩의 차이를 설명하시오.

  • 오버로딩은 같은 이름의 메서드를 다른 매개변수 목록으로 정의하며, 컴파일 시점에 호출 메서드가 결정됩니다.
  • 오버라이딩은 부모 클래스의 메서드를 재정의하며, 런타임 시점에 호출 메서드가 결정됩니다.

 

Q. @Override 애너테이션의 역할은 무엇인가요?

  • 부모 클래스의 메서드를 정확히 재정의하도록 강제하여, 오타나 시그니처(매개변수, 반환 타입, 접근 제어자) 불일치를 방지합니다.
  • 오버라이딩의 명확성을 높이고, 코드 가독성과 유지보수성을 향상시킵니다.

 

Q. 오버라이딩에서 부모 메서드보다 접근 제어자를 넓게 설정해야 하는 이유는?

  • 부모 클래스의 메서드가 호출 가능한 모든 곳에서, 자식 클래스의 재정의된 메서드도 호출 가능해야 합니다.
  • 이를 위반하면 LSP(리스코프 치환 원칙)에 어긋납니다.
  • 예를 들어, 부모의 protected 메서드를 자식 클래스에서 private로 변경하면, 부모 타입으로 호출할 때 접근할 수 없게 됩니다.
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'프로그래밍 언어 > Java' 카테고리의 다른 글

가비지 컬렉션(Garbage Collection)  (1) 2024.12.09
비동기와 동기(Thread, synchronized, CompletableFuture)  (1) 2024.11.22
String, StringBuffer, StringBuilder? – 문자열 처리의 모든 것  (0) 2024.11.19
자바의 장단점을 알아보자.  (1) 2024.11.19
캡슐화와 은닉화의 차이 - 객체지향 프로그래밍(OOP)의 기본 원칙  (0) 2024.11.19
'프로그래밍 언어/Java' 카테고리의 다른 글
  • 가비지 컬렉션(Garbage Collection)
  • 비동기와 동기(Thread, synchronized, CompletableFuture)
  • String, StringBuffer, StringBuilder? – 문자열 처리의 모든 것
  • 자바의 장단점을 알아보자.
pink_salt
pink_salt
유익함을 주는 개발자가 되도록 keep going
  • pink_salt
    KeepGoingForever
    pink_salt
  • 전체
    오늘
    어제
    • 분류 전체보기 (117)
      • Project (7)
      • WEB study (3)
        • WEB(Springboot) (10)
        • Git, GitLab (13)
        • Clean code (1)
        • FrontEnd (3)
      • Study (21)
        • Algorithm (19)
        • 면접 준비 (2)
      • Cloud Computing (2)
        • AWS (2)
      • 프로그래밍 언어 (35)
        • Java (29)
        • Python (0)
        • javascript (6)
      • 운영체제 (0)
        • Linux (0)
      • Database (4)
        • MongoDB (8)
        • SQL (8)
      • 애플리케이션 개발 (1)
        • Android (1)
      • AI (1)
        • Deeplearning (1)
        • machinelearning (0)
      • Daily (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    객체지향
    git branch
    Database
    BFS
    오블완
    Java
    dp
    SW
    빅오표기법
    코딩이러닝
    gitlab
    자바
    언어
    티스토리챌린지
    SWEA
    Git
    codepresso
    코드프레소
    mysql
    대외활동
    IT교육
    코딩강의
    Query
    개념
    백준
    무료코딩교육
    spring boot
    python
    MongoDB
    무료IT교육
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
pink_salt
오버로딩(Overloading)과 오버라이딩(Overriding)
상단으로

티스토리툴바