북극곰의 개발일기

객체지향 개념 (쫌 아는체 하기)를 읽고 정리한 것





posted by purplebeen on Tue Aug 21 2018 09:55:35 GMT+0900 (KST) in JAVA


숭실대학교 / 한국기술교육대학교 / 산업기술대학교에서 주관하는 iOS 특강 과정에서
첫날 과제로 나왔던 객체지향 개념 자료를 읽고 정리한 것입니다.
고등학교 1학년때부터 자바 프로그래밍을 하면서 이미 어느정도 알고 있던 내용이지만 복습하는 차원에서 한번 더 정리해보았습니다.

객체지향 개념

  • 추상 : 대상에서 특징만을 뽑아낸 것

  • 추상화 : ‘추상’ 들을 만들고, 공유하고, 발전시키는 능력

  • 클래스(class) : 추상(abstract, 객체를 찍어내기 위한 틀)

  • 오브젝트(object) : 실체 (instance, class를 이용하여 실제로 만들어낸 객체)

  • 클래스 : 표현 대상들의 공통적인 특징을 서술(description)한 것

  • 추상 : 사용자가 구체적인 내용을 생각하지 않고도 사용할 수 있는 기술

    • 프로시져 추상화 (Procedural abstraction) : 함수
    • 데이터 추상화 (Data abstraction) : 구조체, 배열, 포인터
  • 오브젝트(Object,객체) : 클래스의 인스턴스로, 클래스가 실체로 만들어진 것

클래스 = 개념 - 타입
객체 = 실체 = 변수

  • 캡슐화 : ‘데이터’와 ‘데이터를 다루는 방법’을 묶는 것

    • 데이터 + 데이터에 대한 조작을 묶는 것
    • 관련 있는 것을 묶어서 생각하는 것은 매우 자연스러운 일로, 묶어서 이름을 부여하는 것을 추상화 라고 한다
  • 상속성 : 하나의 클래스가 갖고 있는 특징들 (데이터 + 조작)을 그대로 다른 클래스가 물려 받는 것

  • 다형성 : 상속성의 계층을 따라서 각각의 클래스에 한가지 이름을 줄 수 있는 것

    • 상속성의 계층에 따라서 각 클래스에 동일한 이름의 메소드를 사용할 수 있는 것
    • 같은 명령을 각기 다른 오브젝트에 줄 수 있다는 뜻

객체지향의 장점

  1. 자연스러운 모델링 (Natural Modeling of Problem)
  2. 생산성 향상(Higher Productivity)
  3. 점진적 개발( Incremental Development)
  4. 견고한 의미적 모델링 (Stable Semantic Modeling)
  5. 명확한 인터페이스 기술 (Clear Interface Description)
  6. 보안 (Secure System)
  7. 유지보수의 용이성 (Better Maintainability)

객체지향 분석 / 설계 방법론

식별하고 일반화하고 (object, class)
대상들 간의 관계 (inheritance, embedded)를 선정하고
상호작용 하도록 (behavior) 한다.

객체지향을 한마디로 정의한다면,

“사람이 세계를 보고 이해하는 방법을 흉내 낸 방법론”