기본 이해
멤버변수
클래스 내부에서 선언된 변수
지역변수
메서드 내부에서 선언된 변수로, 해당 메서드 내에서만 사용
class House {
furniture = "침대"; // 멤버변수: 집에 계속 있는 가구
clean() {
let vacuum = "청소기"; // 지역변수: 청소할 때만 꺼내 쓰는 도구
console.log(`${vacuum}로 ${this.furniture} 청소`);
} // 메서드가 끝나면 vacuum은 사라짐, furniture는 계속 존재
}
핵심 구성요소
멤버변수
- 접근제어자 사용 가능 (public, private 등)
- 클래스 전체에서 접근 가능
- 객체의 상태를 저장
지역변수
- 접근제어자 사용 불가 - 메서드 내부에서만 사용 가능하기때문
- 선언된 블록 내에서만 사용
- 임시 데이터 저장
존재 이유와 목적
- 멤버변수: 객체의 상태 유지와 데이터 캡슐화
- 지역변수: 메서드의 임시 작업 공간 제공
- 메모리 효율성과 코드 구조화를 위해 필요
주의사항과 일반적 오류
멤버변수와 지역변수 이름 중복
멤버변수는 메서드에서도 사용 가능하기 때문에 이름이 중복되면 헷갈릴 수 있음
class Person {
name = "Kim"; // 멤버변수
changeName() {
let name = "Lee"; // 지역변수
// 지역변수와 멤버변수는 완전히 별개의 변수
name = "Park"; // 지역변수 접근
this.name = "Jung"; // 멤버변수 접근
console.log(name); // "Park" (지역변수)
console.log(this.name); // "Jung" (멤버변수)
}
}
지역변수의 범위를 벗어난 접근 시도
class Person {
showInfo() {
if(true) {
let age = 20; // 지역변수
console.log(age); // 정상 작동
}
console.log(age); // 에러! age는 if블록 안에서만 존재
}
display() {
console.log(age); // 에러! 다른 메서드의 지역변수에 접근 불가
}
}
불필요한 멤버변수 선언
메서드 내에서만 잠깐 사용되는 변수를 멤버변수로 선언하는 경우
class Calculator {
// 불필요한 멤버변수
tempResult = 0; // 이럴 필요 없음
add(a, b) {
this.tempResult = a + b; // 멤버변수로 저장할 필요가 없음
return this.tempResult;
}
}
// 더 나은 방식
class Calculator {
add(a, b) {
let result = a + b; // 지역변수로 충분
return result;
}
}
비교 분석
특성 | 멤버변수 | 지역변수 |
---|---|---|
선언위치 | 클래스 내부 | 메서드 내부 |
생명주기 | 객체 수명과 동일 | 메서드 실행 동안만 |
접근범위 | 클래스 전체 | 선언된 블록 내 |
초기값 | 자동 초기화 | 수동 초기화 필요 |
접근제어자 | 사용 가능 | 사용 불가 |
실무 활용
public class User {
// 멤버변수
private String name;
private int age;
public void setUserInfo(String inputName, int inputAge) {
// 지역변수
boolean isValid = validateInput(inputName, inputAge);
if(isValid) {
this.name = inputName;
this.age = inputAge;
}
}
}
이전 개념: 변수의 기본 개념, 데이터 타입
후속 개념: 접근제어자, 캡슐화, 정적(static) 변수
베스트 프랙티스:
- 멤버변수는 private으로 선언하고 getter/setter 사용
- 지역변수는 최소한의 범위에서 선언
- 의미있는 이름 사용
- 필요한 경우에만 멤버변수로 선언
'Java > 자바 학습' 카테고리의 다른 글
연산자(Operators) (0) | 2025.05.18 |
---|---|
명시적 형변환 vs 암시적 형변환 (2) | 2025.05.18 |
2. 메모리 - 3. 가비지 컬렉션 기본 (0) | 2025.05.14 |
2. 메모리 - 2. 메서드 영역(Method Area) (0) | 2025.05.12 |
2. 메모리 - 1. 스택(Stack)과 힙(Heap) (0) | 2025.05.12 |