일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 코드로 배우는 스프링 웹 프로젝트
- Spring MVC Interceptor
- Spring 커맨드 객체
- properties 파일
- properties 변수
- properties 파일 주입
- Spring MVC5 기본 세팅
- 자바스크립트
- 오라클 TRUNCATE
- 자바
- JSR - 380
- DDL TRUNCATE
- Spring Cookie
- Mybatis 오류
- 오라클 CREATE
- 자바 List
- JSR - 303
- Servlet cookie
- Spring
- 자바오류
- collection framework
- annotation
- 스프링 인터셉터
- Dependency Injection
- ddl alter
- Spring message
- DDL DROP
- 오라클 DROP
- 스프링 파라미터 추출
- Spring 객체로 주입받기
- Today
- Total
개발이좋아
[Java] 변수 유효 범위 본문
변수 유효 범위란 말 그대로 변수가 사용될 수 있는 범위를 의미한다.
- 지역 변수(local variable) : 메서드 안에서만 사용 가능
- 멤버 변수(instance variable): 클래스 안에서 사용 가능
- 정적 변수(static variable): 여러 인스턴스에서 공통으로 사용
변수는 선언하는 위치에 따라 유효 범위가 달라진다.
지역 변수(local variable)
지역 변수는 함수나 메서드 내부에 선언하기 때문에 함수나 메서드 외부에서는 사용할 수 없다.
위 사진은 add 메서드 안에 선언된 지역 변수를 나타내는 사진이다.
위 사진에서 지역 변수는 메서드를 호출할 때 인자로 넘기는 매개변수와(num1, num2)와
중 괄호{ } 안에 선언된 result이다. 위의 변수들은 중 괄호 안에서만 사용이 가능하며 그 외에 곳에서는 호출도 사용도 불가능하다.
지역 변수는 스택(stack) 메로리라는 곳에서 생성되며 메서드가 호출될 때 생성되었다가 메서드가 반환되면 메모리 공간이 사라지면서 지역 변수도 함께 사라진다.
멤버 변수(instance variable)
멤버 변수(인스턴스 변수)는 클래스가 생성될 때 힙(heap) 메모리에 생성된다.
멤버 변수는 클래스의 어느 메서드에서나 사용할 수 있으며 힙 메모리에 생성된 인스턴스가 GC(가비지 컬렉터)에 의해 수거되면 멤버 변수도 메모리에서 사라진다.
클래스 내부에 여러 메서드에서 사용할 변수는 지역 변수보다는 멤버 변수로 선언하는 것이 바람직하다.
위 사진에서 public class Calc { 밑에 선언된 num1, num2, num3 이 멤버 변수이다.
멤버 변수와 지역 변수는 이름이 같아도 생성되는 메모리의 장소가 다르기 때문에 문제없이 선언할 수 있다.
즉 멤버 변수 int num1 , num2와 add 메서드 안에 매개변수 num1, num2는 완전히 다른 변수이다.
static 변수
static 변수 정적 변수라고도 하며 지역 변수나 멤버 변수와는 다르게 데이터 영역이라는 곳에 생성되는데 데이터 영역은 상수나 문자열 static 변수가 생성되는 장소이다.
static 변수는 클래스의 생성과는 상관없이 처음부터 데이터 영역에 생성되기 때문에 new 예약어로 클래스를 생성하지 않아도 클래스 이름으로 바로 접근이 가능하다.
위 사진에서 멤버 변수 위치에 static 키워드가 붙은 static int num4;가 static 변수이다.
위 사진과 같이 static 변수는 클래스를 new 키워드로 생성하지 않고도 클래스 이름으로 바로 접근이 가능하다.
본 포스팅은 필자가 공부한 것을 정리해놓은 것으로 오류가 존재할 수 있습니다.
참고:Do it! java 프로그래밍 입문
'Java' 카테고리의 다른 글
[Java] 정보은닉과 getter/setter (0) | 2019.12.15 |
---|---|
[Java] 싱글톤 패턴 (Singleton Pattern) (0) | 2019.12.14 |
[Java] static 변수와 static 메서드 (0) | 2019.12.12 |
[Java] Wrapper 클래스, 오토박싱과 언박싱 (0) | 2019.12.10 |
[Java] toString( ) 메서드와 equals(Object obj) 메서드 (0) | 2019.12.09 |