본문 바로가기

Foundation/- Java

변수와 메서드

변수와 메서드 ??

 

1. 선언위치에 따른 변수의 종류

 

▶ 변수의 선언위치가 변수의 종류와 범위를 결정한다.

종류  : 인스턴스변수, 클래스변수, 지역변수

 

(1)인스턴스변수(클래스 영역)

- 각 인스턴스의 개별적인 저장공간. 인스턴스마다 다른 값 저장가능

- 인스턴스 생성 후,  '참조변수.인스턴스변수명'으로 접근

- 인스턴스를 생성할 때 생성되고, 참조변수가 없을 때 가비지컬렉터에 의해 자동제거됨

 

(2)클래스변수(클래스 영역) (static)(공유변수)

- 같은 클래스의 모든 인스턴스들이 공유하는 변수

- 인스턴스 생성없이 '클래스이름.클래스변수명'으로 접근

- 클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸

 

(3)지역변수(메서드 영역)

- 메서드 내에 선언되며, 메서드의 종료와 함께 소멸

- 조건문, 반복문의 블럭{} 내에 선언된 지역변수는 블럭을 벗어나면 소멸

 

2. 클래스변수와 인스턴스변수

 

인스턴스변수는 인스턴스가 생성될 때마다 생성되므로 인스턴스마다 각기 다른 값을 유지할 수 있지만,

클래스변수는 모든 인스턴스가 하나의 저장공간을 공유하므로 항상 공통된 값을 갖는다."

예를들어 카드를 만든다고한다면, 폭과 높이는 공통된 값을 갖기 때문에 클래스변수로 선언하고,

무늬와 숫자는 카드마다 다른 값을 갖고 있어야 하므로 인스턴스변수를 선언한다.

 

class Card{

String kind;    //무늬

int number;    //숫자

 

static int width = 100;        //폭

static int height = 250;        // 넓이

}

 

3. 메서드(method)

 

▶ 메서드란?

- 작업을 수행하기 위한 명령문의 집합

- 어떤 값을 입력받아서 처리하고 그 결과를 돌려준다.

  (입력받는 값이 없을 수도 있고 결과를 돌려주지 않을 수도 있다.)

 

▶ 메서드의 장점 작성지침

- 반복적인 코드를 줄이고 코드의 관리가 용이하다.

- 반복적으로 수행되는 여러 문장을 메서드로 작성한다.

- 하나의 메서드는 한 가지 기능만 수행하도록 작성하는 것이 좋다.

- 관련된 여러 문장을 메서드로 작성한다.

- 프로그래밍을 하며 익혀나간다.

 

▶ 메서드를 정의하는 법은 c언어의 함수만드는 법이랑 거의같다. 클래스 영역에서만 정의할 수 있다.

 

4. return문

 

▶ 메서드가 정상적으로 종료되는 경우

- 메서드의 블럭{}의 끝에 도달

- 메서드 블록{}을 수행 도중 return문을 만났을 때

 

▶ return문은 현재 실행 중인 메서드를 종료하고 호출한 메서드로 되돌아간다.

- 반환값이 없는 경우 - return문만 써주면됨 .

- 반환값이 있는 경우 - return문 뒤에 반환값을 지정해주여 하며, 메서드 반환 타입과 일치해야 한다.

 

▶ 주의사항

- 반환값이 있는 메서드는 반드시 return문이 있어야 한다.

만약.

int max(int a, int b){

if (a > b)

return a;

}

위와같은 메서드가 있다면 b가 큰 경우 return문이 없으므로 에러 발생.

 

- return문의 개수는 최소화하는 것이 좋다.

 

5. JVM의 메모리 구조

 

▶ 메서드 영역

- 래스 정보와 클래스변수가 저장되는 곳

 

▶ 호출스택(Call Stack)

- 메서드의 작업공간. 메서드가 호출되면 메서드 수행에 필요한 메모리공간을 할당받고 메서드가 종료되면 사용하던 메모리를 반환한다.

 

▶ 힙(Heap)

- 인스턴스가 생성되는 공간. new연산자에 의해서 생성되는 배열과 객체는 모두 여기에 생성된다.

 

호출스택의 특징

- 메서드가 호출되면 수행에 필요한 메모리를 스택에 할당받는다.

- 메서드가 수행을 마치면 사용했던 메모리를 반환한다.

- 호출스택의 제일 위에 있는 메서드가 현재 실행중인 메서드다.

- 아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드다.

- 따라서 메서드는 호출 될 때마다 위에 하나하나 차곡차곡 쌓이며, 소멸 될 때는 위에서부터 하나하나 소멸된다.

 

6. 기본형 매개변수와 참조형 매개변수

 

▶ 기본형 매개변수 - 변수의 값을 읽기만 할 수 있다.

▶ 참조형 매개변수 - 변수의 값을 읽고 변경할 수 있다. (주소값을 던져 줌)

 

7. 클래스메서드(static메서드)와 인스턴스메서드

 

▶ 인스턴스 메서드

- 인스턴스 생성 후, '참조변수.메서드이름()'으로 호출

- 인스턴스변수나 인스턴스메서드와 관련된 작업을 하는 메서드

- 메서드 내에서 인스턴스변수 사용가능

 

▶ 클래스메서드 == (static)메서드

- 객체생성없이 '클래스이름.메서드이름()'으로 호출

- 인스턴스변수나 인스턴스메서드와 관련없는 작업을 하는 메서드

- 메서드 내에서 인스턴스변수 사용불가

- 메서드 내에서 인스턴스변수를 사용하지 않는다면 static을 붙이는 것을 고려한다.

 

8. 메서드 오버로딩

▶ 메서드 오버로딩이란?

- 하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 것을 메서드 오버로딩이라고한다.

 

▶ 오버로딩의 조건

- 메서드의 이름이 같아야 한다.

- 매개변수의 개수 또는 타입이 달라야 한다.

- 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다.

 

ex) long add(int a, long b) { return a+b; }

     long add(int a, long b) { return a=b; }  ---> 오버로딩의 바른 예

 

오버로딩의 대표적인 예로는 ▶System.out.println메서드를 들 수 있다.

다양하게 오버로딩된 메서드를 제공함으로써 모든 변수를 출력할 수 있도록 설계했다.

 

void println()

void println(boolean x)

void println(char x)

void println(char[] x)

void println(double x)

void println(float x)

void println(int x)

void println(long x)

void println(Object x)

void println(String x)

'Foundation > - Java' 카테고리의 다른 글

제어자(modifier)  (0) 2017.08.04
생성자  (0) 2017.07.28
객체지향언어란(클래스, 객체)  (0) 2017.07.26
배열(array), String배열, 다차원배열  (1) 2017.07.21
제어문 - 반복문(for, while, do-while)  (0) 2017.07.20