본문으로 바로가기

OOP에 대해 알아보자 - 제1편 OOP란?

category Language/JAVA 2014.04.16 00:01


OOP에 대해 알아보자 - 제1편 OOP란?




1.OOP란?

OOP란 '라면'이라고 보면 되. OOP의 정의는 검색 해보면 되니까 따로 적지 않겠어.



짤은 '신라면'과 '사리곰탕면'이야. 위에 두가지 다 먹어보긴 먹어봤을거야.



OOP란 런타임 시에 해당 메소드의 작동 방법을 결정하는 프로그래밍 방식이라고 보면 되.


런타임이 뭐냐면 말 그대로 '실행할 때'인데 소스코드 상태로 있던 코드가 메모리나 Tomcat 같은 Container로 올라와서 실제 프로그램이 작동하는 순간을 말해.


'라면' 하고 비교를 해보면 라면을 뜯기 전 상태가 소스코드 상태이고, 라면을 뜯어서 라면을 끓는 물에 넣고 스프를 넣을 때를 말해.


프로그램이 동작이 끝나서 사용자에게 보여지는 시점은 라면이 다 끓어서 내가 직접 면과 국물을 맛볼때라고 볼 수있어.



기존 방식은 현재 우리가 김밥천국에서 라면을 사먹는것과 비슷하다고 할 수 있어.


이를테면 '신라면'을 주문 하면 결과물도 '신라면'이 될 뿐이야.


그런데 OOP방식으로 Class를 만들어서 프로그램을 작성한다는 것은 내가 라면을 사긴 사는데 면을 넣고 스프를 넣을 때 스프를 신라면 스프를 넣을지 사리곰탕 스프를 넣을지를 결정 할 수 있다는게 Function과 OOP의 차이점이라고 할 수 있어.


Class는 단순히 만드는게 중요한게 아니고 '생성자'라는걸 통해서 '신라면' 스프를 넣을지, '사리곰탕' 스프를 넣을지를 물을 끓이고 라면을 넣고 나서 결정 할 수 있다는거지.


클래스, OOP하면 다형성(Polymorphism)이니, 캡슐화(Encapsulation)니, 확장성이니 이런 어려운 말로 설명 하는데 그냥 라면 물 끓이고나서 내가 맛을 결정 할 수 있다는 뜻을 이렇게 어렵게 써놓은 것 같아.



2.Class란?

OOP 하면 항상 따라오는 개념이 Class야. 클래스 라고 읽지.


Class는 그냥 '라면 봉지'일 뿐이야. 그 안에 라면과 스프가 들어가는거지. 스프는 맛을 내는 역할을 하고, 라면은 배를 채우는 역할을 하는 그런 기능들이 있는 라면 봉지 안에 들어가는 내용물이 되는거지.


중요한 내용이니까 한번 더 써 볼게.


Class의 가장 중요한 역할은 런타임(끓는 물에 라면을 넣는 순간)시에 외부에서 '신라면 맛을 내는 역할'을 하는 '스프'를 넣어줄 수 있는 기능인 '주입'을 할 수 있다는거야.


다형성, 캡슐화, 확장성, 상속, 추상화 이런 단어로 접근하면 오히려 뉴비나 처음 접하는 입장에서는 헷갈릴 수 있으니 '스프를 넣어준다'는 기능으로 생각하면서 조금씩 생각을 넓히다 보면 교과서에 다다를 수 있을거야.


외부에서 스프를 넣어주는 기능을 할 수 있는 '생성자'를 사용하지 않는다면 클래스를 쓰지 않아도 크게 문제가 없다고 보면 되지만 이 방법으로 개발하다 보면 '어떻게 이걸 안쓰고 개발을 했지?'라는 허무함이 밀려올 수도 있어. 마치 맨날 걸어다니다가 차를 타고 다녀 버릇 하면 차 없이는 애로사항을 많이 겪게되는 상황하고 비슷해.


앞으로는 ABAP을 하던 OOP계의 OOP를 위한 OOP의 친정인 Java를 할 때도 당근 마찬가지고, 요즘 급급 많이 사용하고 있는 Javascript나 후루룩 만들어 낼 수 있는 Python을 하던 이걸로 하게 되지 싶어.



3.Interface(인터페이스)

OOP중에 가장 이해하기 힘든게 이놈에 인터페이스야.


'인터페이스'라는 말은 참 많이 쓰는데 게임에서도 많이 쓰고 OOP에서도 많이 써.


굳이 비교를 해보자면 인터페이스는 '라면 스프 봉지' 정도 되는 것 같아. '라면 스프'하고는 구분을 해주길 바래.


'라면 스프 봉지'가 '라면 스프'가 되려면 '봉지'안에 '스프 내용물'을 넣어야 하겠지? 인터페이스는 그 껍데기 역할을 하는거야.


마트에서 주는 '종이 봉투'를 '라면 스프 봉지'로 사용할 수는 없잖아? 사이즈도 크고 비닐 포장이 안되있고 방습도 잘 안될 것이고 '껍데기'라는 역할은 하지만 '라면 스프 봉지'에는 어울리지 않아.


'인터페이스'라는건 이렇게 특정한 '규격'을 지정해 주어서 '라면 스프 가루'를 무엇을 넣고 만드는지에 따라 '라면 스프'가 '신라면 스프'인지 '사리곰탕 스프인지'가 되도록 해주는 껍데기 역할을 하는게 인터페이스야.


이러한 껍데기 기능은 혼자 혹은 작은 식당에서는 필요가 없는 개념일 수 있어. 굳이 라면 스프 봉지를 따로 만들고 그걸 규격을 정하고 내용물을 채워서 포장하고 포장해놓은걸 다시 뜯어서 넣고 하는 과정이 소규모 작업에는 쓸데없는 일이란 말이지.


그런데 '라면 공장'을 차릴려면 라면 따로, 스프 따로, 건더기 스프 따로, 포장 따로, 설계 따로 이렇게 모듈화를 시켜야 규모의 경제가 실현 될 수 있고 '제품'이라는걸 대량으로 그리고 '다양'하게 찍어 낼 수 있어. 라면 생산라인에서 '신라면'만 만들 수 있다고 한다면 말이 안되겠지?




OOP 개념에 대한 설명은 이만 마치고 다음 시간에는 아밥 코드를 좀 봐보도록 하자.


그럼 안녕~~



끗.





















댓글을 달아 주세요

  1. ㅏㅏㅗ 2017.03.30 09:52

    좋은 글과 좋은 비교네요~

  2. 감사감사 2017.08.14 12:49

    눈높이 교육 감사합니다