JVM의 메모리 구조
- 메서드 영역(Method Area)
클래스 정보, 클래스 변수가 저장되는 곳 - 호출스택(call stack또는 execution statck)
메서드의 작업공간
메서드가 호출되면 호츨스택에 메모리가 할당됨. - 힙(Heap)
인스턴스가 생성되는 곳
new 연산자에 생성되는 배열과 객체는 모두 여기에 저장
호출스택의 특징
- 메서드 호출 시, 수행에 필요한 만큼 메모리를 스택에 할당
- 메서드 수행 종료시, 메모리 반환 후 스택에서 제거됨
- 호출 스택 제일 위 == 현재 실행 중인 메서드
- 아래있는 메서드 == 바로 위의 메서드를 호출한 메서드
기본형 매개변수와 참조형 매개변수
기본형 매개변수: 값이 복사됨 / 변수의 값을 읽기만 할 수 있음(read only)
참조형 매개변수: 주소가 복사됨 / 변수의 값을 읽고 변경할 수 있음(read & write)
동작과정은 ppt or 책 p.264 참고
참조형 반환타입
반환타입이 참조형이라는 것은 메서드가 [객체의 주소]를 반환 하는 것을 의미함
동작 예시는 p.269 참고
클래스 메서드와 인스턴스 메서드
클래스 메서드
인스턴스와 관계된(인스턴스 변수, 인스턴스 메서드) 것을 사용하지 않는 메서드
- 객체생성 없이 호출가능(클래스이름.메서드이름)
- 메서드 앞에 static을 붙임
인스턴스 메서드
인스턴스 변수와 관련된 작업을 하는(인스턴스 변수를 필요로 하는) 메서드
- 반드시 객체를 생성해야 호출가능
클래스 멤버 특징
- 멤버 변수중 모든 인스턴스에 공통적으로 사용하는 것에는 static을 붙임
- 클래스 변수는 인스턴스 생성 없이 사용 가능함
why? 클래스가 메모리에 올라갈 때 자동적으로 생성되기 때문 - 클래스 메서드는 인스턴스 변수를 사용할 수 없음
why? 클래스 메서드가 호출 되 었을 때 인스턴스가 존재하지 않을 수도 있기 때문 - 메서드 내에 인스턴스 변수를 사용하지 않는다면 static을 붙이는 것을 고려함
why? 메서드 호출시간이 짧아지므로 성능이 향상됨
클래스 멤버와 인스턴스 멤버간의 참조와 호출
같은 클래스 내에서 인스턴스 생성 없이 서로를 참조하거나 호출 가능함
but 클래스 메서드(static method) 는 인스턴스 메서드를 호출X, 인스턴스 변수 사용X
why? 클래스 메서드가 인스턴스 메서드를 호출 시 그 인스턴스가 존재하는 지 알 수 없음
ex)
인스턴스 멤버가 클래스 멤버 참조 및 호출(O)
클래스 멤버가 인스턴스 멤버 참조 및 호출(X) -> 객체 생성해야함
인스턴스 멤버가 인스턴스 멤버 참조 및 호출(O)
-> 하나의 인스턴스가 존재한다는 것은 다른 인스턴스도 이미 생성되었다는 의미
오버로딩의 정의
한 클래스 내에 같은 이름의 메서드를 여러개 정의하는 것
오버로딩의 조건
- 메서드의 이름이 같아야함
- 매개변수의 개수, 타입이 달라야함
반환타입, 매개변수의 이름은 오버로딩에 아무런 영향 주지X
오버로딩의 예시
오버로딩의 장점
- 근본적으로 같은기능을 하지만 매개변수가 다른 메서드의 처리가 간편해짐
- 메서드의 이름만 기억하면 되므로 이름을 짧게 할 수도 있고 오류의 가능성을 줄여줌
- 메서드의 이름을 절약가능
가변인자 오버로딩
가변인자란?
매개변수를 동적으로 지정하는 것
가변인자 선언방법
- 타입... 변수명
public PrintStream printf(String format, Object... args)
- 가변인자는 매개변수 중 제일 마지막에 선언해야함
'JAVA' 카테고리의 다른 글
[JAVA] 자바 객체지향 개념 정리(4) (0) | 2021.11.05 |
---|---|
[JAVA] 자바 객체지향 개념 정리(2) (0) | 2021.11.05 |
[JAVA] 자바 객체지향 개념 정리(1) (0) | 2021.11.05 |
[JAVA] 이클립스 설치 및 구성이해 (0) | 2020.12.18 |
[JAVA] 메모장으로 javac로 컴파일 및 실행하기 (0) | 2020.12.17 |
댓글