일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준 1924번
- Java heap
- java method
- 백준 1000번 java
- 카카오코테
- 힙정렬자바
- 프로그래머스
- 프렌즈4블록
- 카카오코딩테스트
- 알고리즘
- 카카오1차
- 자료구조 트리
- 코딩테스트기출
- 개발상식
- 백준 1000번
- 백준 1924번 java
- 백준
- 자바문자열
- 객체프로그래밍
- 카카오기출
- 코테준비
- 객체프로그래밍이란
- 자료구조힙
- 자바
- heap정렬
- heap
- 공부정리
- 문자열포맷
- java
- 프렌즈4블록java
- Today
- Total
일단 시작해보는 블로그
[Java] 정적 변수와 메소드 (static) 본문
static은 보통 변수나 메소드 앞에 붙여서 사용하게 된다.
static 키워드를 붙이면 자바는 메모리 할당을 딱 한번만 하게 되어 메모리 사용에 이점을 볼 수 있게된다.
1. 객체를 선언함에 있어서 메모리를 한번만 할당한다.
public class HousePark {
String lastname = "박";
public static void main(String[] args) {
HousePark pey = new HousePark();
HousePark pes = new HousePark();
}
}
위의 예제의 lastname은 클래스 HousePark의 속성이므로 pey, pes와 같은 객체가 생성될 때마다 메모리를 각각 할당해주게 된다. (lastname의 값은 모든 객체에서 동일하게 'park'인데..!)
이런 상황에서 lastname을 static변수로 선언해주면 메모리 할당을 딱 한번만 하게 되어 메모리 사용에 이점을 볼 수 있게 된다.
public class HousePark {
static String lastname = "박";
public static void main(String[] args) {
HousePark pey = new HousePark();
HousePark pes = new HousePark();
}
}
만약, HousePark 클래스의 lastname이 변경되지 않기를 바란다면 static 키워드 앞에 final이라는 키워드를 붙이면 된다.
한번 설정되면 그 값을 변경하지 못하게 하는 기능이 있고, 변경하려면 예외가 발생한다.
2. 한번 설정하면 같은 곳의 메모리 주소만 바라보기 때문에 static변수의 값을 공유하게 된다.
웹 사이트 방문시바다 조회수를 증가시키는 Counter 프로그램이 다음과 같이 있다고 가정해보면
public class Counter {
int count = 0;
Counter() {
this.count++;
System.out.println(this.count);
}
public static void main(String[] args) {
Counter c1 = new Counter();
Counter c2 = new Counter();
}
}
// 결과
// 1
// 1
위의 예제는 c1, c2 객체 생성시 count 값을 1씩 증가하더라도 c1.count 와 c2의 count는 서로 다른 메모리를 가리키고 있기 때문에 원하던 결과가 나오지 않음. 객체 변수는 항상 독립적인 값을 갖기 때문에 당연한 결과이다.
public class Counter {
static int count = 0;
Counter() {
this.count++;
System.out.println(this.count);
}
public static void main(String[] args) {
Counter c1 = new Counter();
Counter c2 = new Counter();
}
}
//결과
// 1
// 2
count변수를 static 으로 선언해줌으로써 객체 사이에서 속성값인 count의 메모리주소를 공유하게 됌. 즉, 한 클래스내의 모든 객체들이 같은 메모리에 있는 변수를 가져다가 쓰게된 것.
staic method
static이라는 키워드가 메소드 앞에 붙으면 클래스를 통해 호출할 수 있게 된다.
public class Counter {
static int count = 0;
Counter() {
this.count++;
}
public static int getCount() {
return count;
}
public static void main(String[] args) {
Counter c1 = new Counter();
Counter c2 = new Counter();
System.out.println(Counter.getCount());
}
}
static 메소드는 보통 유틸리티 성 메소드(오늘의 날짜 구하기, 숫자에 콤마 추가하기 등)를 작성할 때 많이 사용된다.
위키독스
온라인 책을 제작 공유하는 플랫폼 서비스
wikidocs.net
'개발 > Java' 카테고리의 다른 글
[Java] HashMap (0) | 2019.08.21 |
---|---|
[Java] 문자열 포맷 - String.format(), System.out.printf() (0) | 2019.08.20 |
[Java] call by value (0) | 2019.08.08 |
[Java] 메소드 (0) | 2019.08.08 |
[Java] Scanner, 입출력 클래스 (0) | 2019.08.05 |