[Java/Kotlin] static 하다

Jay·2020년 12월 18일
0

Java&Kotlin

목록 보기
1/30

Programming에서의 CS지식과 같은 기본 지식이 얼마나 중요한지를 알기에 기본 개념 역시 다지자는 의미에서 대충 뭔지는 알지만 확실하게 모를수도 있다 싶은 개념을 정리하고자 한다.

Static?

  • static은 변수나 메소드에 키워드로 사용된다.
  • static 키워드를 사용한 변수는 클래스가 메모리에 올라갈 때 자동으로 생성된다. 즉, 인스턴스(객체) 생성 없이 바로 사용 가능 하다.
    -> 객체 생성 과정이 없으니 편하고 속도가 빠르다. (이걸 간과하면 큰 문제가 된다.)

왜 Static을 쓸까?

  • 자주 변하지 않는 일정한 값이나 설정 정보와 같은 공용 자원에 대한 접근에 있어서 매번 메모리에 로딩하거나 값을 읽어들이는 것보다 일종의 '전역 변수'와 같은 개념을 통해 접근하는 것이 비용도 줄이고 효율을 높일 수 있다.

  • 인스턴스 생성 없이 바로 사용 가능하기에 프로그램 내에서 공통으로 사용되는 데이터들을 관리할 때 이용된다.

좋은 예시가 있어서 가지고 왔다.)

public class SelectGame {

	static String game = "피파온라인";

	

	public static void main(String[] args) {

		SelectGame jay = new SelectGame();
		SelectGame yun = new SelectGame();

		

		System.out.println("jay's select : " + jay.game);
		System.out.println("yun's select : " + yun.game);

		

		jay.game = "서든어택"; 

		System.out.println("jay's select : " + jay.game);
		System.out.println("yun's select : " + yun.game);

	}

}

<결과>
jay's select : 피파온라인
yun's select : 피파온라인
jay's select : 서든어택
yun's select : 서든어택

jay의 게임만 변경하였는데 yun의 취향도 변경이 되버렸다.

game 변수를 static으로 정의하였기 때문에 jay, yun은 같은 변수 game을 공유하게 된다.

static을 마구잡이로 사용해선 안되고 동일한 값이 유지 되야 할때만 써야한다.


static함수와 instance함수 차이

  • 가장 크게는 static 키워드가 붙고 말고의 차이가 있다.
  • static 변수는 이미 메모리에 로드되어 있다. 그래서 둘은 호출에서의 차이가 있다.
  • 인스턴스 함수는 new 연산자로 객체 생성 후, 함수를 호출해야 한다.
  • static함수에서 static변수가 아닌 것들을 사용하려 하면 에러가 난다.

util

  • 오늘 날짜 구하기, 돈에 콤마 단위 찍기 등 과 같은 메서드를 작성할 때에는 클래스 메소드를 사용하는 것이 유리하다고 한다.
public class Util{
	public static String getToday(String fmt){
    	SimpleDateFormat sdf = new SimpleDateFormat(fmt);
        return sdf.format(new Date());
    }
}
  • 위와 같은 형태로 Util의 인스턴스 생성없이 바로 오늘 날짜 출력이 가능하다.

📌 static 정리하기

  • 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통적으로 사용해야 하는 것에 static을 붙인다.
  • static이 붙은 멤버변수는 인스턴스를 생성하지 않아도 사용할 수 있다.
  • static이 붙은 함수에서는 인스턴스 변수를 사용할 수 없다.
  • 함수 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.(시간 효율성)
  • 클래스 설계 시, static의 사용 지침
    - 먼저 클래스의 멤버 변수 중 모든 인스턴스에 공통된 값을 유지해야 하는 것이 있는지 보고 static을 붙여준다.
    - 작성한 함수 중, 인스턴스 변수를 사용하지 않는 함수에 대해서 static을 붙일 것을 고려한다.
profile
Android Developer - Come to my medium (https://medium.com/@wodbs135)

0개의 댓글