3. 변수와 매서드
3.1 선언위치에 따른 변수의 종류
변수의 종류 | 선언위치 | 생성시기 |
---|---|---|
클래스변수 | 클래스 영역 | 클래스가 메모리에 올라갔을 때 |
인스턴스 변수 | 클래스 영역 | 인스턴스가 생성되었을때 |
지역변수 | 클래스 영역 이외의 영역 (메서드, 생성자, 초기화 블럭 내부) | 변수 선언문이 수행되었을때 |
1 | class Variables{ |
- 인스턴스 변수
- 클래스 영역에 선언, 인스턴스 생성때 만들어짐
- 클래스 변수
- 인스턴스 앞에 static을 붙임.
한 클래스의 모든 인스턴스들이 공통적 값을 유지해야 되는 경우 사용.
public을 붙이면 프로그램 내 전역에서 사용가능
- 인스턴스 앞에 static을 붙임.
- 지역 변수
- 매서드 내 선언. 메서드 내에서만 사용가능. 메서드 종료시 소멸.
3.2 클래스변수와 인스턴스 변수
1 | class Card { |
인스턴스 변수는 인스턴스가 생성될 때마다 각기 다른 값을 유지,
클래스 변수는 모든 인스턴스가 하나의 저장공간을 공유해서 항상 공통된 값 가짐
3.3 메서드
- 하나의 메서드는 되도록 하나의 기능만 수행하도록 하는것이 좋다.
- 반복적으로 수행되야 하는 여러 문장을 하나의 메서드로 정의해놓으면 좋다
- 관련된 여러 문장을 하나의 메서드로 만들어 놓는 것이 좋다.
3.4 return 문
- 메서드가 정상적으로 종료되는 경우
- 메서드의 블럭{}내의 마지막 문장을 수행했을 때
- 메서드의 블럭{}내에 있는 문장을 수행중 return 문을 만났을때.
- return 문은 실행중인 메서드를 종료 후 호출 메서드로 되돌아감
- 반환값이 없는 경우 : return;
- 반환값이 있는 경우 : return 반환값;
3.5 메서드의 호출
참조변수.메서드이름();
참소변수.메서드이름(값1, 값2, ..);
3.6 JVM의 메모리 구조
- Method Area(메서드영역)
클래스/데이터
- Call Stack(호출스택)
Main
- Heap(힙)
인스턴스
3.7 기본형 매개변수와 참조형 매개변수
기본형 매개변수 - 변수의 값 읽기만 할 수 있음
참조형 매개변수 - 변수의 값을 읽고 변경 할 수 있음.
3.8 재귀호출
f(n) = n* f(n-1)
3.9 클래스(static 메서드)와 인스턴스메서드
- 클래스 설계할 때, 멤버 변수 중 모든 인스턴스에 공통적으로 사용해야하는 것에 static 을 붙인다.
- 클래스 변수(static변수)는 인스턴스를 생성하지 않아도 사용할 수 있다.
- 클래스 메서드는 인스턴스 변수를 사용할 수 없다.
- 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.
3.10 클래스멤버와 인스턴스멤버간의 참조와 호출
인스턴스 멤버가 존재할때는 클래스멤버는 항상 존재하지만,
클래스맴버가 존재하는 시점에 인스턴스멤버가 존재할수도 있고 없을수도 있음.