반응형
✅ 오버로딩 Overloading
같은 이름의 메서드를 여러 개 정의한다.
메서드의 이름은 같지만, 매개변수의 개수, 타입, 순서가 다르기 때문에 컴파일러는 각각의 메서드를 다른 메서드로 인식하여 처리한다.
오버로딩을 사용하면 메서드 이름을 다양하게 사용하지 않고도 같은 기능을 하는 여러 개의 메서드를 선언할 수 있다.
오버로딩된 메서드를 호출할 때는 전달하는 인자의 타입, 개수, 순서에 따라 알맞은 메서드가 선택되어 호출된다.
이를 매개변수의 다형성(Polymorphism)이라고 한다.
💡 다형성 Polymorphism
객체지향 프로그래밍에서 하나의 메서드나 클래스가 여러 개의 다른 동작을 수행할 수 있는 능력이다.
즉, 같은 코드에서 다양한 형태로 동작할 수 있다.
- 오버로딩(Overloading)
- 같은 이름의 메서드를 여러 개 정의하고, 매개변수의 개수나 타입을 다르게 하여 사용한다.
- 메서드의 이름을 다양하게 지을 필요 없이, 같은 이름의 메서드를 여러 개 사용할 수 있다.
- 오버라이딩(Overriding)
- 상위 클래스에서 정의된 메서드를 하위 클래스에서 동일한 이름의 메서드로 다시 정의한다.
- 하위 클래스에서 정의한 메서드는 상위 클래스에서 정의된 메서드를 덮어쓰게 되며, 상속받은 메서드를 재정의하여 사용한다.
💡 오버로딩 조건
오버로딩 조건을 만족하지 못하면 중복 정의로 간주되어 컴파일 시 에러가 발생한다.
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
- 반환 타입은 오버로딩을 구현하는데 아무런 영향을 주지 않는다.
class Ex6_10 {
public static void main(String args[]) {
MyMath3 mm = new MyMath3();
// int add(int a, int b) 메소드 호출
System.out.println("mm.add(3, 3) 결과:" + mm.add(3,3));
// long add(int a, long b) 메소드 호출
System.out.println("mm.add(3L, 3) 결과: " + mm.add(3L,3));
// long add(long a, int b) 메소드 호출
System.out.println("mm.add(3, 3L) 결과: " + mm.add(3,3L));
// long add(long a, long b) 메소드 호출
System.out.println("mm.add(3L, 3L) 결과: " + mm.add(3L,3L));
// int add(int[] a) 메소드 호출
int[] a = {100, 200, 300};
System.out.println("mm.add(a) 결과: " + mm.add(a));
}
}
class MyMath3 {
// 두 개의 int 타입 매개변수를 받아서 덧셈을 수행하고 결과를 반환하는 메소드
int add(int a, int b) {
System.out.print("int add(int a, int b) - ");
return a+b;
}
// 하나는 int, 하나는 long 타입 매개변수를 받아서 덧셈을 수행하고 결과를 반환하는 메소드
long add(int a, long b) {
System.out.print("long add(int a, long b) - ");
return a+b;
}
// 하나는 long, 하나는 int 타입 매개변수를 받아서 덧셈을 수행하고 결과를 반환하는 메소드
long add(long a, int b) {
System.out.print("long add(long a, int b) - ");
return a+b;
}
// 두 개의 long 타입 매개변수를 받아서 덧셈을 수행하고 결과를 반환하는 메소드
long add(long a, long b) {
System.out.print("long add(long a, long b) - ");
return a+b;
}
// int 배열 매개변수를 받아서 배열의 모든 요소를 더한 결과를 반환하는 메소드
int add(int[] a) {
System.out.print("int add(int[] a) - ");
int result = 0;
for(int i=0; i < a.length;i++)
result += a[i];
return result;
}
}
int add(int a, int b) - mm.add(3, 3) 결과:6
long add(int a, long b) - mm.add(3L, 3) 결과: 6
long add(long a, int b) - mm.add(3, 3L) 결과: 6
long add(long a, long b) - mm.add(3L, 3L) 결과: 6
int add(int[] a) - mm.add(a) 결과: 600
💡 print() 메서드
print() 메서드는 다양한 인자를 받아서 다양한 출력 형태로 출력할 수 있는 메서드이다.
- print(boolean b) : boolean 값을 출력한다.
- print(char c) : char 값을 출력한다.
- print(char[] s) : char 배열 전체를 출력한다.
- print(double d) : double 값을 출력한다.
- print(float f) : float 값을 출력한다.
- print(int i) : int 값을 출력한다.
- print(long l) : long 값을 출력한다.
- print(Object obj) : Object의 toString() 메서드를 호출하여 문자열로 변환 후 출력한다.
- print(String s) : String 값을 출력한다.
- print(String format, Object... args) : 형식 문자열(format)과 가변 인자(args)를 받아서 형식화된 문자열을 출력한다.
System.out.print("Hello, World!"); // String 값을 출력
System.out.print(3); // int 값을 출력
System.out.print(true); // boolean 값을 출력
System.out.print(3.14); // double 값을 출력
System.out.printf("이름: %s, 나이: %d세", "홍길동", 30); // 형식화된 문자열 출력
반응형
'기타 > 백엔드 기초' 카테고리의 다른 글
자바 Java | import문 사용법과 단축키 (0) | 2023.03.07 |
---|---|
자바 Java | 패키지(Package)의 개념과 활용 방법 (0) | 2023.03.07 |
자바 Java | 상속(Inheritance) 개념과 구현 방법: 단일 상속, 상속 구현, super, Object 클래스 (0) | 2023.02.16 |
자바 Java | 생성자(Constructor) 개념: 객체 초기화의 핵심, this() 키워드, 생성자 간 호출 방법 (0) | 2023.02.16 |
자바 Java | 호출 스택(Call Stack) 구조와 원리: 메서드 실행 과정의 이해 (0) | 2023.02.16 |
자바 Java | 객체지향 프로그래밍(OOP)의 핵심 개념: 객체, 클래스, 메소드, 참조 변수에 대한 이해와 활용 방법 (0) | 2023.02.16 |
자바 Java | 문자열 다루기: String 클래스와 커맨드 라인 인자 사용 방법 (0) | 2023.02.16 |
자바 Java | 배열(Array) 다루기: 선언, 생성, 접근, Arrays 클래스 활용 (0) | 2023.02.15 |