Java & Spring/Java

메서드

승주우에요 2026. 1. 6. 08:48

1. 메서드란?

메서드는 객체가 수행할 수 있는 행동이다. 객체지향에서는 객체는 메서드를 통해서만 외부와 상호작용한다.

class Person {
	void speak() {
    	System.out.println("말한다");
    }
}
  • 필드 -> 상태
  • 메서드 -> 행동

2. 메서드의 구조

 

[접근제어자] [기타제어자] 반환타입 메서드명(매개변수) {
    실행 코드
}

public static int add(int a, int b) {
    return a + b;
}

 

  • 접근제어자: 외부 접근 범위
  • 변환 타입 : 결과 값의 타입
  • 메서드명 : 역할을 드러내는 이름
  • 매개변수 : 입력값
  • 메서드 바디 : 실제 로직

3. 메서드 시그니처

메서드 이름 + 매개변수 타입/순서 

❌ 포함되지 않는 것

  • 반환 값
  •  접근 제어자

4. 메서드 호출과 스택 메모리

void foo() {
    bar();
}

void bar() {
    int x = 10;
}

호출 시 JVM의 동작

  1. foo() 호출 -> Stack 메모리 할당
  2. bar() 호출 -> 새로운 Stack 메모리 할당
  3. bar() 종료 -> Stack 메모리 해제
  4. foo()로 복귀

-> foo() 종료 시 Stack 메모리 자동 해제

 

5. Call by Value

Java는 항상 Call by Value이다.

void change(int x) {
    x = 10;
}
int a = 5;
change(a);
System.out.println(a); // 5

값 자체가 복사되는 것이다.

 

6. 오버로딩(Overloading) 

같은 이름의 메서드를 다른 시그니처 여러 개로 정의하는 것

int add(int a, int b)
double add(double a, double b)

오버로딩이 가능할 때

  • 매개변수 개수 다를 때
  • 매개변수 타입 다를 때
  • 매개변수 순서 다를 때

오버로딩 불가능할 때

  • 반환 타입만 다를 때
  • 접근 제어자만 다를 때

📌오버로딩은 편의성 기능이지, 책임 분산 도구가 아니다. 

 

7. 가변 인자(varargs)

void sum(int... nums) {
    for (int n : nums) {
        System.out.println(n);
    }
}
  • 내부적으로 배열처럼 동작함
  • 인자 개수를 유연하게 받을 수 있음

모호성

void test(int a, int... b)
void test(int... a) // ❌ 모호성 발생 가능
  • 가변인자는 마지막 파라미터에만 사용해야 함
  • 오버로딩과 섞이면 위험할 수 있다

8. static 메서드 vs 인스턴스 메서드

구분 static 메서드 인스턴스 메서드
this 사용 X O
접근 가능 static 멤버만 static + 인스턴스
컨텍스트 클래스 객체
객체 필요 X O

 

9. 요약

  • 메서드는 객체의 행동이다
  • 메서드 시그니처는 이름 + 매개변수로 결정된다
  • Java는 항상 Call by Value다
  • 오버로딩은 시그니처가 다를 때만 가능
  • 가변인자는 편리하지만 잘 고려해야함

 

'Java & Spring > Java' 카테고리의 다른 글

상속(Inheritance)이란  (0) 2026.01.06
생성자&this,this()  (0) 2026.01.06
Static  (2) 2026.01.05
객체의 상태와 변수의 생명주기  (0) 2026.01.05
객체 지향 기본  (0) 2026.01.05