자바 개념이 뒤죽박죽 섞인 내 머릿속..
이것도 강의 자료의 일부일 뿐 정확히 어떤 의미인지 와닿지 않는다..
👉 이 개념을 이해하기 위해 컴퓨터 언어의 발전 배경을 알면 도움이 된다. 컴퓨터 언어는 군사 목적으로 발전이 됐는데, 지금처럼 컴퓨터 기술이 좋지 못했을 때 사람들은 현실(Real World)을 컴퓨터로 옮기고 싶어했다. 컴퓨터에 현실을 정확하게 옮길수록 미사일을 정확하게 쏠 수 있는 등 군사적으로 유리해지기 때문이다. 때문에 하드웨어적인 요소를 컴퓨터 내 소프트웨어로 바꿔서 집어넣기 위해 노력했다. HW를 SW로 만드려면 먼저 어떻게 만들 것인지 설계도(Class)가 필요하다. 그리고 설계도로 구현할 대상(Object)이 따르고, 각 객체에 대한 개별적인 실체(Instance)를 만들어야 한다.
👉 Object vs. Instance 차이
대상과 실체... 대체 뭔 차이? 이 질문에 답을 찾기 위해 국내외로 검색을 했으나 이 부분에 대해서는 개발자들 간 의견이 분분한 것 같다. 객체를 클래스의 인스턴스라 부르기도 하고, 객체와 인스턴스를 같은 개념으로 보는 사람도 생각보다 많았다. 이 둘을 구분짓는데 집중하는 것은 시간 낭비라는 글도 있었다 😅 그래도 찾아본 자료를 토대로 차이점을 찾아보자면... (개념 이해를 위해 비유법을 써보겠습니다)
🍎과일을 생각했을 때,
Apple이라는 클래스가 있고, 그 Apple은 다양한 변수를 가질 것이다. Red, Green, Yellow 등...
색깔이라는 구분 아래 redApple, greenApple, yellowApple라는 각각의 객체가 있을 것이다. 아직까지 클래스와 객체는 어떤 실체로 구현된 것이 아니다. 이것을 실체로 만들기 위해서는 인스턴스화를 해야 한다.
redApple = new Apple();
이런 식으로, new 연산자로 Apple이라는 클래스에 대해 redApple이라는 인스턴스를 생성했을 때, 비로소 실체가 되어 메모리가 할당된다.
특정한 객체에 이름을 불러주는 것인데, 김춘수 시인의 <꽃>이라는 시의 한 구절이 떠오르는 건 ... 내가 문과생이기 때문?
"내가 그의 이름을 불러주었을 때,
그는 나에게로 와서
꽃이 인스턴스가 되었다."
(죄송합니다..)
위에서 살펴보았듯 클래스 안에는 여러 객체가 있을 수 있다. 어떠한 구분으로 인해 서로 다른 객체가 됐겠지만, 객체와 인스턴스에 관계없이 클래스 공통으로 제어를 하고 싶을 때 넣는 부가적 기능이다. static 제어자는 멤버 변수 즉 클래스 변수, 메서드 그리고 초기화 블럭에 적용될 수 있다.
👉 제어자?
앞서 Java 기초 포스팅에서 언급한 4가지 접근제어자 외에 static, final, abstract 등 다양한 제어자가 있다. 제어자는 클래스, 변수 또는 메서드의 선언부에 사용하여 부가적인 의미를 넣는 역할을 한다.
( 아래 이미지는 생활코딩 static 영상을 보며 실습 및 메모한 내용이다.)