static : static은 "고정된" 이라는 의미 (정적 변수)
객체 생성 없이 사용할 수 있는 필드와 메소드를 생성하고자 할 때 활용한다. 메모리에 고정적으로 할당되며 프로그램이 시작되면 메모리의 static 영역에 적재되고, 프로그램이 종료될 때 해제된다. Static 메서드 내에서는 인스턴스 변수를 사용할 수 없다.
정적 메소드는 객체 참조 없이 바로 사용할 수 있는 특징 때문에 인스턴스 필드나 메소드, 그리고 this 키워드를 사용할 수 없다.
이렇게 이해하고 프로젝트를 하다가 계속 내가 넣은 값이 바뀌지 않아 몇시간을 고민하다가 튜터님한테 멘토링 받으러갔다. 내가 코드에서 static을 남발하고 있었다는 걸 발견한 튜터님께 static 1대1 강의를 들었다.
나는 객체없이 바로 사용할 수 있는 키워드라서 좋은 줄 알았는데 엄청 위험한 단어였다.
(튜터님께서 설명해주신 자료이다.)
static을 사용해서 메모리공간에 올리게 되면 공간이 한개 고정되서 계속 적재되는 것이라서 계속 같은 값만을 내놓게 된다.
그래서 자바의 시작, 시초!
public static void main(String[] args) {} 이 메인 메소드는
프로그램이 시작되면 메모리에 제일 먼저 할당되어 무조건 시작되는 메소드인 것이다.
결론!
static은 매우 위험하다!
static은 안쓰는 방향으로 가야한다!
내가 static을 어딘가에 썼다면 뭔가 잘못되가고 있는게 아닌가 의심해봐야한다!!