6.2 변수와 메서드 (Variables and Methods)
객체 지향 패러다임이 자바에 적용되며, 변수의 역할 역시 클래스 단위로 선언되는 위치에 따라 크게 세 가지로 분류됩니다.
1. 선언 위치에 따른 변수의 종류
변수의 범위(Scope)와 종류는 생성 시기와 소멸 시기, 사용하는 영역에 가장 큰 영향을 미칩니다.
-
클래스 변수 (Class Variable)
- 선언 위치: 클래스 영역 (메서드 밖)
- 선언 방법:
static키워드를 앞에 붙임 - 특징: 모든 인스턴스가 공통된 저장공간을 공유. 인스턴스를 생성하지 않고도
클래스이름.변수이름으로 접근 가능. 프로그램 종료 시 소멸.
-
인스턴스 변수 (Instance Variable)
- 선언 위치: 클래스 영역 (메서드 밖)
- 선언 방법: 일반적인 형태로 변수 선언
- 특징: 인스턴스가 생성될 때마다 각각 독립적으로 생성됨. 각 인스턴스 고유의 상태를 가질 때 사용. 인스턴스가 사라지면 같이 소멸.
-
지역 변수 (Local Variable)
- 선언 위치: 메서드 영역이나 생성자, 그리고 제어문 등의 중괄호
{}내부 영역 - 특징: 변수 선언문이 수행되었을 때 생성되고, 블록(
{})을 벗어나면 자동으로 완전히 소멸되어 사용할 수 없음.
- 선언 위치: 메서드 영역이나 생성자, 그리고 제어문 등의 중괄호
예제 코드 비교
class Card {
String kind; // 인스턴스 변수 (무늬는 카드마다 다름)
int number; // 인스턴스 변수 (숫자도 카드마다 다름)
static int width = 100; // 클래스 변수 (카드의 폭은 모두 동일하게 공유)
static int height = 250;// 클래스 변수 (카드의 높이도 모두 동일하게 공유)
void method() {
int lv = 0; // 지역 변수 (이 메서드 안에서만 사용 가능)
}
}
2. 메서드 (Method)
메서드는 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것 입니다. 입력 값을 받아서 그 내부에 작성된 지시대로 연산하고, 그 결과값을 다시 호출한 쪽으로 반환합니다.
메서드를 사용하는 이유
- 높은 재사용성: 한 번 만들어 놓은 코드는 여러 번, 어느 프로그램에서든 호출하여 사용할 수 있습니다.
- 중복된 코드 제거: 같은 로직을 반복 작성하게 될 경우 하나로 묶어 호출하게 하면 깔끔합니다.
- 프로그램의 구조화:
main메서드 안에 모든 로직을 작성하는 것을 피해 논리를 여러 단위로 쪼개 모듈화할 수 있습니다.
리턴 타입과 매개변수
메서드가 작업을 마치고 반환하는 값의 타입을 메서드 이름 앞에 선언해야 합니다. 그리고 메서드 실행에 필요한 재료가 있다면 매개변수(Parameter)를 괄호 () 안에 전달합니다. 반환값이 없는 경우에는 void 라고 작성합니다.
// 두 정수를 더한 결과(int)를 반환하는 메서드 정의
int add(int a, int b) {
return a + b;
}
// 동작할 때 값을 반환하지 않는(void) 메서드
void printWelcome(String name) {
System.out.println(name + "님 안녕하세요.");
}
메서드는 그 자체로 정의에 불과하며, 반드시 누군가가 괄호 ()를 사용해서 호출(Call) 해주어야만 내부 로직을 실행합니다.