본문 바로가기

프로그래밍/JAVA

[ JAVA ] 변수와 메서드

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

① 인스턴스변수(Instance variable)

  - 클래스 영역에 선언
  - 클래스의 인스턴스를 생성할 때 만들어짐

  - 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있음

② 클래스변수 (Class variable)(static변수, 공유변수)

  - 인스턴스 변수 앞에 static을 붙임

  - 클래스변수는 모든 인스턴스가 공통된 저장공간(변수)을 공유함

  - 클래스가 메모리에 로딩될 때 생성되어 프로그램이 종료될 때 까지 유지됨

  - public을 앞에 붙이면 같은 프로그램 내에서 어디서나 접근할 수 있는 '전역변수(global variable)'의 성격을 갖는다

③ 지역변수(local variable)

  - 메서드 내에 선언, 메서드 내에서만 사용 가능

  - 메서드가 종료되면 소멸되어 사용할 수 없게 된다

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

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

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

3. 메서드

- 메서드(method) : 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것이다.

  • 메서드를 사용하는 이유
    - 높은 재사용성으로 한번 만들어 놓은 메서드는 몇 번이고 호출할 수 있으며, 다른 프로그램에서도 사용이 가능함
    - 반복적으로 나타나는 문장들을 메서드로 만들어서 코드의 중복 제거
    - 문장들을 작업단위로 나눠서 여러 개의 메서드에 담아 프로그램의 구조를 단순화시킴

4. 메서드의 선언과 구현

- 메서드는 크게 '선언부(header, 머리)'와 '구현부(body, 몸통)'로 이루어져 있다.

반환타입 메서드이름 (타입 변수명, 타입 변수명, ...)   /* 선언부 */
{                                        
	// 메서드 호출시 수행될 코드             /* 구현부 */
}

① 메서드 선언부(method declaration, method header)

  - '메서드의 이름', '매개변수 선언', '반환타입'으로 구성

  - 메서드가 작업을 수행하기 위해 어떤 값들을 필요로 하고 작업의 결과로 어떤 타입의 값을 반환하는지에 대한 정보를 제공

 

메서드 예시

② 매개변수 선언(parameter declaration)

  - 매개변수는 메서드가 작업을 수행하는데 필요한 값들(입력)을 제공받기 위한 것이다

  - 두 변수의 타입이 같아도 변수의 타입을 생략할 수 없음

int add(int x, int y) { ... } // ok
int add(int x, y) { ... } // 에러. 매개변수 y의 타입이 없음

③ 메서드의 이름(method name)
  - 변수의 명명규칙대로 작성
  - 메서드의 기능을 쉽게 알 수 있도록 함축적이면서도 의미있는 이름을 지어야함

 

④ 반환타입(return type)
  - 메서드의 작업수행 결과(출력)인 반환값(return value)의 타입
  - 반환값이 없는 경우 반환타입으로 'void'를 적는다.

 

⑤ 메서드의 구현부(method body)

  - 메서드의 선언부 다음에 오는 괄호{}를 '메서드의 구현부'라고 함
  - 메서드를 호출했을 때 수행될 문장들을 입력

 

⑥ return문

  - 메서드의 반환타입이 'void'가 아닌 경우, 구현부 {} 안에 'return 반환값;'이 반드시 포함되어야 함

  - 반환값의 타입은 반환타입과 일치하거나 적어도 자동 형변환이 가능한 것이어야 함
  - return문은 단 하나의 값만 반환할 수 있음

 

메서드 예시

⑦ 지역변수(local variable)

  - 메서드 내에 선언된 변수

  - 서로 다른 메서드라면 같은 이름의 변수를 선언하는 것이 가능

5. 메서드의 호출

메서드이름(값1, 값2, ...); // 메서드를 호출하는 방법
  • 인자(argument)와 매개변수(parameter)
    - 인자(argument)(인수) : 메서드를 호출할 때 괄호() 안에 지정해준 값들
    - 인자의 개수와 순서는 호출된 메서드에 선언된 매개변수와 일치해야 한다.
    - 인자의 타입은 매개변수의 타입과 일치하거나 자동 형변환이 가능해야 한다.

6. return문

- 'return문'은 현재 실행중인 메서드를 종료하고 호출한 메서드로 되돌아감

- 반환타입이 void인 경우, 컴파일러가 메서드의 마지막에 'return;'을 자동적으로 추가해줌

- 반환타입이  void가 아닌 경우, 반드시 return문이 있어야함 (return문이 없으면 컴파일 에러(error: missing return statement)가 발생)

- 메서드의 구현부 {}를 작성할 때, 매개변수의 값이 적절한 것인지 확인하는 매개변수의 유효성 검사가 중요함

7. JVM의 메모리 구조

- 자바번역기라고도 불리는 자바가상머신(JVM, Java Virtual Machine)는 자바 바이트 코드와 컴퓨터의 운영 시스템 간에 번역기 역할을 하여 자바로 작성된 응용 프로그램을 윈도우나 매킨토시, 유닉스 등에서 사용할 수 있도록 해주는 소프트웨어를 말함

- 3가지 주요 영역(method area, call stack, heap)이 있음

JVM의 메모리 구조

① 메서드 영역(method area)

  - 프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스파일(*.class)을 읽어서 분석하여 클래스에 대한 정보(클래스 데이터)를 메서드 영역에 저장함

  - 클래스의 클래스변수도 메서드 영역에 함께 생성됨

② 힙(heap)

  - 인스턴스와 인스턴스변수들이 생성되는 공간

③ 호출스택(call stack 또는 execution stack)

  - 메서드의 작업에 필요한 메모리 공간을 제공

  - 메서드가 작업을 수행하는 동안 지역변수(매개변수 포함)들과 연산의 중간결과 등을 저장하는데 사용됨

  - 메서드가 작업을 마치면 할당되었던 메모리공간은 반환되어 비워짐

  • 호출스택의 특징
    - 메서드가 호출되면 수행에 필요한 만큼의 메모리를 스택에 할당받는다.
    - 메서드가 수행을 마치고나면 사용했던 메모리를 반환하고 스택에서 제거된다.
    - 호출스택의 제일 위에 있는 메서드가 현재 실행 중인 메서드이다.
    - 아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드이다.

'프로그래밍 > JAVA' 카테고리의 다른 글

[ JAVA ] 오버라이딩(overriding)  (0) 2022.10.09
[ JAVA ] 상속(inheritance)  (0) 2022.10.09
[ JAVA ] 자바의 형변환  (0) 2022.10.08
[ JAVA ] 기본형  (0) 2022.08.27
[ JAVA ] 진법  (0) 2022.08.27