[Java] 2. 자바 static이란?
7242 단어 JavaprogramminglanguageJava
정적(static)이란?
- 정적 멤버 (클래스 멤버)
- 정적 필드(Static 변수)
- 정적 메소드(Static 메소드)
- 정적 멤버는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버이기에 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할 때 클래스 별로 관리된다.
- 정적 멤버는 인스턴스(객체)의 생성 없이 호출할 수 있다.
- 자바 프로그램을 실행시 정적 멤버를 찾아서 먼저 메모리에 할당시킨다.
정적 멤버 생성
- 정적 멤버들은 Heap영역이 아닌 static영역에 할당된다.
- static 영역에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버를 어디서든지 참조할 수 있다.
- Garbage Collector가 관여하지 않기에 프로그램 종료시까지 메모리가 할당된 채로 존재하기에 시스템 성능에 악영향을 줄 수 있다.
정적 필드 사용 예시
class Number{
static int num1 = 0; //클래스 필드
int num2 = 0; //인스턴스 필드
}
public class Static_ex{
public static void main(String[] args){
Number number1 = new Number();
Number number2 = new Number();
}
number1.num1++; //클래스 필드 num을 1 증가시킨다.
number1.num2++; //인스턴스 필드 num2을 1 증가시킨다.
System.out.print(number2.num1);
System.out.print(number2.num2);
- Number라는 클래스 안에 클래스 변수 num과 인스턴스 num2를 생성하였다.
- 두개의 Number 인스턴스 number1과 number2를 생성하였다.
- number1에서 num1과 num2를 각각 씩 증가시켰다.
- number2에서 num1과 num2를 각각 출력하였다. - 출력시켰을 때, num1은 1, num2는 0을 출력한다.
- num1(정적변수)는 모든 인스턴스가 하나의 저장공간을 공유하기에 항상 같은 값을 가진다.
- num2(인스턴스 변수)는 인스턴스가 생성될 때마다 생성되므로 인스턴스마다 각기 다른 값을 가진다.
정적 메소드 사용 예시
class Name{
//클래스 메소드
static void print1(){
System.out.println("내 이름은 강서월 입니다.");
}
//인스턴스 메소드
void print2(){
System.out.println("내 이름은 강은서 입니다.");
}
}
public class Static_ex{
public static void main(String[] args){
Name.print1(); //인스턴스를 생성하지 않아도 호출이 가능하다.
Name name = new Name(); //인스턴스 생성
name.print2(); //인스턴스를 생성해야만 호출이 가능하다.
}
}
- 정적 메소드는 클래스가 메모리에 올라갈 때 정적 메소드가 자동적으로 생성되어 인스턴스를 생성하지 않아도 호출이 가능하다.
- 인스턴스 메소드는 인스턴스를 생성해야만 호출이 가능하다.
Author And Source
이 문제에 관하여([Java] 2. 자바 static이란?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kdmstj/Java-2.-자바-static이란저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)