ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 개념원리 - (2) 자바_캡슐화와 다형성
    개발/Java 2018. 2. 13. 15:04

    앞서 자바와 객체지향 언어의 특징을 잠깐 정리했는데,

    객체지향언어의 특징 중 캡슐화와 다형성이 조금 더 이해하기 어려운 개념이라고 생각해서 추가로 정리한다.




    1. 캡슐화


    얼마전 판화전을 보러 과천의 현대미술관에 갔다. 

    어느 작가가 작업에 썼던 동판 역시 작품과 함께 전시되어 있었는데, 이건 작품도 아닌 것이 유리 안에 들어가 있었다.

    도슨트의 설명으로는 사람들이 동판을 자세히 보기 위해 가까이 가서 숨만 쉬어도 동판이 손상되어서 이렇게 유리를 씌웠다고 했다. 

    이것도 역시 캡슐화의 일종이다. 동판 객체에 관람객 개체들이 접근하여 함부로 속성을 조작할 수 없도록 유리를 씌운 것이다.


    회원 등급별로 접근 가능한 게시판을 다르게 설정하고, 등급이 낮은 회원은 글 읽기만 가능하게 하는 것도 비슷한 예로 볼 수 있다.

    뉴비는 닥치고 눈팅이나 하면서 커뮤니티의 분위기를 익히도록 함으로써 그 모임의 물을 흐리지 못하게 하는 운영진의 빅픽쳐이자 캡슐화다. 


    이처럼 캡슐화가 잘 구현되어 있으면 다른 객체가 한 객체의 속성에 직접적으로 접근할 수 없다.

    다른 객체에 의해 한 객체의 데이터가 잘못 조작되는 것을 막아 속성을 보호해주는 것이다.


    커뮤니티에서 회원 등급을 나눠주듯이, 자바에서는 클래스에 접근 제어자를 써서 캡슐화를 구현한다.

    또 정리할 것이 생겼다.


    접근 제어자 (Access Modifier)


    - 클래스, 멤버변수, 메소드, 생성자에 사용되어 외부의 접근을 제어함

    - public      : 접근제한이 전혀 없음

    - protected : 같은 패키지 내이거나 자손클래스에서 접근 가능

    - (default)   : 같은 패키지 내에서만 접근 가능

    - private     : 같은 클래스 내에서만 접근 가능


    대상에 따라 사용할 수 있는 접근 제어자는 자바의 정석에 나온 표를 그대로 발췌한다.


     대상

     사용 가능한 접근 제어자

     클래스

     public, (default)

     메소드

     public, protected, (default), private 

     멤버변수

     지역변수

     없음 







    2. 다형성


    다형성을 '하나의 타입이 여러 모습을 가지는 것'으로 정리했었다.

    자바에서 다형성을 구현하는 방법에 대해 검색해보면 보통 상속을 이용한다고 나온다.

    처음에는 이 개념을 정확히 이해하지 못하고 주입식 교육의 결정체답게 그냥 외웠다. 

    그냥 외우다보니 맨날 오버라이딩과 오버로딩을 헷갈리는 연쇄 참사가 일어나고....흑흑

    오버로딩과 오버라이딩의 차이점을 하나로 줄이자면 오버라이딩이 상속을 이용해서 구현한다는 점이다.




    2-1. 오버로딩(overloading)

     - 메소드의 이름은 같으나, 매개변수의 개수 또는 타입이 다름

     - 반환 타입은 오버로딩 구현에 아무 영향을 주지 못함

     - 자바의 정석에서 말하는 가장 대표적인 오버로딩의 예 : System.out.println 



    위의 소스를 실행해보면 아래와 같이 출력된다.

    모든 메소드의 이름은 overloadingTest() 로 동일하나,

    매개변수의 형태와 숫자에 따라 각각의 메소드를 호출하게 된다.




    2-2. 오버라이딩(overriding)

     - 조상 클래스로부터 상속받은 메소드의 내용을 변경

     - 메소드의 이름은 같으나 하위 클래스에서 메소드 재정의

     - 메소드의 이름, 매개변수, 반환타입이 일치 



    위의 소스를 실행해보면 결과는 아래와 같다.  




    2-3. 기타

     

    느닷없이 나온 '기타' 항목은 더 이상 정리하고 싶지가 않아서....대충 마무리하고 싶은 어이없는 마음이 낳은 산물이다.

    다형성에 대해서 다른 분들이 작성한 포스팅을 보다보니 형변환, 추상화에 대해서도 언급해두신 분이 있어서

    여기까지 정리하려다가 이제 제발 다른 것을 공부를 해보고 싶다고 분량을 문제 삼으며 급하게 끝내는 것이다.


    다형성의 기본 개념이 '여러 모습을 가지는 것' 이라는 점을 고려해보면 

    충분히 추상화와 형변환 역시 다형성을 구현하는 방법으로 언급될 자격이 있다는 생각이 든다.

    즉 객체지향의 중요한 기본 개념이자 특징인 상속, 추상화를 이해하면 

    자바에서 다형성을 구현하는 방법 중 하나의 길을 자연스럽게 터득하게 되는 것이다. 

    아마 '다형성'의 개념이 어렵게 느껴지는 것도 여기에서 기인하는게 아닐까 싶다...



    댓글

Designed by Tistory.