////
Search
😀

7월 8일(금)

Static

static 이란 무엇일까?

static은 변수나 메소드에 키워드로 사용된다.
static 키워드를 사용한 변수는 클래스가 메모리에 올라갈 때 자동으로 생성이 된다. 즉 객체의 생성 없이 즉각적으로 사용이 가능하다.
객체를 생성하지 않아도 되므로 편리하고 속도도 빠르다.

static 키워드의 장점

자주 변하지 않는 일정한 값이나 설정 정보같은 공용자원에 대한 접근에 있어서 매번 메모리에 로딩하지 않아도 되므로 효율적이다.
인스턴스 생성 없이 바로 사용이 가능하므로, 프로그램 내에서 공통적으로 사용되는 데이터들을 관리하기에 용이하다.
static → 본사 직원 ( 본사가 1개기 때문에 객체가 아무리 많이 만들어지더라도 유일하다) static 이 아닐 경우 → 대리점 직원
원본폴더 == 본사 == 클래스 사본폴더 == 대리점 == 객체
1.
static → 한 개여야 하지만 변경은 가능하다. ex) 사람의 평균나이
2.
static final => 한개여야 하지만 변경은 불가능하다. ex) Math.PI
본사직원(static이 붙은)은 오직 본사직원 끼리만 소통이 가능하다.
본사직원은 특정 대리점 직원(static이 붙지 않은)을 특정해서 말할 수 없지 때문에 소통이 불가능하다.
대리점 -> 본사 (O) 본사 -> 대리점 (X)

오늘 새로 정리했던 점

1.
메모리의 4가지 영역에 대한 표현의 오해가 있었다. 강의 중에서 강사님이 스택 영역에 함수들이 쌓인다고 간단하게 설명을 하셨는데 기존에 함수 로직 자체는 텍스트 영역(코드 영역)에 저장되는 것으로 알고 있었고, 스택 프레임에 의해서 함수 안의 automatic variables(자동 변수 - 지역 변수, 매개 변수 …)들, 즉 함수의 메모리들이 스택 영역에 쌓인다고 알고 있었다. 결과적으로, 기존에 알고 있던 것들이 맞았으나 질문을 하는 방식에서 표현의 문제가 있었던 것 같다. 아마 함수가 쌓인다고 표현하시는 부분은 직관적으로 설명하시기 위해서 간단한 표현 방법을 사용하신 것이 아닌가 추측된다.
2.
메소드는 리모콘에 상관없이 무조건 오버라이드 된 것을 호출해서 실행하고 변수는 리모콘에 의해서 영향을 받는다.
오늘의 결론 → 함수의 메모리들은 스택 영역에 차곡차곡 쌓이는 것이 맞으나 함수의 로직 자체는 코드 영역에 저장되는 것이 맞다! 그리고 함수의 메모리들의 묶음을 스택 프레임이라고 표현한다.