안녕하세요, 초보를 위한 프로그래밍 강좌의 정석 ! 흐꾸혀 강사입니다.
오늘은 OOP 에 대한 이야기를 하고자합니다.
지금 프갤의 주제가 상당히 살벌한데요.
Get,Set 은 왜 필요하지 ? 이것은 정말 말도 안되는 거 아닌가 ? 은닉화, 캡슐화를 깨다니 !
와 같은 의문의 주제에 대한 불만을 발산하는 사람들이 많습니다.
이 문제의 본질은 OOP 에 대한 이해도와 관련되어지게 되므로 OOP 에 대한 이야기를 하고자합니다.
물론 OOP 는 간단한 주제이므로 크게 다룰 필요도없겠지만 OOP 의 본질에 대한 이야기를 하고자합니다.
물론 제가 초보를 위한 강좌를 작성하는 "초보" 전용 전문 강사 이므로 코드 예제는 없습니다 ^_^
많은 사람들이 오해하는것이 OOP 를 디자인의 관점에서 이해를 하려 하지않고
OOP 의 속성에 관련되어 심오적인 이야기를 한다는것입니다.
그 결과 끔찍한 속성에 관한 이야기가 오가게되죠, 얼마나 끔찍한지 예상이 안가시는 분들을 위해 예를 들어보자면
자주 보이는 접근자에 대한 이야기가 대표적이라 할 수 있습니다.
이 접근자에 대한 이야기는 C++ 의 override 와 같은 효과를 가지고 있다해도 과언이 아닙니다.
노련한 프로그래머들은 override 가 뭐하는 것인지 아시죠 ?
그렇다면 public , private , protected 또한 뭐하는 녀석인지 아실겁니다.
근데 이게 OOP 에 대한 이야기인가요 ? 아닙니다.
여기서 부터 오해가 일어나게됩니다.
많은 사람들이 OOP 언어라며 프로그래밍 언어를 분류하기도 합니다.
하지만 이건 잘못된 이야기입니다.
OOP 를 하기 편한 언어라고 해야 정확한 이야기입니다.
plain C 에서 OOP 프로그래밍을 못할까요 ? 할 수 있습니다.
근데 왜 다들 안할까요 ? , 필요하다면 당연 하겠죠 ?
근데 그냥 C++ 에서 하기 쉽고 편하니 C++ 에서 OOP 하는겁니다.
여기서 주제에 대한 이야기를 좀더 해보도록 하죠
OOP 는 정말 단순한 개념입니다.
Object
Oriented
Programming
Object(entity) Oriented(related) Programming 입니다.
실체를 관계에 대해 생각하여 프로그래밍 하는 것 입니다.
여기서 뒤따르는 속성,기능으로
Encapsulation , Dynamic dispatch , message passing , Polymorphism , ....
뭐 기타 등등 있겠지만
대표적인 것으로는 캡슐화, 추상화 , 상속 뭐 3가지 정도로 볼 수 있겠네요.
지금 주제에 대한 의문은 캡슐화 라고 볼 수 있습니다.
이 캡슐화에 대한 주제에 심오한 대화를 하고 있지만
이것은 정보 은닉화와도 관련이 있습니다.
그렇다면 캡슐화와 정보 은닉화는 대체 뭐길레 OOP 의 하위에 있는가? 에 대한 이유를 알려드려야하겠지요.
여기서 조심하셔야하는게 "은닉화" 는 정보를 숨기는것이 아닙니다 !
많은 프로그래머들이 이것을 오해하곤하는데 "은닉화" 는 정보를 숨기는것이아닌
근본적으로 유연성에 관한 것입니다.(또는 확장성)
예를 들자면 모듈별로 나눠진 기계를 생각해 볼 수 있습니다.(A B C D)
여기서 A-B-C-D-A-... 로 연결된 원형 구동장치라고 가정해보죠.
우리는 팀으로 일하고 A,B,C,D 의 모듈에 관한 전문가 들이지만 전문 분야 외에는 어떻게 작동하는지 전혀 알지못합니다.
하지만 "정보 은닉화" 가 잘 되어 있어서 모듈을 우리가 임의로 바꿔도 잘 작동된다.
같이 사용합니다.
즉, "동일한 인터페이스를 사용한다면 문제가 전혀 없다" 라고 봐도 됩니다.
이것이 "정보 은닉화" 입니다.
오해하지 마십시오 제발.
GOF 가 지금 상황을 본다면 싸다구를 갈귀면서 승천하게 될겁니다.
그렇다면 캡슐화는 무엇인가 ?
캡슐화는 프로그래머들 사이에 사용되는 말 입니다.
public, protected , private 와 같은 접근 제한자를 사용하는 것을 말합니다.
다시 말하지만 "프로그래머들 사이에서" 입니다.
즉, 프로그램이 만들어지는 것 에서의 Object 의 동작에서 너는 이것을 수정할 필요가 없다, 라면 private 에 집어넣고 그런겁니다.
예를들자면 CPU 의 Counter 를 생각해볼수 있습니다.
CPU 가 잘 돌아가는데 Counter 를 건들일 필요가 있을까요 ?
당연 건들지 말아야합니다.
건들인다면 에러도 무지하게 나겠죠 ?
그러면 private 로 설정하는겁니다.
아시겠습니까 ?
정보 은닉화니 캡슐화니 떠들꺼면 알고 떠드십시오,
초보들이 지금 프갤보면서 한탄합니다.
아....너무 길다....그냥 코드로 설명 해줘라
님 혹시 외톨이라는 랩 잘하시나요
장황한거치곤 이해가 잘되네요
원래 어려운 이야기가 아닌데 한국 블로그나 책이 잡다하게 설명해서 그런거임
잼따 이런거 더써줘 - dc App
공격적인 글은 비추가 안박히노 ㄷㄷ
달빛의 호흡어떻게씀?
즐 - dc App
ㄱㅅㄱㅅ
건들이는게 아니고 건드리는거임
ㄹㅇ ㅋㅋ
재밌는 글이네
3줄 요약 좀
이말이 맞다 내가 대학교다닐때도 교수님이 C 로 오버로딩의 일부를 구현하는거 보여줌 ㄷㄷ
내가 볼때 객체 지향 프로그래밍이란...나의 프로그래밍 설계 의도를 다른 사람에게 쉽게 전달하기 위한 프로그래밍 방법이라 생각함... 객체지향 언어들은 의도 전달을 쉽게 할 수 있는 언어들. 글쓴이가 생각하는 것과 비슷할까 모르겠네