Java

[Java] 클래스의 정의와 인스턴스

꽃달린감나무 2021. 11. 20. 20:57
728x90

객체지향 프로그래밍?

Java는 객체지향 언어입니다. 여기서 말하는 객체는 무엇일까요? Object(객체) 물건, 또는 대상을 뜻합니다.

예를 들어보자면, "철수가 영희에게 고백했다." 라는 문장에서 나타나는 객체는 철수, 영희 입니다. 그럼 여기서 고백이라는 행위는 어떻게 표현하면 좋을까요? 철수라는 객체에는 '고백한다' 라는 행동을  영희에게는 '고백을 받는다'라는 행동을 넣어주면 됩니다. 이처럼 현실에서 일어나는 상황에서의 대상, 사물, 그리고 행동을 있는 그대로 실현시키는 것을 객체지향프로그래밍이라고 이야기할 수 있을 것 같아요!  

 

객체는 어떻게 구성되어있을까?

결론부터 말하자면 데이터기능으로 구성되어있습니다. 여기서 말하는 데이터상태와 같다고 생각할 수 있어요!

예를 들어보자면, 철수와 영희라는 객체의 데이터, 즉 상태를 파악해보자면 다음과 같은 상태를 예측할 수 있습니다.

'마음', '고백할 용기', '나이', '성별', '소속', '이름'

그럼 이제 기능을 알아볼까요? 기능은 현실에서 하는 행동을 담고있는 것이라고 보면 될 것 같아요. 객채의 행동을 파악해보자면 "축구를 한다", "공부를 한다","고백을 한다", "고백을 받는다" 등을 예상 할 수 있을 것 같아요.

하지만 여기서 철수가 영희에게 고백했다라는 문장 행하기 위해 필요한 것은 '마음', '이름' '고백할 용기', "고백을 한다" 불필요한 것은 '나이', '성별', '소속',"축구를 한다", "공부를 한다"에요! 이렇게 불필요한 상태와 행동은 없애는 것이 좋아요! 그럼 필요한 기능과 데이터를 프로그래밍으로 구현하자면 다음과 같습니다.

 

데이터

이름 ---> String name = "철수"

마음 ---> String heart = "영희";

고백할 용기 ---> int courage = 100; (용기를 0~100사이 수치로 표현)

 

기능 

public void Goback(int courage, String heart){
	
    if(int courage == 100)
    	system.out.println( heart + "야 내 맘을 받아줘");
    else
    	system.out.println("고백할 용기가 부족해");        
}

public void selectresult(){
	if(...)
     	system.out.println("응응");
    else
     	system.out.println("미안")
}

 

이렇게 구성할 수 있을 것 같아요!

 

클래스란?

그럼 이러한 기능과 데이터들을 모아서 하나의 틀을 만들고 틀을 이용해 철수와 영희라는 객체를 만들어야 해요. 여기서 틀이 클래스가 될 수 있어요. 즉, 클래스란 객체가 필요로하는 데이터와 기능을 가지고 있는 틀이라고 생각하면되요.

class Person{
	String name ="";
    String heart ="";
    int courage = 100;
    
    public void goBack(int courage, String heart){

        if(int courage == 100)
            system.out.println( heart + "야 내 맘을 받아줘");
        else
            system.out.println("고백할 용기가 부족해");        
    }

    public void selectResult(){
        if(...)
            system.out.println("응응");
        else
            system.out.println("미안")
    }
}

인스턴스란?

그럼 위와 같이 틀을 만들었으면 틀을 통해 철수와 영희를 만들어야겠죠? 바로 여기서 만들어지는 철수와 영희를 인스턴스라고 해요! 이렇게 되면 철수와 영희는 Person이라는 클래스에 있는 데이터와 기능을 사용할 수 있어요!

public static void main(String[] args){
    Person charles = new Person();  //철수 객체 생성
    Person youngHee = new Person(); //영희 객체 생성
    
    // 생성된 객체에 다음과 같이 접근할 수 있어요!
    Charles.goback(charles.courage, charles.heart); 
    youngHee.selectResult();
 }

위에서 Person charles = new Person();문을 살펴보자면 new Person은 생성된 객체를 메모리에 저장되고, 저장된 메모리의 주소값이 반환되어 참조변수인 Person charles에 저장됩니다.

객체에 접근하기 위해서는 참조변수.객체의변수/메소드 형식으로 접근할 수 있습니다.

예시 : Charles.goback(charles.courage, charles.heart); 

 

여기서 궁금증이 듭니다. 객체와 인스턴스의 차이는 무엇일까요?

자바를 배우다보면 얼핏 드는 생각이 객체와 인스턴스는 같은 말이라고 생각이 들을 때가 많아요! 그런데 누군가 객체와 인스턴스에 대해서 물어본다면 어떻게 설명하지 잘모르겠어요! 그래서 정보를 찾아본 결과 다음과 같이 설명하기로 했어요

객체는 현실에 존재하는 영희와 철수를 표현할 때, 즉, 영희 소꿉친구인 철수를 의미하는 객체를 생성한다.라 표현할 때는 객체라는 단어를 프로그래밍 상에서 객체라는 단어를 설명할 때는 인스턴스를 사용하는 것 좋을 것 같아요. 예를 들어 다음과 같은 문장에서요! 클래스 Person의 인스턴스를 두 개 생성한다. 

 

(이 글은 난 정말로 JAVA를 공부한 적이 없다구요 책을 토대로 배운 내용을 필자가 정리한 글입니다.)

좀 더 정확한 예제를 참조하고 싶으면 아래의 링크를 확인해주세요!

Java/FruitStore at main · wpdbs1229/Java (github.com)

728x90