반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Yeonee's Story

[취업/면접] 인스턴스란(Instance)? (클래스, 인스턴스, 객체 차이점) 본문

。*:・゚☆・゚schedule・゚*:・゚★・:*:・☆ *:・゚★/나의 면접 준비 자료 ✿˘◡˘✿

[취업/면접] 인스턴스란(Instance)? (클래스, 인스턴스, 객체 차이점)

yeonee 여니 2023. 10. 4. 00:12
728x90
반응형
SMALL

안녕하세요.
https://blog.naver.com/sysysy0302 여니입니다 :)

 

붕어빵과 인스턴스를 비유하여 설명을 잘해두신 분의 포스팅을 참조하여 제 스타일로 바꾸어 포스팅을 적어보겠습니다.
instance폴더에 해당 포스팅 공부자료를 넣어두었으니 참고하실 분들은 git 링크를 이용해주세요.

💕 Git 링크

 

GitHub - yeoneeeeeee/MyPractice

Contribute to yeoneeeeeee/MyPractice development by creating an account on GitHub.

github.com

 

먼저 기본적인 인스턴스의 정의에 대해 알아보겠습니다.

인스턴스(Instance)

일반적으로 어떤 집합에 대해서, 그 집합의 개별적인 요소.
객체 지향 프로그래밍에서 어떤 클래스에 속하는 각 객체를 '인스턴스'라고 합니다.
또한 변수가 포함되어 있는 어떤 논리식의 변수에 구체적인 값을 대입하여 식을 만들고자 한다면 기존 식의 인스턴스가 만들어집니다. 이런 의미에서 인스턴스를 실현치라고 합니다.

 

Class, 인스턴스, 객체

먼저 붕어빵을 떠올려봅니다. 
붕어빵을 만들려면 붕어빵을 찍기 위한 '틀'이 필요합니다. 틀이 준비되었다면 틀에 '밀가루 반죽'과 '팥'을 넣고 '구워'줍니다. 적당히 구워지면 틀에서 붕어빵을 꺼내주면 맛있는 '붕어빵' 완성!

이 과정을 Class, Object, Instance의 관점에서 살펴보도록 하겠습니다.
우선 붕어빵과 각 요소들을 일대일 대응 시켜줍니다.

  • 붕어빵틀 = Class
  • 붕어빵 = Object
  • 각각의 붕어빵 = Instance
  • 붕어빵을 굽다 = 인스턴스화(Instance)화 하다

먼저 붕어빵틀이란 'Class'에 대해 생각해보겠습니다.
붕어빵들은 '밀가루 반죽'과 '팥'이라는 '변수'를 가지고 있습니다.
그리고 '굽다'라는 '메서드'를 가지고 있습니다.

이것을 일반적인 class의 표현법으로 나타내보겠습니다.

 

그럼 이제 붕어빵을 구워볼까요?

붕어빵틀에 밀가루 반죽과 팥을 집어넣을거에요.
다같이 나눠먹기 좋게 6개를 만들어 보도록 합시다.
각각의 붕어빵에 이름을 붙여줍니다.

각각의 붕어빵에 서로 밀가루 반죽과 팥의 양을 각각 다르게 집어넣었습니다.
이제 '굽다()'라는 '메서드를 호출'해서 붕어빵을 굽워줍니다.

붕어빵이 구워지고 있어요. 
지금 과정이 '인스턴스(Instance)화' 하고 있는겁니다.

짠~~ 붕어빵이 완성되었어요!
드디어 '객체'가 만들어진거죠!

위 과정을 요소별로 정리해보면,
붕어빵틀이라는 Class에서 밀가루 반죽과 팥이라는 변수를 넣어서 굽는 과정인 인스턴스화 과정을 거쳐 각기 다른 붕어빵인 인스턴스가 완성되었습니다. 여기서 완성된 붕어빵은 하나의 객체입니다.
즉, 붕어빵(객체)들을 살펴보면 같은 틀(Class)에서 구워(인스턴스화)졌지만, 각기 다른 자신만의 개성을 가진 붕어빵(Instance)이 만들어졌습니다. 요리를 통해 완성된 붕어빵은 하나의 (객체)입니다.

 

