- [Java] Java 다형성과 오버로딩, 오버라이딩2023년 05월 15일
- 조별하
- 작성자
- 2023.05.15.:56
🍃 Java 다형성
✔️ 다형성 이란 하나의 함수, 클래스가 다양한 방법으로 동작하는 것을 말한다. Java에서는 주로 오버로딩(Overloading)과 오버라이딩(Overriding) 을 통해서 다형성을 지원한다.
🌱 오버로딩(Overloading) : 확장
✔️ 함수가 여러 개의 동일한 이름을 가지며 매개변수의 유형과 개수 가 다르게 설정되어 사용하는 것을 의미한다.
✔️ 오버로딩은 함수 오버로딩 과 생성자 오버로딩 이 있으며 실제 적용되는 것은 같다. 같은 이름의 함수를 여러 개 정의하고, 매개변수의 유형과 개수를 다르게 하여 다양한 유형의 호출에 응답할 수 있게 하는 방식이다.(일반적으로 하나의 클래스 안에 동일한 이름의 함수를 작성하게 되면 에러가 발생한다.)
➤ 오버로딩 예제
public class Overloading { public void overloading() { System.out.println("매개변수 없는 함수"); } public void overloading(int a, int b) { System.out.println("int형 인자 2개를 요청하는 함수: " + a + ", " + b); } public void overloading(String str) { System.out.println("String형 인자 1개를 요청하는 함수: " + str); } } public class App { public static void main(String[] args) throws Exception { Overloading old = new Overloading(); old.overloading(); old.overloading(2, 3); old.overloading("문자형 오버로딩 함수"); } }
➤ 오버로딩 특징
✔️ 오버로딩의 특징은 접근 제어자를 자유롭게 지정할 수 있다.- 오버로딩된 각 함수의 접근 제어자를 public, default, protected, private으로 다르게 지정해 줘도 무관한다. 하지만 같은 매개변수 개수와 타입을 가지면서 접근 제어자만 다르게 한다고 오버로딩이 되지는 않는다.
- 매개변수는 동일하고 반환 타입이 다른 경우는 오버로딩이 성립되지 않는다.
➤ 오버로딩을 사용하는 이유
- 같은 기능을 하는 함수를 하나의 이름으로 사용할 수 있다.
- 함수의 이름을 절약할 수 있다.
✔️ 많이 사용하는 println() 함수는 오버로딩 되어 있기 때문에 int형, String형, boolean형, char형 인자 모두 받아서 동작할 수 있다.
✔️ 만약 오버로딩을 이용하지 않는다면 printlnInt(), printlnString() 등 각각 함수의 이름을 따로 만들어줘야 한다.🌱 오버라이딩(Overriding) : 재정의
✔️ 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용하는 것을 의미한다.
✔️ 상위 클래스가 가지고 있는 멤버 변수가 하위 클래스로 상속되는 것처럼 상위 클래스가 가지고 있는 함수도 하위 클래스로 상속되어 하위 클래스에서 사용할 수 있다.
- 상속받은 함수를 그대로 사용할 수 있고, 필요에 따라 재정의하여 사용할 수 있음
class Parent { public void overriding() { System.err.println("부모 메서드 내용"); } } class Child extends Parent{ @Override public void overriding() { super.overriding(); System.err.println("부모 클래스의 함수를 상속받은 함수"); } } public class App { public static void main(String[] args) throws Exception { Parent parent = new Parent(); parent.overriding(); Child child = new Child(); child.overriding(); } }
➤ 오버라이딩 특징
- 상위 클래스의 함수보다 접근 제어자를 더 좁은 범위로 변경할 수 없다.
- 상위 클래스의 함수보다 더 큰 범위의 예외를 선언 할 수 없다.
- 상위 클래스의 static 함수는 클래스에 속하는 함수이기 때문에 상속되지 않고 오버라이드 되지도 않는다.(static 함수는 다형성이 적용되지 않는다.)
- final이 지정된 함수 역시 오버라이드를 할 수 없으며, private 접근 제어자를 가진 함수는 상속 자체가 불가능하다.
➤ @Overrde 어노테이션❗️
✔️ @Override 어노테이션이 적용되지 않은 상태에서는 전에 오버라이드 한 메서드가 업데이트 이후 그냥 추가적인 메서드로 인식되어 컴파일 오류가 발생하지 않는다. 이때 @Override 어노테이션을 적용함으로써 의도적으로 컴파일 오류를 일으켜 작동방식이 바뀌는 것을 대비할 수 있다.✔️ 또한 @Override를 표시함으로써 코드 리딩 시에 해당 메서드가 오버라이딩하였다는 것을 쉽게 파악할 수 있다는 장점이 있다.
'LANGUAGES > Java' 카테고리의 다른 글
[Java] 맥북에서 Java 환경세팅(VSCODE) (0) 2023.05.15 [JAVA] CHAPTER1. 자바 시작하기 (0) 2022.05.11 [기본] Java 환경변수 설정 (0) 2022.04.22 [STS] Eclipse(Spring Boot) 환경 세팅 (0) 2022.04.22 [JAVA] 이것이 자바다!! (2) 2021.12.22 다음글이전글이전 글이 없습니다.댓글