1. 메서드란 무엇인가?
- 메서드는 특정 작업을 수행하기 위해 작성된 코드 블록입니다.
- 재사용 가능한 코드를 작성하는 데 사용되며, 유지보수성과 가독성을 높여줍니다.
- Java에서 메서드는 클래스 안에 정의되며 객체 지향 프로그래밍의 핵심 구성 요소입니다
public class MethodExample {
// 메서드 선언 (정적 메서드)
public static int addNumbers(int a, int b) {
// 두 숫자의 합을 반환하는 메서드
return a + b;
}
// void 메서드 (반환값 없음)
public static void printMessage(String message) {
// 메시지를 출력하는 메서드
System.out.println("Message: " + message);
}
public static void main(String[] args) {
// 메서드 호출
int result = addNumbers(5, 10); // 5와 10을 더한 결과를 반환
System.out.println("Result: " + result);
printMessage("Hello, Java!"); // 메시지를 출력
}
}
2. Java 메서드의 구조
Java 메서드는 특정 작업을 수행하거나 값을 반환하는 코드 블록으로, 일정한 구조를 따릅니다. 메서드의 구조를 이해하면 다양한 메서드를 작성하고 활용할 수 있습니다.
access_modifier return_type method_name(parameter_list) {
// 메서드의 실행 블록
}
3. 메서드 오버로딩 (Method Overloading)
- 메서드 오버로딩은 같은 이름의 메서드를 여러 개 정의하되, 매개변수의 개수, 타입, 순서를 다르게 지정하여 구분하는 기법입니다.
- 같은 이름의 메서드를 재사용하므로, 코드의 가독성을 높이고 유지보수를 용이하게 만듭니다.
- 오버로딩은 반환 타입만 다르게 해서 구현할 수는 없습니다. (매개변수가 반드시 달라야 함)
오버로딩의 규칙
- 메서드 이름은 동일해야 합니다.
- 매개변수의 개수, 타입, 순서가 달라야 합니다.
- 반환 타입만 다른 경우 오버로딩이 불가능 합니다.
public class MethodOverloadingExample {
// 오버로딩 메서드 1: 매개변수 없음
public void greet() {
System.out.println("Hello!");
}
// 오버로딩 메서드 2: 매개변수가 하나 (이름)
public void greet(String name) {
System.out.println("Hello, " + name + "!");
}
// 오버로딩 메서드 3: 매개변수가 두 개 (이름과 나이)
public void greet(String name, int age) {
System.out.println("Hello, " + name + "! You are " + age + " years old.");
}
// 오버로딩 메서드 4: 매개변수의 순서가 다름
public void greet(int age, String name) {
System.out.println("Hello, " + name + "! Your age is " + age + ".");
}
public static void main(String[] args) {
MethodOverloadingExample example = new MethodOverloadingExample();
// 오버로딩된 메서드 호출
example.greet(); // 매개변수 없음
example.greet("Alice"); // 이름만 전달
example.greet("Bob", 25); // 이름과 나이 전달
example.greet(30, "Charlie"); // 나이와 이름 전달
}
}
결과
Hello!
Hello, Alice!
Hello, Bob! You are 25 years old.
Hello, Charlie! Your age is 30.
4. 메서드 오버라이딩 (Method Overriding)
- 오버라이딩은 상속받은 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것을 말합니다.
- 부모 클래스의 기본 동작을 자식 클래스에서 커스터마이징하기 위해 사용합니다.
- 오버라이딩된 메서드는 부모 클래스의 메서드와 이름, 매개변수, 반환 타입이 동일해야 합니다.
오버라이딩의 규칙
- 메서드 이름, 매개변수 리스트, 반환 타입이 부모 클래스와 동일해야 합니다.
- 접근 제어자는 부모 클래스의 메서드보다 더 제한적으로 설정할 수 없습니다.
- 예: 부모 메서드가 public이라면 자식 메서드는 protected나 private으로 설정할 수 없습니다.
- @Override 어노테이션을 사용해 오버라이딩임을 명시합니다.
- 컴파일러가 오버라이딩 규칙을 검증하며 실수를 방지할 수 있습니다.
- 부모 클래스의 메서드가 final로 선언되어 있으면 오버라이딩이 불가능합니다.
- 부모 클래스의 메서드가 static이면 오버라이딩 대신 **숨김(hiding)**이 발생합니다.
// 부모 클래스
class Animal {
// 부모 클래스의 메서드
public void sound() {
System.out.println("Animals make sounds");
}
}
// 자식 클래스
class Dog extends Animal {
@Override
public void sound() {
// 부모 메서드를 재정의
System.out.println("Dog barks");
}
}
// 또 다른 자식 클래스
class Cat extends Animal {
@Override
public void sound() {
System.out.println("Cat meows");
}
}
public class MethodOverridingExample {
public static void main(String[] args) {
// 부모 클래스 참조로 자식 객체 생성
Animal myAnimal = new Animal();
Animal myDog = new Dog();
Animal myCat = new Cat();
// 메서드 호출
myAnimal.sound(); // Animals make sounds
myDog.sound(); // Dog barks
myCat.sound(); // Cat meows
}
}
결과
Animals make sounds
Dog barks
Cat meows
마무리
Java 메서드는 객체 지향 프로그래밍에서 가장 기본적이고 중요한 요소 중 하나로, 프로그램의 구성과 실행을 가능하게 만듭니다.
'java' 카테고리의 다른 글
| Signature 에 관하여 (0) | 2025.01.22 |
|---|---|
| BufferedReader와 Scanner의 차이 및 비교 (0) | 2025.01.21 |
| 숏서킷 연산에 관하여 (0) | 2025.01.20 |
| Interface 에 관하여 (1) | 2025.01.19 |
| Java 에 관하여 (2) | 2025.01.15 |