티스토리 뷰

자바를 공부하고 스프링으로 넘어갈 때, 스프링에서 나오는 자바 문법과 개념에 대해서 한번 더 확실하게 정리를 하면 기억에 잘 남을거 같아 적는다. 자바 문법은 다 안다고 치고 객체지향부터 알아보겠다. 이 글을 보면서 부가적인 내용들도 중요하지만 단어의 의미에 좀 더 집중해서 봤으면 한다.

 

1. 객체지향 언어 란 ?

객체지향이란 말은 많이 들어봤으나 의미를 말하려 하면 생각이 나지 않는 경우가 많다.
객체지향언어는 완전히 새로운 프로그래밍이 아니라, 기존의 프로그래밍 언어에 몇가지 새로운 규칙을 추가한 형태이다.
이러한 규칙을 이용해서 코드 간의 서로 관계를 맺어 유기적으로 프로그램을 구성하는 것이 가능하다.

객체지향언어의 주요 특징은 다음과 같다.

 

1-1. 코드의 재사용성이 높다.

새로운 코드를 작성할 때 기존의 작성해둔 코드를 이용하여 쉽게 작성할 수 있다.

 

1-2. 코드의 관리가 용이하다.

코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.

 

1-3. 신뢰성이 높은 프로그래밍을 가능하게 한다.

제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며,
코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.

객체지향의 가장 큰 장점은 코드의 재사용성이 높고 유지보수가 용이하다는 것이다.
그래서 개발과 유지보수에 드는 시간과 비용을 획기적으로 개선하였다.

처음 배우는 객체지향개념(상속, 다형성)을 학습할 때, 재사용성과 유지보수, 그리고 중복된 코드의 제거
이 세 가지 관점에서 보면 보다 쉽게 이해할 수 있을 것이다.

 

2. 클래스와 객체

클래스란 객체를 정의해놓은 것, 또는 객체의 설계도 또는 틀 이라고 정의할 수 있다.
잘 모르겠으면 객체를 생성하는 곳이 클래스구나! 라고 알면 된다.
클래스는 객체를 생성하는데 사용되며, 객체는 클래스에 정의된 대로 생성된다.

클래스의 정의 : 클래스란 객체를 정의해 놓은 것
클래스의 용도 : 클래스는 객체를 생성하는데 사용


객체의 사전적 의미는 실제로 존재하는 것이다. 선풍기, 자동차 등 우리 주변에서 볼 수 있는 사물들이 곧 객체이다.
객체지향이론에서는 사물뿐만 아니라 개념이나 논리와 같은 무형적인 것들도 객체로 간주한다.
프로그래밍에서의 객체는 클래스에 정의된 내용대로 메모리에 생성된 것을 뜻한다.

객체의 의미가 이해가 안될 수 있다. 클래스와 객체의 관계를 알면 더 쉽게 이해가 갈 것이다.
예를 들면 TV설계도를 클래스라 하고, TV를 제품이라고 할 때
TV설계도(클래스)는 TV라는 제품(객체)을 정의한 것이며, TV(객체)를 만드는데 사용된다.

그럼 클래스는 객체를 정의하는 거니까 클래스는 객체라고 봐도 될까 ?

클래스는 단지 객체를 생성하는데 사용될 뿐, 객체 그 자체라고 보면 안된다. 하지만 TV를 만드려면 TV설계도가 있어야 하듯이 우리가 원하는 기능의 객체를 사용하기 위해서는 먼저 클래스로부터 객체를 생성하는 과정이 있어야 한다.
우리가 TV를 보기 위해서는 TV(객체)가 필요한 것이지, TV설계도(클래스)가 필요한 것은 아니다. 단지 TV(객체)를 만드는 데만 사용될 뿐이다. 그리고 TV는 TV설계도를 통해 만들어진 후에 사용할 수 있다.

 

3. 객체의 구성요소 - 속성과 기능

객체는 속성과 기능으로 이루어져 있으며 다수의 속성과 다수의 기능을 갖는다. 즉, 객체는 속성과 기능의 집합이라고 할 수 있다. 그리고 객체가 가지고 있는 속성과 기능을 그 객체의 멤버라고 한다(멤버변수).
클래스란 객체를 정의한 것이므로 객체의 모든 속성과 기능이 정의되어 있다. 그래서 객체를 생성하면, 클래스에 정의된 속성과 기능을 가진 객체가 만들어지는 것이다.

객체지향 프로그래밍에서는 속성과 기능을 각각 변수와 메서드로 표현한다.

class Tv {

	String color; //멤벼변수 -> 속성
    
    //메서드 -> 기능
    void power() {
    	System.out.println("power on");
    }
}

 

4. 객체와 인스턴스

클래스로부터 객체를 만드는 과정을 인스턴스화 라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다. 예를 들면 Tv클래스로부터 만들어진 객체를 Tv클래스의 인스턴스라고 한다.

그러면 객체와 인스턴스는 같은 뜻 일까 ?

결국은 같은 뜻이지만 살짝 다른 의미를 가지고 있다. 영단어의 see와 watch의 뜻은 같지만 사용할 때 문맥에 따라 다르게 사용한다는 것을 생각해보자. 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖고 있으며, 인스턴스는 어떤 클래스로부터 만들어진 것인지를 강조하는 의미를 가지고 있다.

예를 들면 '책상은 인스턴스다.' 라고 하기 보다는 '책상은 객체다.'라는 쪽이, '책상은 책상클래스의 객체이다.'라고 하기 보다는 '책상은 책상클래스의 인스턴스다.'라고 하는 것이 더 자연스럽다.

인스턴스와 객체는 같은 의미이므로 엄격하게 구분할 필요는 없지만, 위에서 본 것과 같이 문맥에 따라 구별하여 사용하는 것이 좋다.

클래스 → (인스턴스화) → 인스턴스(객체)



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday