티스토리 뷰
반응형
변수의 Scope와 static
변수가 선언된 블럭이 해당 변수의 사용범위이다
public class ValueScope{
int global = 0;
public int func(int val) {
int local = 1;
}
}
- 클래스 속성의 변수
- global 변수로서, ValueScope 전체 범위가 해당 변수의 Scope이다.
- 매개변수로 선언된 변수
- val 변수로서, func 메소드 블럭만이 해당 변수의 Scope이다.
- 메소드 블럭 내에 선언된 변수
- local 변수로서, 매개변수와 마찬가지로 func 메소드의 블럭만이 해당 변수의 Scope이다.
static
공유 자원이며, 객체가 인스턴스화 되지 않아도 호출하여 사용할 수 있는 특징을 가지고 있다.
좀 더 자세한 설명을 봐보자
메모리 할당 지역 및 실행 시점
- static의 메모리 할당 지역은 어디일까? 그곳은 바로 클래스 영역(메소드 영역)이다.
- 그럼 왜 static은 객체가 인스턴스화 되지 않아도 사용이 가능하지?
- 보통 프로그램이 실행하면 필요한 클래스가 JVM 메모리상에 로딩되는 과정을 거치게 된다. 그리고 한번 로딩된 클래스는 별 이상이 없지 않는 한, 객체를 생성할 수 있도록 메모리에 위치하게 된다. static은 이 시점에서 메모리에 올라가 동작 처리하는 것이다.
- 그렇다면 왜 공유자원이 되는 것이지?
- JVM 메모리상에 로딩이 되는 과정에서 static 뿐만 아니라, 클래스, 변수, 메소드, 상수 pool를 클래스 영역에 올라가 있고, 해당 영역은 모든 스레드가 공유하는 영역이기 때문이다.
주 목적
- 클래스를 설계할 때 다른 클래스에서도 자원을 공통적으로 사용하고자 할 때 static을 사용한다.
- 만약 메서드 내에서 인스턴스 변수를 사용하지 않는다면, 해당 메서드를 static 메서드로 변경하는 것을 고려하는 것이 좋다.
- why? static 메서드는 인스턴스 메서드보다 호출시간이 짧기 때문이다(인스턴스 메서드는 실행 할 때 호출되어야하는 메서드를 찾는 시간이 더 걸린다.)
static 주의
static 메서드를 사용할 때, 인스턴스 변수를 사용할 수 없다.
- 인스턴스 변수 사용시 해당 인스턴스가 메모리에 올라가 있지 않으니깐!
클래스 멤버와 인스턴스 멤버를 혼용하여 사용할 시 주의해야한다.
class test{ static int a = 10; int b = 20; static int c = b; //에러 발생 //c(클래스 멤버)가 할당 받는 b(인스턴스 멤버)는 인스턴스가 생성되어야지만 존재하는 값이기 때문이다. }
반응형
'Java > Java 기초' 카테고리의 다른 글
[Java 기초] 상속과 구성 (2) | 2020.01.04 |
---|---|
[Java 기초] 오버로딩 (0) | 2020.01.03 |
[Java 기초] enum (0) | 2020.01.01 |
[Java 기초] 제네릭 (0) | 2019.12.14 |
[Java 기초] 팩토리 메서드 패턴 (0) | 2019.12.14 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 인프런
- ifPresent
- JPA
- Effective Java
- 자바8
- 이펙티브 자바
- 팩토리 메소드 패턴
- 정적팩터리메서드
- flatMap
- mustache
- try with resources
- 김영한
- jdk버전
- java
- effectivejava
- junit
- 점층적 생성 패턴
- 복사 팩토리
- @Lazy
- 빈 순환 참조
- java8
- 생성자
- package-private
- 연관관계
- 빌더 패턴
- 이펙티브자바
- try catch finally
- 스프링부트
- springboot
- Spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함