[Java] 클래스와 객체

Nakjoo·2022년 12월 27일
0

[SEB_BE_43]

목록 보기
8/29

1. 클래스

클래스(Class)객체를 정의한 '설계도(blueprint)' 또는 '틀(frame)'이라 정의할 수 있다.
즉, 클래스는 객체를 생성하는데 사용되며, 반대로 객체는 클래스에 정의되고 설계된 내용 그대로 생성된다.

여기서 꼭 기억하고 넘어가야 할 한 가지는, 클래스는 객체 그 자체가 아니라 단지 객체를 생성하는 데 사용되는 하나의 틀이라는 사실이다.

클래스를 통해 생성된 객체를 해당 클래스의 인스턴스(instance)라고 부르고, 또한 클래스로부터 객체를 만드는 과정을 인스턴스화(instantiate)라 지칭한다.

그렇다면 객체와 인스턴스의 차이는 무엇일까?

객체는 모든 인스턴스를 포괄하는 넓은 의미를 가지고 있는 반면, 인스턴스는 해당 객체가 어떤 클래스로부터 생성된 것인지를 강조한다는 데 그 차이가 있다고 할 수 있다.

그렇다면 왜 클래스를 정의하고 이것을 통해 객체를 생성해야할까?

주로 많이 사용하는 아래의 붕어빵 기계와 붕어빵 이미지를 통해서 한번 알아보자.

붕어빵을 만드는 데 있어서, 최초에 붕어빵을 만드는 기계를 잘 만들어 놓으면 매번 붕어빵을 어떻게 만들어야 할 지 매번 고민하지 않아도 될 것이다. 잘 만들어진 붕어빵 기계는 백 번이고, 수 천 번이고 계속해서 같은 모양의 붕어빵을 잘 만들어낼 수 있다.

이와 마찬가지로 클래스를 한 번 잘 정의해 놓으면, 매번 객체를 생성할 때마다 어떻게 객체를 만들어야 할 지 더이상 고민하지 않고, 그저 클래스로부터 객체를 생성해서 사용하기만 하면 된다.

2. 클래스의 구성 요소와 기본 문법


그렇다면 클래스는 어떻게 정의할 수 있을 까?

클래스는 기본적으로 class 키워드를 사용하여 다음과 같이 정의한다. 클래스명은 주로 대문자로 시작하는 것이 관례이다.

class 클래스명 { // 클래스 정의
	-- 생략 --
}

더 나아가, 클래스는 크게 네 가지의 요소로 구성되어 있다.
각각 필드(field), 메서드(method), 생성자(constructor), 이너 클래스(inner class)다.

public class ExampleClass {
	int x =10; // (1)필드
    void printX() {...} // (2)메서드
    ExampleClass {...} // (3)생성자
    class ExampleClass2 {...} // (4)이너 클래스
}

위의 네 가지 구성 요소를 간략하게 설명하면 다음과 같다.

(1) 필드 - 클래스의 속성을 나타내는 변수다. 자동차로 예를 들면 모델명, 컬러, 바퀴의 수 등이 포함될 수 있다.
(2) 메서드 - 클래스의 기능을 나타내는 함수다. 자동차로 예를 들면 시동걸기, 가속하기, 정지하기 등이 포함 될 수 있다.
(3) 생성자 - 클래스의 객채를 생성하는 역할을 한다.
(4) 이너 클래스 - 클래스 내부의 클래스를 의미한다.

위의 구성 요소들 중 생성자를 제외한 나머지 세 가지 요소를 클래스의 멤버(member)라고 부른다.

이 중에서 필드와 메서드는 각각의 클래스가 가지는 속성(state)과 기능(behavior)을 대표한다. 속성과 기능은 해당 클래스와 관련된 데이터의 집합이며, 핵심적인 정보를 담고있다고 할 수 있다.

3. 객체

앞서 클래스가 개별 객체(인스턴스)를 만들기 위한 설계도이며, 클래스를 통해 만들어진 객체가 실제로 사용할 수 있는 실체임을 알았다.

다음의 예시를 통해 객체를 좀 더 이해해보자.

이 빨간 차 한 대를 객체라고 생각해보자.

이 자동차 객체와 관련된 속성과 기능을 정리한다면 어떻게 할 수 있을까?

간단히 정리하자면,

먼저 차가 가지는 일반적인 속성으로 모델명, 바퀴의 개수, 문의 개수, 컬러 등을 언급할 수 있겠고, 그 기능으로는 시동 걸기, 가속하기, 감속하기, 정지하기 등의 기능을 생각해 볼 수 있다.

이러한 차의 기본 속성과 기능들을 코드로 옮겨보면 다음의 이미치처럼 클래스의 필드와 메서드로 정의할 수 있다.

코드를 확인해보면, 앞서 언급한 자동차의 속성과 기능이 Car 클래스 안에 각각 필드와 메서드로 구현되어 있는 것을 확인할 수 있다. 이렇게 차와 관련된 데이터와 그 데이터를 다룰 수 있는 방법을 클래스라는 울타리에 모아 하나로 관리해주니 좀 더 직관적이고 데이터 관리가 용이해졌다.

4. 객체의 생성과 활용

그렇다면 객체는 어떻게 생성할 수 있을까?

객체의 생성은 new 키워드로 생성할 수 있다.

클래스명 참조_변수명; // 인스턴스를 참조하기 위한 참조변수 선언
참조_변수명 = new 생성자(); // 인스턴스 생성 후, 객체의 주소를 참조 변수에 저장

이 과정을 간편하게 줄여서 다음처럼 선언할 수 있다.

클래스명 참조_변수명 = new 생성자();

이제 이렇게 생성된 객체를 활용해보자

포인트 연산자라고도 불리는 이 .을 활용해 특정 인스턴스 객체의 필드와 메서드, 즉 객체의 멤버들에 접근할 수 있다.

참조 변수명.필드명 // 필드값 불러오기
참조 변수명.메서드명() // 메서드 호출

0개의 댓글