ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 개념원리 - (1) 자바 & 객체지향_주요 개념과 특징
    개발/Java 2018. 2. 13. 13:56

    지금 와서 돌이켜보니 처음 자바와 함께 객체지향언어를 접했을 때는 혼란 속에서 살았던 것 같다.

    객체의 선언과 초기화라는 개념도 제대로 안 잡혀 있었고,

    객체와 클래스, 인스턴스도 정확히 구분하지 못하고 마구잡이로 써댔다. (사실 지금도 조금...)

    그래서 오늘은 초심으로 돌아갈 겸, 부장님과 이사님이 외근나가신 틈을 타서 아주 기본적인 개념을 정리한다...



    학원에서 시험을 볼 때 자바 언어의 특징, 객체지향언어의 특징을 각각 묻는 문제가 있었다.

    강사님은 채점을 끝낸 시험지를 나눠주며 자바의 특징과 객체지향의 특징을 헷갈려하는 사람들이 왜이렇게 많냐고 핀잔을 주셨다ㅜㅜ


    어느 정도 개념에 익숙해진 상태에서야 저 둘을 헷갈린다는게 말도 안된다 싶지만

    그때는 난생 처음 코딩을 배우면서 '자바 언어 = 객체지향언어' 만 머릿속에 저장한 어리버리들이었기에 그럴수도 있겠다는 생각이 든다. 

    우선 짧게 각각의 특징들만 정리하고 가자.


    자바 언어의 특징

     

    1) 운영체제에 대하여 독립적 (자바가상머신을 통해 운영체제, 하드웨어와 관계없이 실행)


         2) 객체지향(object-oriented) 언어


         3) 자동 메모리 관리 (가비지 컬렉터가 자동적으로 메모리 관리)


         4) 네트워크와 분산처리 지원


         5) 멀티쓰레드 지원


         6) 동적 로딩(Dynamic Loading) 지원



    객체지향언어의 특징


    1) 프로그램을 여러 개의 '객체'들의 모임으로 파악


    2) 추상화, 캡슐화, 다형성, 상속성을 이용


    2-1) 추상화 

    : 객체들의 공통적인 특징을 뽑아냄


    2-2) 캡슐화(은닉화)

          : 데이터를 보존, 보호할 수 있도록 관련된 변수와 함수를 묶은 후

      외부에서 사용하는 기능만 공개하고 나머지는 숨김


    2-3) 싱속성

    : 상위 클래스의 특징을 하위 클래스가 물려받음

     이미 만들어진 클래스를 파생시켜 새로운 클래스를 정의함


    2-4) 다형성

    : '다양한 형태로 나타날 수 있는 능력'

      하나의 클래스나 함수가 다양한 방식으로 동작함

      자바에서 오버라이딩과 오버로딩으로 다형성 지원    


    정리하다보니 꼭지마다 하나씩 포스팅해도 모자랄 것 같은 중요한 개념들이 쓱쓱 지나간다. 

    하나씩 정리할 생각은 없었는데, 아무래도 시간을 좀 들여서라도 하나씩 정리해둬야겠다.



    아무튼 자바는 객체지향언어이고, 객체지향언어는 그 이름부터가 대놓고 나는 객체를 사랑한다고 외치고 있다.

    그러므로 자바로 개발을 잘 하려면 대체 이놈의 객체가 뭔지 이해부터 하고 넘어가야 할 것 같다.


    한국에서는 '객체' 라는 단어가 일상적으로 쓰일 일이 거의 없기 때문인지

    객체라고 하면 뭔가 졸라 전문적인 느낌이 들면서 벌써 집중력이 떨어지는 것 같은 기분이 든다.

    하지만 이것이 한국에 들어와서 '객체'라고 번역되기 전에는 영어로 'Object' 라고 불렸다.

    내가 토익을 열심히 공부했던 사람이라 그런지 '객체'보다는 좀 더 친근한 느낌이 든다. 

    물론 영미권 애들조차도 'object' 보다는 'thing' 이라고 할 것 같지만 말이다.


    'thing' 이라고 하니까 아까보다도 훨씬 더 편하게 느껴진다. 

    이 기세를 몰아 객체의 개념을 다시 정의해보면 

    객체는 곧 우리 주변에 널려있는 것들, 실제로 존재하는 것들이라고 할 수 있다. 

    물론 객체지향언어에서는 만지고 볼 수 있는 유형의 사물은 물론이고, 무형적인 것들도 객체로 간주하지만

    나의 편안한 이해를 돕기 위해서 '객체  thing  내가 인식할 수 있는 형태를 가진 모든 것들' 이라고 마음대로 번역해봤다. 


    그렇다면 자바에서 매일 부르짖게 되는 클래스와 인스턴스는 또 뭘까?

    클래스와 인스턴스의 정의는 자바의 정석에서 기술해놓은 내용만으로도 깔끔하게 정리가 된다고 생각하여 그 내용을 그대로 정리만 했다.


    클래스란

    - 정의 : 객체를 정의해 놓은 것

    - 용도 : 객체를 생성하는 데 사용



    클래스와 객체의 관계 

         = 제품 설계도와 제품의 관계

    - 프로그래밍에서의 객체는 클래스에 정의된 내용대로 메모리에 생성된 것을 의미

    - 예 : TV(객체)를 만들기 위해 TV 설계도(클래스) 필요

    → TV를 보기 위해서는 TV가 필요하지, TV 설계도가 필요하지는 않은 것처럼

       클래스는 객체 생성에만 사용됨. 

       


    인스턴스 (Instance)

    - 어떠한 클래스로부터 만들어진 객체를 지칭

    - 클래스로부터 객체를 만드는 과정 = 클래스의 인스턴스화



    객체 인스턴스의 차이점

    - 객체 = 인스턴스

    - 객체는 모든 인스턴스를 대표하는 포괄적 의미

    - 인스턴스는 어떤 클래스로부터 만들어진 것인지를 강조하는, 보다 구체적인 의미



    객체의 구성요소

    - 객체 = 속성 + 기능

    - 속성 : 멤버변수, 상태 (예 : 크기, 길이, 색상 등 특징이나 상태)

    - 기능 : 메소드, 함수 (예 : 먹기, 켜기, 끄기 등 동작)


    요걸 다시 한번 보기 편하게 수식으로 한눈에 정리하면

    객체 = 속성 + 기능 = 인스턴스

    객체 ≠ 클래스

    클래스 = 객체 생성 틀

    이 되겠다.




    '개발 > Java' 카테고리의 다른 글

    설치된 자바 bit 확인하기  (0) 2018.02.20
    개념원리 - (3) 자바_선언과 초기화  (0) 2018.02.13
    개념원리 - (2) 자바_캡슐화와 다형성  (0) 2018.02.13

    댓글

Designed by Tistory.