Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 데이터베이서
- flatten
- 머신러닝야학
- tensorflow
- LeNet
- 데이터베이스 개론
- 딥러닝
- reshape
- Java
- 생활코딩
- CNN
- 머신러닝
- 연산자
- pandas
- JavaScript
- 이것이 자바다
- 파이썬
- 생활코딩 데이터베이스
- 머신러닝(딥러닝)
- 판다스
- Database
- 생활코딩 머신러닝야학
- 개발자
- 카카오클라우드스쿨2기
- 야학
- 데이터베이스
- Python
- MySQL
Archives
- Today
- Total
IT's 우
오버로딩(Overloading) vs 오버라이딩(Overriding) 본문
728x90
객체 지향 프로그래밍 특징 중 하나인 다형성과 밀접한 연관
2023.07.26 - [CS/Java] - 객체 지향 프로그래밍(OOP) 특징
다형성: 어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태를 가질 수 있는 성질
오버로딩(Overloading)
오버로딩(Overloading)은 사전적으로 ‘과적하다’라는 뜻이다.
C언어에서는 함수명이 고유하게 존재해야 하지만 자바에서는 하나의 메서드 이름으로 여러 기능을 구현 가능하다.
오버로딩 정의
자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다. (중복 정의)
오버로딩의 조건
- 메소드의 이름이 같고, 매개변수의 개수나 타입이 달라야 한다.
- 주의할 점: 리턴 값만 다른 것은 오버로딩을 할 수 없다.
class OverloadingTest {
public static void main(String[] args) {
OverloadingMethods om = new OverloadingMethods();
om.print();
System.out.println(om.print(3));
om.print("Hello!");
System.out.println(om.print(4, 5));
}
}
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();
}
}
→ 매개변수의 차이로만 구현 가능
→ 접근 제어자, 리턴 값 자유롭게 지정 가능
오버로딩 사용 이유
- 같은 기능을 하는 메서드를 하나의 이름으로 사용 가능
- 메서드의 이름을 절약할 수 있다.
Ex) DTO, Entitiy
오버라이딩(Overriding)
오버라이딩 정의
부모 클래스로부터 상속받은 메서드를 자식 클래스에서 재정의하는 것
오버라이딩 조건
- 오버라이딩은 부모 클래스의 메소드를 재정의하는 것이므로, 자식 클래스에서는 오버라이딩하고자 하는 메서드의 이름, 매개변수, 리턴 값이 모두 같아야 한다.
public class OverridingTest {
public static void main(String[] args) {
Person person = new Person();
Child child = new Child();
Senior senior = new Senior();
person.cry();
child.cry();
senior.cry();
}
}
class Person {
void cry() {
System.out.println("흑흑");
}
}
class Child extends Person {
@Override
protected void cry() {
System.out.println("잉잉");
}
}
class Senior extends Person {
@Override
public void cry() {
System.out.println("훌쩍훌쩍");
}
}
오버로딩 vs 오버라이딩
오버로딩 - 기존에 없는 새로운 메서드 추가하는 것
오버라이딩 - 상속받은 메서드를 재정의하는 것
구분 | Overriding | Overloading |
접근 제어자 | 부모 클래스의 메소드의 접근 제어자보다 더 넓은 범위의 접근 제어자를 자식 클래스의 메소드에서 설정할 수 있다. | 모든 접근 제어자를 사용할 수 있다. |
리턴형 | 동일해야 한다. | 달라도 된다. |
메소드명 | 동일해야 한다. | 동일해야 한다. |
매개변수 | 동일해야 한다. | 달라야만 한다. |
적용 범위 | 상속관계에서 적용된다. | 같은 클래스 내에서 적용된다. |
참고
728x90
반응형
'CS > Java' 카테고리의 다른 글
자바 컬렉션 프레임워크(Collection Framework) (0) | 2023.07.26 |
---|---|
객체 지향 프로그래밍(OOP) 특징 (0) | 2023.07.26 |
[java] 리플렉션(Reflection) (0) | 2023.07.14 |
[java] 추상 클래스와 인터페이스 차이 (0) | 2023.07.14 |
[java] final vs finally vs finalize (0) | 2023.06.30 |