자바의 메서드 작성 및 호출
이번 글에서는 자바에서 메서드를 작성하고 호출하는 방법에 대해 알아보겠습니다. 예제 코드와 함께 간단히 정리해보았으니 참고하시면 좋겠습니다.
먼저 AnimalMain 클래스를 살펴봅시다.
public class AnimalMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
Dog biggle = new Dog();
Cat tuxido = new Cat();
biggle.sound();
biggle.breathe();
tuxido.sound();
tuxido.breathe();
}
}
여기서 보시다시피 Dog와 Cat이라는
클래스가 있습니다.
기본 자바 라이브러리에 존재하지 않는 클래스이므로, 직접 정의한 사용자 클래스임을 알 수 있습니다.
이 두 클래스는 아래에서 살펴볼 Animal
클래스를 상속받습니다.
public abstract class Animal {
public String kind;
public void breathe() {//일반메소드
System.out.println(this.kind+" 숨을쉽니다");
}
public abstract void sound(); //추상메소드
}
추상 클래스: abstract 키워드를 통해 선언하며,
추상 메서드를 포함할 수 있습니다.
추상 메서드: 메서드의 선언부만 있고,
실제 구현은 자식 클래스가
재정의(Override)해야 합니다.
위 코드에서
breathe()는 일반 메서드로,
모든 Animal 클래스의 자식들이 사용 가능합니다.
sound()는 추상 메서드로,
Animal을 상속받는 클래스들은 반드시 sound()를 재정의해야 합니다.
public class Cat extends Animal {
public Cat() {
this.kind="냥이";
}
@Override
public void sound() {
// TODO Auto-generated method stub
System.out.println(this.kind+"=냐옹");
}
}
extends Animal: Animal 추상 클래스를 상속받습니다.
@Override: 부모 클래스(또는 인터페이스)의
메서드를 자식 클래스에서 재정의한다는 표시입니다.
this.kind: 생성자에서 kind 필드를 "냥이"로 설정합니다.
추상 메서드 sound()를 재정의하여 "냐옹" 소리를 내도록 설정했습니다.
위와 동일한 방식으로 Dog 클래스도 Animal을 상속받아 sound() 메서드를 재정의합니다. 예를 들어:
public class Dog extends Animal {
public Dog() {
this.kind = "강아지";
}
@Override
public void sound() {
System.out.println(this.kind + "=멍멍");
}
}
AnimalMain 클래스의 main 메서드를 실행하면, 다음과 같은 결과를 볼 수 있습니다.

이 예제는 비교적 간단해 보이지만, 실제로는 상속, 추상 클래스, 그리고 메서드 재정의 등의 개념을 담고 있습니다. 프로젝트가 커질수록 이러한 개념을 잘 이해하고 활용하면 코드 유지보수와 확장성에 큰 도움이 됩니다.
상속(Inheritance): 공통된 기능(breathe())을 상위 클래스인 Animal에 정의하고, 자식 클래스에서 필요한 기능(sound())을 재정의합니다.
추상 클래스(Abstract Class): 추상 메서드를 통해 반드시 재정의해야 하는 메서드를 자식 클래스에 명시합니다.
오버라이딩(Overriding): 자식 클래스에서 부모 클래스의 메서드를 재정의하여 클래스별로 다른 동작을 부여합니다.
이처럼 메서드 작성 및 호출 방식, 상속 구조, 추상 클래스와 오버라이딩 개념은 객체 지향 프로그래밍(OOP)에서 핵심적인 부분이며, 실제 업무나 프로젝트에서도 자주 사용됩니다.
메인 클래스에서 객체를 생성하고, 필요한 메서드를 호출하는 과정을 통해 프로그램을 실행합니다.
추상 클래스를 사용하면 자식 클래스가 구현해야 할 기능을 명확히 지정할 수 있습니다.
오버라이딩을 통해 자식 클래스별로 서로 다른 행동을 정의할 수 있습니다.
이러한 개념을 이해하면 코드 재사용성과 유지보수성이 크게 향상됩니다. 앞으로 더 복잡한 프로젝트를 진행할 때, 상속 구조와 메서드 재정의가 얼마나 유용한지 직접 체감하실 수 있을 겁니다.