Java. static

kimkim·2024년 9월 27일

Java. 공부내용정리

목록 보기
30/38

static(정적)

: '고정된'이란 의미를 가지고 있으며 정적변수와 정적 메소드를 만들 수 있다.
: static로 정적 변수와 정적 메소드를 만들 수 있다.

클래스와 static

: 자바에서는 새로 생성된 클래스에 직접적으로 static을 붙일 수는 없다.
: 하지만 클래스 안에 있는 내부 클래스에서는 static를 붙일 수 있다.

static의 특징

  1. 인스턴스를 만들 수 없다.
    : 보통 클래스를 만들고 new를 해서 객체를 만드는 것을 인스턴스라고 하는데 이 인스턴스를 할 수 없다.
    : 객체를 만들 수 없기에 클래스가 가지고 있는 속성으로 가지고 올 수 있다.

  2. 모든 맴버는(매서드 등) static을 가지고 있어야한다.
    : static을 가지고 있는 영역에서는 모든 매서드와 같은 요소들에게 static을 붙여야 한다.

  3. non-static에서는 static을 사용할 수 없다.
    : static은 static이 있는 곳에서 사용할 수 있다.
    : non-static에서 사용하고 싶다면 인스턴스를 해서 객체를 만들어 가져와야 한다.

static의 활용도

: 통일한 정보를 가지고 있는 클래스에 사용하면 좋다
: 보통 문자열처리, 수학적계산 등 유틸리티와 같은 클래스에 유용하다.

객체(인스턴스)와 static의 차이

  • 객체 : 클래스를 복제하여 자신만의 값과 개성을 표현할 수 있음
  • static : 모든 객체를 아우르는 공유하는 정보를 지정할때 씀

static 사용법

: 메서드는 일반적으로 객체화 한 후에 사용하지만 static을 붙이면 class에서 바로 사용함
: new 없이 바로 사용가능하므로 편리하다.

static 주의사항

  • static이 붙여있지 않는 non-static에서는 static변수 사용이 불가능하다.
  • static은 꼭 필요한 경우에 사용해야한다.
  • static 매서드&변수를 사용할때만 static을 붙인다.
  • 객체별로 사용해야하는 변수와 메서드에는 static을 쓰면 안된다
  • 모를땐 쓰지말고 정말 공통적인 부분에만 써야한다
  • 남발하면 문제가 될 수 있다.

예시

public class Static{
	public static void main(String[] arge){
		//public static void main(String[] args)> 정보전달 매개변수
        
        // 클래스와 객체를 따로 만드는 이유는
        // 같은 구조를 가지지만 서로 다른 정보를 가지게 하기 위해서
        // 클래스의 복사본으로 객체를 만들어서 서로 다른 정보를 저장하기 위함이다.
        
        // static이 붙어있지 않은 매서드는
        // 객체를 생성하여 사용한다.
        Person p1 = new Person(20,"홍길동");
        Person p2 = new Person(30,"이순신");

        p1.introduce();
        p2.introduce();

        p1.age++;
        p1.introduce();
        
        // 두 객체를 아우르는 공통 특징
        // 인류 평균 나이가 80세 일때 두객체가 가지고 있는 평균나이 
        // 변수에 각각 값을 지정해주어야하며
        // 평균나이가 수정이 되어야 할때 각각 지정한 값을 변경해주어야 한다.
        // 이렇게 각각 지정해서 하나하나 수정하는 것은 매우 번거롭다.
        p1.avgAge=80;
        p2.avgAge=80;
        
        // 모든 객체가 공유하는 정보는 static으로 변경하여 사용한다.
       // static을 붙이면 class를 불러 바로 사용한다.
         Person.printAvgAge();

    
    }
}

// main 매서드와 비슷해짐
public class Person(
	int age;
    String name;
    static int avgAge = 80; // 인류 평균 나이
    
    // 생성자는 객체 만들 때 사용하기 때문에 객체를 만들지 않아도 사용가능한
    // static 변수는 static 초기화를 따로 해준다.
    static{
    	avgAge = 80;
    }
    
    public Person (int age, String name){
        this.name = name;
        this.age = age;
    }
    
    public void introduce(){
        System.out.printf("안녕하세요 %d살 %s입니다.\n",age,name);
    }

    public static void printAvgAge(){
        System.out.printf("인류 평균 나이는 %d살입니다..\n",avgAge);
    }
  
}

결론

  1. non-static에서는 static을 사용할 수 없다.
  2. 객체가 개성적으로 사용하는 메서드와 변수에는 static을 사용할 수 없다.
  3. 정말 공통적인 부분에만 써야한다.
  4. 남발하면 문제가 생기니 생각을 깊게 하고 사용할 것

0개의 댓글