삽질의 현장/- ETC

[삽잡이] 객체지향 프로그래밍에서 주의해야할 점

shovelman 2015. 10. 26. 22:45


안녕하세요 삽잡이입니다.


이번 시간에는 객체지향 프로그래밍에 있어서 주의해야할 점에 대해서

나눠보고자합니다.


캡슐화란, 

'관련성 있는 것끼리 하나의 묶음, 패킹, 틀로 만들어낸 것'을 의미합니다.

즉, 경계를 만들어 내는 것입니다.

이 캡슐화를 통해 데이터 보호와 데이터 은닉을 할 수 있습니다.


객체지향에서 기본은 클래스와 객체입니다.

클래스는 객체들의 정의입니다.

그리고 객체는 클래스의 인스턴스라고 부릅니다.


모든 객체는 '독립적'이어야합니다.

예를 들어 '삽잡이'라는 클래스를 통해 만들어진 A객체와 B객체가 있다고 해봅시다.

이때, A객체를 건드려도 B객체는 독립적으로 유지되어야한다 이겁니다.

이를 '객체의 독립성'이라고 부릅니다.

이 객체라는 것은 실제 세계에서도, 가상 세계에서도 독립성을 가집니다.

독립성을 가지지 않는 객체는 객체라고 부를 수 없습니다.


클래스의 관점에서 독립성을 가진 객체들은 하는 일들이 모두 같습니다.

즉, 추상화된 클래스로부터 객체들이 생성되는 것입니다.


각 속성과 메서드는 각각의 객체들의 것입니다.

왜냐하면 객체끼리는 완벽하게 '구분'되어있기 때문입니다.

따라서 캡슐화를 통해서 몇개의 객체가 생성되든 

독립적으로 움직이도록 반드시 구현을 해야합니다.


또한, 공중에 부양되어있는 그 어떠한 것을 사용해서는 안됩니다.

이말인 즉, 객체의 것, 클래스의 것을 사용해야합니다.

이 뜻은 각 객체에서 자신들의 필드와 메서드를 사용하도록 만들어야한다는 것입니다.

각 객체에서 가져다 쓰기 위해서 '캡슐화'를 통해 클래스를 정의하는 것이기 때문입니다.


따라서 여러개의 객체에서 하나의 데이터를 공유할 경우에는 신중에 신중을 가해야합니다.

캡슐화 즉, 정의 자체가 잘못되어있다면 

여러분은 스파게티 코드를 만드는 세프가 되는 것입니다.


특히나 static 과 같은 키워드는 사용시 신중해야합니다.

많이 사용되는 키워드지만, 아무 곳에서도 붙이면 안됩니다.


static은 크게 두 가지의 경우에 사용됩니다.


첫번째로 '공유하고자 할 때'입니다.

static은 공유되어야 합니다. 그리고 딱 하나만 만들고 싶을 때 사용합니다.

아무튼... 공유될 필요성이 있을 때 사용한다는 것입니다.


그리고 두번째로, '인스턴스 없이도 존재해야할 때' 사용합니다.

인스턴스 없이도 존재하고 사용되어야할 때에 static 키워드를 붙인다는 것이죠...


이 두 가지의 경우 외에는 왠만해서 static 키워드를 사용하는 것이 아닙니다.

캡슐화를 거의 빼버리기 때문이지요...

객체가 만들어지는 순간 static 데이터를 공유해버리지 않겠습니까...

따라서 의도가 공유하는 목적이 아니었는데 

각 객체들이 공유하게 된다면 문제가 생기겠지요...


일반적으로 공유를 목적으로 하는 static 데이터는 대부분이 Only 'Read'입니다...

쓰기를 하는 경우는 대부분 없다는 소리입니다.


객체지향의 3대 요소는

'캡슐화', '상속', '다형성'입니다.

이 셋중 하나만 깨어도 최악의 코드라고 할 수 있습니다.


우리가 클래스를 사용하는 이유는 다음에 써먹기 위해서입니다.

클래스를 통해 여러 용도로 가져다 쓸 수 있도록 만드는 것입니다.


또한, 각 객체는 자신의 성격답게 필드와 메서드로 구성되어야합니다.

그렇지 않은 클래스는 감히 '추상화'가 잘 못 된 코드라고 부를 수 있습니다.


객체지향이라는 것은 공통적인 기능, 관련성 있는 기능을 클래스로 만들어서

언제든지 필요할 때 가져다 쓸 수 있도록 만들겠다는 개념입니다.

즉, 객체를 재사용한다는 의미이니 코드를 만들 때 반드시 이 정의를 지켜야합니다.


아무튼 마지막으로 드리고 싶은 말은...

객체지향에서 static은 조심하라는 것입니다.

우리는 객체에게 '야! 이거 해줘!'라는 요청을 할 수 있도록 코드를 구현해야합니다.


많은 객체 지향 요소중에 가장 기본이 '클래스의 정의'입니다.

이 개념은 '객체들의 공통적으로 묶인 묶음을 클래스라고 부른다.' 부터 나온 것이지요...


그리고 공통된 개념이 묶인 클래스를 통해 캡슐화가 나왔지요...

객체 지향언어를 통해 프로그램을 구현할 때 반드시 신경씁시다...

클래스의 정의가 가장 기초이자 객체지향의 모든 기초가 됩니다.


이번 시간은 여기까지 하겠습니다.

이상 삽잡이였습니다!