본문 바로가기

DEVELOPER/Java

[JAVA 파헤치기] 객체 지향, 클래스, 객체 개념 다루기

반응형

1. 객체지향 언어


자바(Java)의 특징인 객체지향에 대해서 알아보도록 하겠습니다. 객체 지향 프로그래밍(Object-Oriented Programming,OOP)은 여러 개의 독립된 단위, 즉 "객체(Object)"들의 모임으로 파악하는 것입니다. 다시 말해서 프로그램을 수많은 객체라는 기본 단위로 나누고 이들의 상호작용으로 서술하는 방식입니다. 

여기서 객체는 '실제로 존재하는 것'입니다. 즉 어떠한 데이터(실체)와 관련된 동작을 포함한 개념입니다. 예를 들어 우리 주변에서 볼 수 있는 책상, 의자, 자동차, 고객 등과 같습니다. 객체지향이론에서는 사물과 같은 유형적인 것뿐만 아니라, 개념이나 논리와 같은 무형적인 것들도 객체로 간주합니다.
JavaScript : 프로토타입 객체지향
Python : 접근제한자가 없음

 

초기 프로그래밍 방식은 절차적 프로그래밍 방식이었습니다. 다른 말로는 절차지향이라고 합니다. 이는 시작 기준에서 논리의 절차를 따르며 진행됩니다. 만약 중간에 오류가 있다면, 이후 모두 오류가 걸리게 됩니다. 또한 코드가 복잡해질수록 문제가 쉽게 발생합니다.(스파게티 소스 코드) 이러한 방식은 기능에 대해서만 신경을 쓸 뿐, 이 프로그램이 대체 어떤 데이터를 취급하는지는 관심이 없습니다.

반대로 객체지향은 순서 상관없이 독립적으로 분리하며 객체들을 상호작용이 가능하게 설계할 수 있습니다. 덕분에 오류가 발생해도 다른 객체에게 영향이 안갈뿐더러, 코드의 재사용, 관리등이 용이합니다.

그림 출처 : 휴몬랩 메이커 연구소

1.1 객체지향언어의 주요 특징

1) 코드의 재사용성이 높다
2) 코드의 관리가 용이하다.
3) 신뢰성이 높은 프로그래밍을 가능하게 한다.
-> 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거
-> 코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지

 

1.2 객체지향 프로그래밍의 구성(OOP) 요소

그림 출처 : 휴몬랩 메이커 연구소


2. 클래스


클래스(Class)란?

'객체를 정의해놓은 것' 또는 '객체의 설계도 또는 틀'이라고 정의할 수 있습니다. 클래스는 객체를 생성하는데 사용되며, 객체는 클래스에 정의된 대로 생성됩니다. 여기서 중요한 것은 클래스와 객체를 혼동해서는 안됩니다. 위에서 언급한 대로 클래스는 객체를 생성하는데 사용될 뿐, 객체 그 자체는 아닙니다. 

위에 그림을 보면, 왼쪽 붕어빵을 만드는 기계가 클래스라 할 수 있습니다. 그리고 오른쪽 붕어빵이 객체와 동일합니다.

만약 붕어빵 기계에 틀 모양이 고래 모양이었다고 가정해봅시다. 그렇다면 붕어빵은 고래 형태로 만들어지게 됩니다. 이처럼 클래스에 짜여진 코드에 따라 기능과 속성이 다른 객체가 나오게 됩니다. 

추가로 한 클래스에서 여러 개의 객체를 생성할 수 있습니다.

2.1 클래스의 3가지 구성 요소

1) 필드(field) : 클래스에 포함된 변수(variable)
2) 메소드(method) : 특정 작업을 수행하기 위한 문장들의 집합
3) 생성자(constructor) : 인스턴스 초기화 메소드, 객체 생성

 

3. 객체


위에서 한번 설명했지만, 한번 더 적도록 하겠습니다.

객체(Object)란?

'실제로 존재하는 것'입니다. 즉 어떠한 데이터(실체)와 관련된 동작을 포함한 개념입니다. 예를 들어 우리 주변에서 볼 수 있는 책상, 의자, 자동차, 고객 등과 같습니다. 객체지향이론에서는 사물과 같은 유형적인 것뿐만 아니라, 개념이나 논리와 같은 무형적인 것들도 객체로 간주합니다.

3.1 객체의 구성 요소

객체는 속성, 기능으로 두 가지 구성요소를 갖습니다. 주로 클래세에 해당 객체의 모든 속성과 기능을 정의합니다.

속성은 크기, 길이, 높이, 색상, 볼륨, 채널, 가격 등과 같습니다. 기능은 켜기, 높이기, 끄기, 앞으로 이동하기 등과 같습니다. 객체지향 프로그래밍에서는 이러한 속성과 기능을 각각 변수와 메서드로 표현합니다.

속성(property)  => 멤버변수(variable)
기능(function) => 메서드(method)

다음은 TV가 갖는 기능과 속성으로 만든 클래스입니다.

// 클래스의 이름의 첫번째 글자는 관례상 대문자로 표기합니다.

class Tv {

    // 속성, 멤버변수(variable)에 해당
    String color;
    boolean power;
    int channel;
    
    //기능, 메서드(method)에 해당
    void power() { power = !power; }
    void channelUp() { channel++; }
    void channelDown() { channel--; }
}

3.2 객체와 인스턴스

클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화(instantiate)라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스(instance)라고 합니다. 즉, 클래스를 인스턴스화 하여 인스턴스(객체)를 만듦니다.

객체 == 인스턴스

결국 인스턴스는 객체와 같은 의미이지만, 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖고 있으며, 인스턴스는 어떤 클래스로부터 만들어진 것인지를 보다 강조하는 의미를 갖습니다.

'책상은 인스턴스다' < '책상은 객체다'
'책상은 책상 클래스의 객체다' < '책상은 책상 클래스의 인스턴스다

이상으로 자바 언어의 특징인 객체 지향 언어와 클래스, 객체까지 개념을 간단하게 알아봤습니다.
다음은 이러한 클래스와 객체의 생성과 더 자세한 내용을 알아보도록 하겠습니다.

반응형