JAVA

자바 오버로딩 , 오버라이딩

euicheol0910 2025. 4. 18. 16:05

오버로딩(Overloading)

 

오버로딩(Overloading)이라는 뜻은 사전적으로 '과적하다.'라는 뜻이다. C언어에서는 함수명이 고유하게 존재해야 한다. 즉 하나의 함수가 하나의 기능만을 구현해야 한다는 것이다. 하지만 자바에서는 하나의 메소드 이름으로 여러 기능을 구현하기 때문에 '과적하다.'라는 뜻의 이름을 붙여준 것으로 보인다.

 

오버로딩의 정의는 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다는 뜻이다.

 

오버로딩을 사용하는 이유는 크게 다음과 같다.

 

1. 같은 기능을 하는 메소드를 하나의 이름으로 사용할 수 있다.

우리가 흔히 콘솔창에 텍스트를 출력할 때 사용하는 println라는 메소드를 대표적인 예로 들어볼 수 있다. 실은 이 함수가 오버로딩의 결정체이다. 우리는 println의 인자 값으로 int, double, boolean, String 등의 아주 다양한 타입의 매개변수들을 집어넣어도 우리는 그 함수들이 어떻게 실행되지는 모르지만 콘솔창에 아주 잘 출력해주는 것을 볼 수 있다.
이렇게 '출력하다.'라는 같은 기능을 가진 메소드들를 println이라는 하나의 이름으로 정의가 가능한 것이다.

 

2. 메소드의 이름을 절약할 수 있다.

 

오버로딩이 없다고 가정해보자.프로젝트를 하게되면 보통 많은 메소드를 정의하고 실행해야한다. 그런데 이렇게 많은 메소드를 정의하게 되면 개발자는 점점 메소드의 이름이 고갈되어 짓기도 힘들어지고, 같은 기능을 수행하는 메소드의 이름도 각각 다르게 지어야한다. 이런 애로 사항을 해소시켜주는 게 오버로딩이라고 할 수 있다.

 

 

오버라이딩(Overriding)

 

부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것을 오버라이딩이라고 한다. 상속받은 메소드를 그대로 사용할 수도 있지만, 자식 클래스에서 상황에 맞게 변경해야하는 경우 오버라이딩할 필요가 생긴다.

 

**오버라이딩의 조건

 

오버라이딩은 부모 클래스의 메소드를 재정의하는 것이므로, 자식 클래스에서는 오버라이딩하고자 하는 메소드의 이름, 매개변수, 리턴 값이 모두 같아야 한다. 

 

오버라이딩에서 접근 제어자를 설정하는 규칙이 존재한다.

 

1. 자식 클래스에서 오버라이딩하는 메소드의 접근 제어자는 부모 클래스보다 더 좁게 설정할 수 없다.

 

위에서 볼 수 있듯이 부모클래스의 접근제어자는 default로 설정되어 있다. 여기서 자식 클래스들은 default보다 같거나 더 넓은 범위의 접근제어자만 설정할 수 있으므로 default, protected, public 이 세 개의 접근 제어자는 사용이 가능하다.

 

2. 예외(Exception)는 부모 클래스의 메소드 보다 많이 선언할 수 없다.

 

부모 클래스에서 어떤 예외를 throws 한다고 하면, 자식 클래스에서는 그 예외보다 더 큰 범위의 예외를 throws할 수 없다는 것이다.

 

3. static메소드를 인스턴스의 메소드로 또는 그 반대로 바꿀 수 없다.

 

부모 클래스의 static메소드를 자식에서 같은 이름으로 정의할 수 있지만 이것은 다시 정의하는 것이 아니라 같은 이름의 static메소드를 새로 정의하는 것이다.

 

 

'JAVA' 카테고리의 다른 글

자바의 제네릭에 대하여  (3) 2025.04.23
자바 인터페이스  (6) 2025.04.22
자바의 특성(장점)  (2) 2025.04.17
JVM이란?  (4) 2025.04.16
접근제한자  (0) 2025.01.08