이제 아래의 개념을 비교하며 다시 보면 이해하기 쉬울 것 입니다.

클래스, 인스턴스, 객체의 개념

클래스(Class)란?

[ 개념 ]
- 객체를 정의하고 만들어내기 위한 설계도 혹은 템플릿(틀) 역할
- 연관되어 있는 변수와 메서드의 집합

[ 특징 ]
- 객체의 속성을 나타내는 필드(field)와 객체의 행동을 나타내는 메소드(method)로 구성됩니다.
- 필드란 클래스에 포함된 변수(variable)를 의미합니다.

 

인스턴스(Instance)란?

[ 개념 ]
- 클래스를 기반으로 생성된 개체를 가리킵니다.
- 클래스의 실제 예시 또는 실체입니다. (클래스를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체)
  즉, 객체를 소프트웨어에 실체화하면 그것을 '인스턴스'라고 부릅니다.
- 실체화된 인스턴스는 메모리에 할당됩니다.

[ 특징 ]
- 인스턴스는 객체에 포함된다고 볼 수 있습니다.
- 클래스의 템플릿에 따라서 속성과 메서드를 가집니다.
- OOP의 관점에서 객체가 메모리가 할당되어 실제 사용될 때 '인스턴스'라고 부릅니다.
- 추상적인 개념(또는 명세)과 구체적인 객체사이에 초점을 맞출 경우에 사용합니다.
- 즉, 인스턴스라는 용어는 반드시 클래스와 객체 사이의 관계로 한정지어 사용할 필요는 없습니다.
- 인스턴스는 어떤 원본(추상적인 개념)으로 부터 '생성된 복제본'을 의미합니다.

ex) '사람'클래스로부터 생성된 '유리'라는 인스턴스는 특정 이름과 나이값을 가집니다.

 

객체(Object)란?

[ 개념 ]
- 소프트웨어 세계에 구현할 대상
- 클래스에 선언된 모양 그대로 생성된 실체
- 객체와 인스턴스는 종종 혼용되어 사용되지만, 객체는 모든 것을 가리키는 것보다 일반적인 용어로서 사용됩니다.

[ 특징 ]
- '클래스의 인스턴스(instance)'라고 부릅니다.
- 클래스와 인스턴스 모두 객체입니다.
- 객체는 데이터와 해당 데이터를 처리하는 메서드의 조합을 의미합니다.

ex) '자동차'클래스를 정의하면 그 클래스를 기반으로 'BMW'와 'Audi'라는 인스턴스를 생성할 수 있습니다. 이 경우 'BMW'와 'Audi'는 '자동차'클래스의 인스턴스이며, 모두 객체입니다.

>> 위 개념을 요약하면, 클래스는 객체를 생성하기 위한 설계도이며, 인스턴스는 클래스를 기반으로 생성된 개체를 의미하며, 객체는 클래스와 인스턴스를 포괄적으로 나타내는 용어입니다.

 

아래의 코드를 통해 좀 더 자세히 생각해 볼 수 있습니다.

// FishBreadTool.java
public class FishBreadTool {

        // member variable

        private String name;   // 붕어빵의 이름

        private int flour;     // 밀가루반죽의 양

        private int redbean;    // 팥의 양

        // Constructor

        public FishBreadTool ( String iname, int iflour, int iredbean ){

                name = iname;

                flour = iflour;

                redbean = iredbean;

                bake();

        }

        // memeber method

        public void bake(){

                System.out.println(name + " 붕어빵이 만들어 졌습니다.");

        }

}
// FishBreadMaker
public class FishBreadMaker {

        public static void main(String[] args){

                // 붕어빵틀에 밀가루반죽과 팥을 넣고 굽습니다.

                FishBreadTool a = new FishBreadTool("덕수붕어",2,3);

                FishBreadTool b = new FishBreadTool("준훈붕어",2,2);

                FishBreadTool c = new FishBreadTool("풍석붕어",3,3);

                FishBreadTool d = new FishBreadTool("진영붕어",2,2);

                FishBreadTool e = new FishBreadTool("현진붕어",2,1);

                FishBreadTool f = new FishBreadTool("진희붕어",1,1);

        }

}

< 콘솔창 출력 모습 >

 

+ 참조 사이트

728x90
반응형
LIST