중앙정보기술인재개발원/JAVA

[JAVA] 메소드

soidev 2025. 3. 21. 17:38

메소드

    객체의 동작에 해당하는 중괄호 {} 블록을 말한다. 중괄호 블록이름이 메소드 이며, 메소드를 호출하면 중괄호 블록에 있는 모든 코드들이 일괄적으로 실행된다.

  • 리턴값이 있는 메소드는 반드시 return문을 사용해서 리턴값을 지정(없으면 컴파일 오류)
  • 리턴값이 없는 메소드 : void(return 필요 X)
  1. 메소드 호출
    • 리턴타입 메소드이름 ( [매개변수선언, ** } ) {  실행코드 }
    • 변수 타입은 메소드 리턴 타입과 동일하거나, 자동 타입 변환이 될 수 있어야한다는 점 주의
    • 외부 클래스에서 메소드를 호출하려면 클래스로부터 객체를 생성

 

   2. 메소드 오버로딩

  • 클래스 내에 같은 이름의 메소드를 여러개 선언하는 것
  • 조건은 매개 변수의 타입,개수,순서 중 하나가 달라야함
  • 외부 클래스에서 메소드를 호출하려면 클래스로부터 객체를 생성

  4. this

  • 객체 내부에서도 인스턴스 멤버에 접근하기 위해 this사용
  • 주로 생성자와 메소드의 매개 변수 이름이 필드와 동일한 경우, 인스턴스 멤버인 필드임을 명시하고자 할 때 사용
  • 문법적으로 this빼도됨
  • 메서드 호출할때 참조주소 있이 호출해야함

  5. 정적멤버와 static

  • 정적은 고정된이란 의미
  • 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드
  • 선언하려면 메소드 선언 시 static 키워드를 추가적으로 붙이면됨
  • static은 모든 곳에서 언제든지 접근이 가능함
  • 메서드 영역에 처음부터 생성하고(로드된 시점) 프로그램 종료시까지 남아있음
  • this 키워드 사용 불가

  6. final

  • 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중에 수정할 수 없음
  • 문법적으로 제한을 건다는 것
  • final 타입 필드 [=초기값];
  • 불변의 값을 상수 : static final

오늘 내가 궁금했던 거 정리

자바 프로그램을 실행할 때 내부적으로 어떤 일이 일어나는지 단계별로 정리

1. 컴파일 단계

우리가 작성한 자바 소스 코드(.java) 는 바로 실행되지 않아. 먼저 Javac(Java Compiler) 가 컴파일해서 바이트코드(.class) 로 변환해야 해.
예를 들어, 다음과 같은 자바 코드가 있다고 해보자.

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, Java!");
    }
}

 

이 코드를 저장한 다음, javac 명령어로 컴파일하면 Main.class 라는 바이트코드 파일이 생성돼.

 

2. JVM이 main() 메서드를 호출하는 과정

이제 Ctrl + F5 또는 java Main 명령을 실행하면 JVM 이 실행되면서 main() 메서드를 호출해.

실제로는 다음 과정이 일어나:

(1) JVM이 Class Loader를 통해 바이트코드 읽기

  • Main.class 파일을 JVM이 읽어서 메모리에 로드 해.
  • 이때, 필요한 다른 클래스들도 함께 로드됨.
    (예: System.out.println() 같은 기본 API 클래스)

(2) Bytecode Verification (바이트코드 검증)

  • JVM은 로드된 바이트코드가 유효한지 검사 해.
  • 보안 문제나 잘못된 실행을 방지하기 위해 잘못된 코드가 있으면 실행을 차단 함.

(3) JVM이 main() 메서드를 실행

  • JVM이 main() 메서드의 바이트코드를 읽고 JIT(Just-In-Time) 컴파일러 를 통해 네이티브 코드로 변환한 뒤 실행함.
  • 이 과정에서 System.out.println("Hello, Java!"); 가 실행되고 결과가 출력됨.

결론

Ctrl + F5(또는 실행 버튼 클릭) 하면, 내부적으로 JVM이 main() 메서드를 호출하면서 실행이 시작됨.
✔ 이 과정에서 JVM은 클래스를 로드하고, 바이트코드를 검증하며, 실행할 수 있는 기계어로 변환해서 프로그램을 실행 해.

 


1. Parameter(매개변수) → 변수를 의미함

  • 메서드를 정의할 때 선언하는 변수Parameter(매개변수) 라고 해.
  • 즉, 메서드가 어떤 값을 받을지 정의하는 변수야.
  • 메서드 안에서 지역 변수처럼 사용됨.
  • 예를 들어:위 코드에서 name이 매개변수(parameter) 야.
    greet() 메서드를 호출할 때 어떤 값을 넘겨줄지 정의하는 변수라고 보면 돼.
  • public void greet(String name) {  // name → Parameter(매개변수)
        System.out.println("Hello, " + name);
    }

2. Argument(인자) → 값을 의미함

  • 메서드를 호출할 때 전달하는 실제 값Argument(인자) 라고 해.
  • 즉, 매개변수(Parameter)에 전달되는 실제 데이터(값) 야.
  • 예를 들어:여기서 "Alice" 가 인자(argument) 야.
    "Alice" 값이 name 매개변수에 전달돼서 System.out.println("Hello, Alice"); 가 실행되는 거지.
    greet("Alice");  // "Alice" → Argument(인자)

정리하면?

구분의미예제에서 greet(String name) 기준
Parameter(매개변수) 메서드를 선언할 때 사용하는 변수 name
Argument(인자) 메서드를 호출할 때 전달하는 실제 값 "Alice"

Parameter(매개변수) → 변수를 의미함 (메서드가 받을 값 정의)
Argument(인자) → 값을 의미함 (메서드를 호출할 때 전달하는 실제 값)

'중앙정보기술인재개발원 > JAVA' 카테고리의 다른 글

[JAVA] Depdency, DI, Composition, Aggregation  (1) 2025.03.26
[JAVA] 싱글톤  (1) 2025.03.24
[JAVA] 클래스  (0) 2025.03.20
[JAVA] 배열  (1) 2025.03.18
[JAVA] Scanner  (1) 2025.03.17