[Java] static, class, object, instance 개념 명확히 이해하기

kai6666·2022년 5월 5일
1

TIL. Java

목록 보기
2/21
post-custom-banner

자바 개념이 뒤죽박죽 섞인 내 머릿속..

❓ 아는 것

  • class = 객체를 찍어낼 수 있는 틀
  • 객체 = 프로그램이 동작하는 부품
  • static = class 선언 전에 적어주는 것

이것도 강의 자료의 일부일 뿐 정확히 어떤 의미인지 와닿지 않는다..

❗️이해하고 싶은 것

  • class, object, instance 각 개념의 명확한 정의와 그 차이.
  • static의 의미와 역할

👍 공부 내용

1️⃣ Class

  • 객체를 만들기 위한 설계도 (ex. 집 설계도)
  • 변수와 메서드의 집합
  • class명과 파일명이 반드시 같아야 함

2️⃣ Object

  • SW로 구현할 대상 / 클래스의 복사본
  • 설계도로 만들 대상
  • 인스턴스를 포괄하는 의미

3️⃣ Instance

  • 클래스를 바탕으로 SW로 구현될 실체
  • 객체에 포함된 개념 (객체를 '클래스의 인스턴스'라고 부르기도 함)
  • 실체화된 인스턴스는 메모리가 할당됨
  • 인스턴스화는 (일반적으로) 객체의 특성/속성을 정의하여 실체로 만들어주는 것.

👉 이 개념을 이해하기 위해 컴퓨터 언어의 발전 배경을 알면 도움이 된다. 컴퓨터 언어는 군사 목적으로 발전이 됐는데, 지금처럼 컴퓨터 기술이 좋지 못했을 때 사람들은 현실(Real World)을 컴퓨터로 옮기고 싶어했다. 컴퓨터에 현실을 정확하게 옮길수록 미사일을 정확하게 쏠 수 있는 등 군사적으로 유리해지기 때문이다. 때문에 하드웨어적인 요소를 컴퓨터 내 소프트웨어로 바꿔서 집어넣기 위해 노력했다. HW를 SW로 만드려면 먼저 어떻게 만들 것인지 설계도(Class)가 필요하다. 그리고 설계도로 구현할 대상(Object)이 따르고, 각 객체에 대한 개별적인 실체(Instance)를 만들어야 한다.

👉 Object vs. Instance 차이
대상과 실체... 대체 뭔 차이? 이 질문에 답을 찾기 위해 국내외로 검색을 했으나 이 부분에 대해서는 개발자들 간 의견이 분분한 것 같다. 객체를 클래스의 인스턴스라 부르기도 하고, 객체와 인스턴스를 같은 개념으로 보는 사람도 생각보다 많았다. 이 둘을 구분짓는데 집중하는 것은 시간 낭비라는 글도 있었다 😅 그래도 찾아본 자료를 토대로 차이점을 찾아보자면... (개념 이해를 위해 비유법을 써보겠습니다)

🍎과일을 생각했을 때,
Apple이라는 클래스가 있고, 그 Apple은 다양한 변수를 가질 것이다. Red, Green, Yellow 등...
색깔이라는 구분 아래 redApple, greenApple, yellowApple라는 각각의 객체가 있을 것이다. 아직까지 클래스와 객체는 어떤 실체로 구현된 것이 아니다. 이것을 실체로 만들기 위해서는 인스턴스화를 해야 한다.
redApple = new Apple(); 이런 식으로, new 연산자로 Apple이라는 클래스에 대해 redApple이라는 인스턴스를 생성했을 때, 비로소 실체가 되어 메모리가 할당된다.
특정한 객체에 이름을 불러주는 것인데, 김춘수 시인의 <꽃>이라는 시의 한 구절이 떠오르는 건 ... 내가 문과생이기 때문?

"내가 그의 이름을 불러주었을 때,
그는 나에게로 와서
꽃이 인스턴스가 되었다."
(죄송합니다..)

4️⃣ 제어자 static

위에서 살펴보았듯 클래스 안에는 여러 객체가 있을 수 있다. 어떠한 구분으로 인해 서로 다른 객체가 됐겠지만, 객체와 인스턴스에 관계없이 클래스 공통으로 제어를 하고 싶을 때 넣는 부가적 기능이다. static 제어자는 멤버 변수 즉 클래스 변수, 메서드 그리고 초기화 블럭에 적용될 수 있다.
👉 제어자?
앞서 Java 기초 포스팅에서 언급한 4가지 접근제어자 외에 static, final, abstract 등 다양한 제어자가 있다. 제어자는 클래스, 변수 또는 메서드의 선언부에 사용하여 부가적인 의미를 넣는 역할을 한다.
( 아래 이미지는 생활코딩 static 영상을 보며 실습 및 메모한 내용이다.)


🙌 학습 후 더 알고 싶은 내용

  • 인스턴스를 검색하다보니 인스턴스화(Instantiation), 선언(Declaration), 할당(Assignment), 초기화(Initialization) 이 네 가지 개념을 비교 분석한 자료가 적잖게 보였다. 부트캠프 진도를 나가다보면 다루게 될 개념 같지만 제공 자료 외적으로도 많이 조사해서 명확히 알고 싶다.

✨ 학습 참고자료:

profile
성장 아카이브
post-custom-banner

0개의 댓글