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

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 |