JAVA

[JAVA와 친해지기] 클래스와 객체

프로그래밍 방법론(Programming Methodology)라는 것이 있습니다. 프로그래머는 컴퓨터와 대화를 하는 사람으로 어떠한 언어를 사용해서 컴퓨터와 대화를 할지 결정해서 컴퓨터에게 작업을 지시하기도 하고, 컴퓨터의 이야기를 듣기도합니다.

 

JAVA라는 언어로 대화하기를 선택한 우리들은 JAVA언어를 어떻게 전달하는지 그 "방법" 알아야 [효율적]으로 컴퓨터와 대화할 수 있습니다.  '어떻게 컴퓨터에게 작업을 지시할 것인지에 대한 방법'을 "프로그래밍 방법론"이라고 부를 수 있습니다.(위키백과의 정의도 아래 남겨두겠습니다.) JAVA는 그 중 '객체지향 프로그래밍(Object Oriented Programming)'이라는 방법론을 사용합니다.


객체지향이란?

객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.

< 출처 위키백과 https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8Dhttps://ko.wikipedia.org/wiki/%EB%B0%B0%EC%97%B4>

위에서 중요한 단어들만 굵음 처리해서 다시보겠습니다.

 

"객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다."

 

객체지향에서 핵심적인 단어들이 위에 적혀있습니다. 만약 우리가 '강아지'와 '고양이'을 "객체"로 간주한다면 다음과 같이 표현할 수 있습니다.

위 그림에서 '강아지'와 '고양이'는 객체(아래부터는 '클래스'라는 이름과 혼용하겠습니다.)입니다. 객체(클래스)는 성별, 키, 몸무게 같은 속성을 가질 수 있고, 밥먹기, 잠자기 등의 '행동'을 할 수 있습니다. 타 프로그래밍언어의 '함수'가 JAVA에서는 '메서드'라고 불린다고 생각해 주시면됩니다.

&lt;출처 : 위키백과&nbsp; https://ko.wikipedia.org/wiki/%ED%95%A8%EC%88%98 &gt;

프로그래밍에서 함수란 0개 이상의 입/출력을 받아 무엇인가 기능을 하는 개념입니다. JAVA에서는 이 함수를 '메서드'라고 부르며 '메서드'를 통해서 객체와 객체가 상호작용하며 프로그램이 진행됩니다.


클래스와 인스턴스

그러면 JAVA에서 어떻게 객체라는 개념을 코드로 표현하고 있을까요? 그걸 알기위해서는 우선 클래스와 인스턴스의 관계를 알아야합니다.

 

  • 클래스 : 객체를 만들기 위한 '틀'
  • 인스턴스 : 클래스라는 틀로 만들어진 '실제 객체'

 

최근에 유명한 넷플릭스의 오징어 게임의 달고나 게임을 기억하시는 분들이 많으실 겁니다. 달고나도구는 달고나를 반복적으로 찍어낼 수 있는 틀입니다. 이렇게 생성된 달고나를 '인스턴스'라고 칭하며, 달고나 도구를 '클래스'라고 부릅니다. 코드를 보며 실제 상황을 가정하겠습니다. 위의 그림중 강아지에 대한 클래스입니다.

// Dog.java

public class Dog{
	
	int gender;
	int height;
	int weight;
	boolean adorable;
	boolean cute;
	
	Dog(){
    		System.out.println("Hello Im dog");
    	}	// 객체생성자
	
	public void eat(){}
	public void bark(){}
	public void sleep(){}
	public void tailling(){}
	
}

JAVA에서 객체(틀)을 만들고 싶을때는 'class' 라는 예약어를 사용한 후 사용할 클래스명(여기서는 Dog)를 지정합니다. 클래스 블럭(중괄호로 둘러쌓인 부분)에는 변수선언(멤버선언), 매서드선언(행위선언)을 할 수 있습니다. 

 

중간에 System.out.println("Hello Im dog");가 보입니다. 이 출력문은 생성자이름인 Dog의 함수블럭에 존재하는데요. 이것은 매서드가 아닌 '생성자' 라고 불리웁니다. 

  • 생성자(Constructor) : 객체가 인스터스화될때(생성될 때) 호출되는 블럭 생략가능하다.

이 Dog틀롤 인스턴스를 만드는것을 예시로 보면서 생성자 이야기를 계속하겠습니다. 아래는 Dog틀을 이용해서 새로운 강아지 bagGu와 hwangGu를 만드는 코드입니다.

 

// DogTest.java

public class DogTest{
	public static void main(String[] args){
    		Dog bagGu;
        	Dog hwangGu = new Dog();
	}
}

Dog라는 '틀'은 자료형이 됩니다. 우리가 지난 시간 알아보았던 기본자료형또한 '틀'이고요. 따라서 변수를 선언하듯이

<자료형> [사용할 변수명] 의 형태로 인스턴스를 만들 수 있습니다. 이렇게만 하면 변수를 사용할 것이라는 '선언'만 진행한것입니다. '초기화'를 위해서는 'new' 라는 예약어를 이용합니다. 위 코드에서는 new Dog()가 될것입니다. 코드를 실행시켜보면 콘솔창에 다음과 같은 결과가 나올것입니다. 

Hello Im dog

이 'Hello Im dog'는 Dog hwangGu = new Dog();에서 출력된 코드입니다. 객체가 인스턴스가 될 때는 생성자가 호출이됩니다. 따라서 객체코드의 Dog(){ System.out.println("Hello Im Dog")}가 실행된 것입니다.


이번시간에는 객체와 인스턴스, 생성자에 관하여 간단하게 알아보았습니다. 다음시간에는 생성자의 활용법과 객체사용법을 조금더 알아보는 시간을 가지겠습니다!

'JAVA' 카테고리의 다른 글

[Java Project] 죽는날 타이머. DIE_ALARM  (0) 2022.09.18
[JAVA와 친해지기] 생성자  (0) 2021.12.13
[JAVA와 친해지기] 배열  (0) 2021.08.24
[JAVA와 친해지기] 반복문  (0) 2021.08.21
[JAVA와 친해지기] 흐름제어문  (0) 2021.08.19