[Spring] 객체지향 개념(Object-Oriented)

<p>[Spring] 객체지향 개념(Object-Oriented)

스프링에 대해 알아보기 전에 스프링을 이해하기 위해 필요한 객체지향 개념에 대해 알아본다.

스프링을 이해하기 위해

스프링을 제대로 이해하기 위해선 객체지향 개념부터 확실히 알 필요가 있다.
Spring MVC가 돌아가는 방식은 ‘어노테이션’을 이용한 의존성 주입(Dependency Injection)을 이용하기 때문에
겉으로 보아선 이해하기 힘들다.

객체지향 개념


위 사진은 스타크래프트란 게임의 ‘마린’과 ‘SCV’ 유닛의 상태창이다.
각각의 버튼들마다 각기 다른 기능을 담고있다.

두 유닛을 보면 상위 3가지 버튼은 동일하고 나머진 다른 버튼임을 알 수 있다.
스타크래프트에서 대부분의 유닛들은 모두 저 3가지 버튼을 가지고 있는데,
순서대로 ‘이동, 정지, 공격’이다.

이를 객체지향형 프로그램에 대입해 보자.
간단한 정리를 해보면

  1. 모든 유닛들은 ‘이동, 정지, 공격’의 공통 기능을 가지고 있다.
  2. 각 유닛 종류마다 공통 기능을 제외한 고유한 기능을 가지고 있다.

빨간 테두리 부분이 공통 기능, 초록 테두리가 고유 기능이 된다.
객체지향언어(Java 등)에서 공통 기능을 가진 부분은 인터페이스로 정의하면 된다.
고유 기능을 가진 부분은 해당하는 클래스를 생성하면 된다.

자바에선 인터페이스는 다중상속이 가능하지만, 클래스는 다중상속이 불가능하다.

예를 들어 마린 10마리를 생성한다고 생각하자.
각 마린 객체들은 유닛 인터페이스마린 클래스를 상속받게 된다.
그렇게 생성된 각각의 마린들은 초기엔 모두가 같은 상태, 같은 값을 가지게 되지만,
전투 등에 의해 체력이 닳으면 각각의 생성된 객체의 hp값만 수정해주면 된다.

이렇게 하나의 마린 유닛에 대한 정보를 하나의 클래스 안에 전부 작성하지 않고,
인터페이스, 클래스를 만들어 모두 객체화 시킨 뒤 이를 이용하는것이 객체지향의 기본 개념이다.

객체지향 사용 이유?

위에서 아주 간단하게 객체지향 개념에 대해 알아보았다.
이러한 객체지향을 사용하는 이유는 무엇일까?
가장 큰 이유는 유연성이다. 객체지향 언어는 상당히 유연하다.

위에서 생성한 10마리의 마린들이 객체지향이 아닌 언어로 작성했다고 가정하자.
10마리의 마린 모두 상속 없이 각각의 클래스 안에서 작성되어 있다면,
게임의 밸런스 패치, 게임속 업그레이드 등의 상황에서 10개의 클래스를 모두 찾아가
수정된 내용을 적용해주어야 한다.

반면에 객체지향적으로 구성되어 있다면 단순히 마린 클래스(슈퍼 클래스)를 찾아가 수정된 내용만 적용하면
해당 클래스를 상속받아 만들어진 10마리의 마린들이 모두 한 번에 적용받게 된다.

인터페이스도 마찬가지다.
새로운 유닛이 추가되거나, 모든 유닛이 사용할 수 있는 새 기능이 추가되는 등 상황에서
유닛 인터페이스를 이용하면 상속받는 모든 유닛에 동일하게 적용할 수 있다.


© 2018. All rights reserved. Polog by Soowan Kim.

Powered by Hydejack v8.2.0