crossorigin="anonymous"> $(function(){ $('.article_view').find('table').each(function (idx, el) { $(el).wrap('
') }); $('img[alt="N"]').each(function(){ $(this).replaceWith('

N

') }); });

새소식

왕초보만/기초 왕초보만

뻘짓 하며 얻은 기본기 7 객체

  • -

객체(Object)라는 단어는 참으로 심오하다. 앞으로 여러분들이 배우게 될 컴퓨터 언어에서 매우

 

중요하게 쓰이는 단어이고 그 개념에 대해서 이직 할 때마다 물어보는 단골문제이다. 

 

따라서 이 객체라는 개념을 잘 알고 넘어가는게 너무나도 중요하다.

 

뿌리깊은 나무는 바람에도 잘 견디는 법이다.

 

객체(Object)란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을

 

가지고 있고 다른것과 식별 가능한 것 이라고 한다.

 

이해가 되는가?

 

여러 설명을 들어보았지만 제일 쉽게 설명되는 것은 2가지였다.

 

한 가지는 붕어빵이다.

 

위는 붕어빵 굽는 기계이다. 여러분은 붕어빵 틀에다가 밀가루 반죽을 넣고 구우면

 

틀의 모양대로 붕어빵들이 생길것이다. 그런데 붕어빵은 여러 종류가 있지 않은가??

 

슈크림 붕어빵부터 근본오브근본인 팥, 김치붕어빵... 등등 속을 무엇으로 채우냐에 따라

 

붕어빵의 종류가 달라진다. 

 

객체의 개념이 바로 이런 것이다. 우리는 틀을 이용하여 만들어진 것을 

 

모두 붕어빵 이라고 하지만 속의 재료에 따라 다른 붕어빵으로 분류가 가능하고

 

같은 종류의 붕어빵이라도 숫자를 셀수 있다. 즉 같은 붕어빵 종류지만

 

개별로는 다른 붕어빵이라는 것이다.

 

객체란 이처럼 같은 속성(같은 틀로 만들어져 붕어빵 모양을 가짐)을 가지고 다른 것과

 

식별이 가능한 것(안의 속이 다르고 하나하나 개별 붕어빵으로 존재)이다.

 

두 번째는 게임 케릭터이다.

 

예를 들어 바람의 나라를 떠올려 보겠다. 우리는 케릭터를 접속하게 되면

 

모두 내복상태인 기본캐릭터로 시작하게 된다.

 

그 캐릭터는 움직이는 기능 move()와 맨손으로 때리기 attack() 이라는 공통 특성이 존재한다.

 

각각의 캐릭터들은 모두 같은 특성을 가지고 있지만 각각의 캐릭터들은 모두 다른 캐릭터이다.

 

어떤 캐릭터가 만약 전직을 하게되어 파이어볼을 쓸수 있게 되었다고 가정한다면

 

그 캐릭터는 기본 기능인 move()와 attack() 그리고 fireball()이라는 기능을 가질 것이다.

 

fireball()이 추가되었다 하더라도 그 캐릭터는 바람의 나라 캐릭터임에 틀림없다.

 

왜냐하면 같은 틀에서 찍어져 나왔기 때문이다.

 

그러나 각각의 캐릭터들은 서로 다른 캐릭터이며 고유의 특성 또한 가질 수 있다.

 

붕어빵을 찍어내는 틀을 Class라고 하며 그 틀에서 찍혀나온 하나하나의 붕어빵들을

 

인스턴스(Instance)라고 한다.

 

즉 객체라는 것은 공통된 속성을 가지면서 각각의 차이점을 가진 것을

 

뜻하는 개념이다.

 

그럼 객체지향프로그래밍이란??

 

말 그대로 객체단위로 소스코드를 프로그래밍하는 것을 의미하고

 

더 간단히 말하면 Class로 소스의 틀을 짜고 인스턴스를 하나하나 생성해

 

코딩을 짜는 방식을 의미한다.

 

C언어는 대표적인 절차지향언어이다. 프로그램이 무슨 일을 하는가에 초점이 맞추어져 있고

 

순차적으로 진행하는 Top Down 방식으로 이루어져있다. 또한 기능을 하나의 함수로 구현한다.

 

그러나 Java ,c#,c++같은 언어는 객체지향 언어인다. 객체지향프로그래밍을 한다.

(Object Oriented Programming OOP)

 

무언가를 대상으로 하여 모델링하는가 를 초점으로 보는 프로그래밍 기법이다.

 

아까 내내 말한 붕어빵이 바로 그 무언가를 대상으로 하여 모델링 하는가를 의미한다.

(어떤 속을 넣고 어떤 공통점을 만들어 붕어빵... 아니면 국화빵을 만들 것인가)

 

세부모델부터 디자인되어 조립되는 Bottom Up 접근 방식이고 

 

함수보다는 데이터를 표현하는 객체를 중심으로 본다.

출처 https:www.quora.com

 

절차지향언어에서는 프로그램의 기능 처리를 우선으로 진행하였지만 점점 기능들이 많아지고 복잡해지면서

 

프로그램이 확장될수록 기능보다 데이터 단위로 묶어야 될 필요성이 나타난 것이다. 

 

예를들어 절차적 지향언어에서는 add() 더하기 minus() 뺴기의 기능단위로 프로그래밍을 해서 계산기를 만들었다면

 

객체지향언어에서는 계산기라는 객체를 만들어 add()라는 기능과 minus()라는 기능을 묶어서 넣어서 사용하는 것이다.

 

이는 지금 이해가 안되겟지만 만약 계산기 프로그램을 짠다면 절차적 지향언어는 add()와 minus()의 기능을 넣어서 한 

 

계산 프로그램을 만들겠지만  만약 multiple()이라는 곱하기의 기능을 추가하려면 다 만들어진 전체 프로그램에 곱하기

 

를 추가하여야 한다.

 

그리거 객체지향언어는 add()와 minus()기능을 가지고 있는 객체를 하나 만들고 생성하여 사용한다

 

그게 계산기 1개이다. 그러나 생성은 얼마든지 가능하기에 10개의 계산기도 생성이 가능하다.

 

곱하기라는 기능은 그 객체를 만들어 생성한다면 곱하기 기능을 가진 계산기를 10개도 더 따로 만들 

 

수 있는 것이다. 

 

이론상으로는 이해가 잘 안될 수도 있다.

 

만약 이해가 안된다면 직접 프로그래밍을 하면서 몸으로 익혀야 한다.

 

이렇게 개념 잡는 것이 어렵고 이해가 안된다면 손으로 코딩해서 익혀야 한다.

 

그러면 이해가 된다. 다른 공부와 컴퓨터 공부의 차이점이다.

 

단 필자는 컴퓨터공부는 재능이라고 하지 않았던가?  이것만 보고도

 

이해가 된다면 당신은 재능이 있는 거일지도

Contents