3.3 메서드
- 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것
- 메서드를 사용하는 이유
- 높은 재사용성
- 중복된 코드 제거
- 프로그램 구조화
3.4 메서드의 선언과 구현
- 메서드는 크게 서언부와 구현부로 이루어져 있다
- 메서드 선언부 : 메서드의 이름, 매개변수 선언, 반환타입으로 구성
- 매개변수 선언 : 메서드가 작업을 수행하는데 필요한 값을 제공받기 위한 것.
일반적인 변수선언과 달리 두 변수의 타입이 같아도 변수의 타입을 생략할 수 없다
- 메서드 구현부 : 메서드를 호출했을 때 수행될 문장
- return 문 : 탄환 타입과 일치하거나 적어도 자동 형변환이 가능한 것이어야 함.
단 하나의 값만 반환할 수 있다
- 지역 변수 : 메서드 내에 선언된 변수는 그 메서드 내에서만 사용할 수 있다
3.5 메서드 호출
- 메서드를 호출할 때 괄호 안에 지정해 준 값들을 인자 또는 인수라고 하는데 인자의 개수와 순서는 호출된 메서드에 선언된 매개변수와 일치해야 한다
3.6 return 문
- 반환 타입이 void인 경우에 return 문이 없어도 문제가 없었던 것은 컴파일러가 메서드의 마지막에 return;을 자동적으로 추가해주었기 때문
3.7 JVM의 메모리 구조
- Method Area
- 프로그램 실행 중 어떤 클래스가 사용되면 jvm은 해당 클래스의 클래스 파일을 읽어서 분석하여 클래스에 대한 정보를 이곳에 저장한다. 이때, 그 클래스의 클래스 변수도 이 영역에 함께 생성된다.
- static으로 지정된 정적 정보와 런타임에 생성되는 상수 풀, 멤버 변수와 메서드 데이터, 그 외 클래스 초기화에 관련된 여러 메타정보를 가지고 있음
- 논리적으로는 힙의 일부로 구현되어 있음
- Call Stack
- 호출 스택은 메서드의 작업에 필요한 메모리 공간을 제공한다. 메서드가 호출되면 호출 스택에 호출된 메서드를 위한 메모리가 할당되며 이 메모리는 메서드가 작업을 수행하는 동안 지역변수(매개변수 포함)들과 연산의 중간 결과 등을 저장하는데 사용된다. 메서드가 작업을 마치면 할당되었던 메모리 공간은 반환되어 비워진다.
- LIFO데이터 구조로 되어있다(last in first out)
- CPU가 스택 메모리를 효율적으로 관리한다
- 스레드마다 스택이 할당된다
- 높은 주소에서 낮은 주소로 메모리에 할당
- Heap
- 인스턴스가 생성되는 공간. 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다.
- 임의의 위치에 객체가 생성된다(dynamic allocation)
- 전역변수이기 때문에 하나의 객체를 여러 곳에서 참조할 수 있어서 메모리 공간 절약이 가능하다
- GC로 관리
- 낮은 주소에서 높은 주소로 메모리에 할당