티스토리 뷰
JAVA - 객체지향 2
변수의 생성시기
클래스변수 - 클래스가 메모리에 올라갈때
인스턴스변수 - 인스턴스가 선언될때
지역변수 - 변수선언문이 실행될때
클래스변수&인스턴스 변수
클래스변수란?
클래스영역에 선언되어 static 이 붙은 변수
클래스변수 사용법: 클래스이름.클래스변수
클래스변수는 데이터를 모두 공유한다.
인스턴스 변수란?
인스턴스 변수는 참조변수를 통해 각자 다른 데이터공간을
사용합니다.
포커 카드를 예시로 들자면
카드의 높이와 넓이, 뒷면의 무늬는 클래스변수가 되고,
카드앞면의 그림과 숫자등은 인스턴스 변수가 됩니다.
메소드
메소드란?
어떤작업을 실행하기 위한 명령어의 집합
※권장사항
-하나의 메서드는 하나의 작업의 용도로만 정의할것을 추천.
-반복적으로 수행되어야 할 문장을 메소드로 정의.
-관련된 여러문장을 하나의 메소드로 정의.
메소드의 구조!
리턴타입 메소드이름(타입 변수명, 타입 변수명, ....) {
매소드영역
}
리턴타입이 없으면 void를 채워넣고, 리턴타입이 있을시
메소드를 종료하는 부분에 return 반환값; 을 적으면 된다.
매소드 이름옆의 () 안에 들어간 변수를 매계변수라고 한다
매계변수는 메소드를 호출할때 받아들일 변수를 말하고,
매계변수가 필요없을 시 비워도 된다.
메소드의 종료
메소드의 {}블럭 내의 마지막까지 도달했을때,
매소드 블럭내에 있는 문장을 수행중 return을 만났을때 종료
return - 반환값 없을시 return만, 또는 적지않아도 된다.
(return 값이 없을시 메소드 선언부에 리턴타입을 void 로)
- 반환값 있을시 return 변수명(반환값);
(이때, 반환한 변수의 타입과 메소드 선언부의 리턴타입이 일치해야한다)
메소드의 호출
클래스내에 존재하는 메소드: 메소드이름();, 메소드이름(메계변수, ...);
인스턴스화를 통한 메소드: 참조변수.메소드이름();, 참조변수.메소드이름(메계변수, ...);
JVM 의 메모리구조
메서드 영역(method area)
어떤 클래스가 사용되면, JVM은 해당클래스의 클래스파일을 읽어서 분석하여 클래스 정보를
이곳에 저장한다. 이때, 그클래스의 클래스변수도 함께 저장된다.
힙(heap)
인스턴스가 생성되는 공간
호출스택(call stack)
메서드 작업에 필요한 메모리 공간을 제공한다.
처음 실행된 메소드는 그다음에 실행된 메소드가 끝난뒤에 작업을 마저한뒤
종료된다.
|
|
|
메소드3 |
|
|
|
|
|
메소드2 |
메소드2 |
메소드2 |
|
|
|
메소드1 |
메소드1 |
메소드1 |
메소드1 |
메소드1 |
|
그림으로 설명하면 이렇게 된다.
기본형, 참조형 매개변수
인스턴스를 생성하여 얻게된 참조형 변수는
c언어의 포인터와 비슷하게 메소드에게 작업된다.
c언어의 call by refernce를 위해서는
메소드에게 포인터의 주소값을 전달해 주어야한다.
JAVA의 참조변수는 그런게 필요없이 참조변수 자체가 주소값을 가지고 있어서
메소드에게 넘겨줄때 주소값도 복사하여 전달되는 특성이 있기때문이다.
Java에서는 배열도 참조변수를 통해 데이터가 저장된곳에 접근하기 때문에
배열자체로 넘겨주어도 작업이 가능한것과 비슷하다.
'프로그래밍 > java' 카테고리의 다른 글
JAVA - 객체지향(4) 생성자 (409) | 2015.04.03 |
---|---|
java - 객체지향(3) (388) | 2015.04.02 |
JAVA - 객채지향(1) (374) | 2015.03.25 |
java - 연습문제 (0) | 2015.03.21 |
java기초 - 변수 (0) | 2015.03.16 |