Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

객체지향 개념 (쫌 아는체 하기)

62,633 views

Published on

객체지향의 개념을 명시적(definitive)으로 정의하고 설명하고,
구조적 방법과 비교한 발표자료 입니다.

Published in: Software
  • 우와........................ 정말 감탄에 감탄을 하고 갑니다. 이렇게 쉽게 이해 될 수 있는 개념이었다니..!! 글쓴이의 이해시키는 능력에 감탄하고 갑니다. 정말 감사합니다. 속이 다 시원하네요!!
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • 좋은자료 감사드립니다
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • 좋은 자료 재미있게 보았습니다. Back End개발할때 Business layer의 객체 설계의 원칙이 있으면 좋겠네요. Business Layer(Enity 제외)의 Actor는 실세계에 없는 개념을 만들어 내야 하는 문제가 있어 Class , Method 명명이 쉽지 않습니다. 좋은 생각있으시면 공유 부탁드립니다.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • 정리를 정말 잘하셨네요!! 잘 활용하겠습니다.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • 좋은 자료 감사합니다. 개념 이해에 매우 도움이 되었네요. ^^*
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

객체지향 개념 (쫌 아는체 하기)

  1. 1. 객체지향 개념 Object Orientation 쫌 아는체 하기(궁서체) 이 승 준 fb.com/plusjune
  2. 2. 오늘 이야기 주제: “객체지향” 개념 (어렴풋이 알았던) 목표: 딴데가서 쫌 아는체 하기
  3. 3. 사람은 포유류에 속하는 동물임 사람이 다른 동물과 구별되는, 고유한 특징은? . .
  4. 4. 재미있는 동물의 세계부터 시작해 보죠.
  5. 5. 마모셋 원숭이들, '박스 뚜껑 여는 방법'이 담긴 교육 비디오를 보여준 다음 박스를 줬더니, 비디오에서 보고 배운 대로 박스 뚜껑을 열었다
  6. 6. 도구 사용법을 서로 배우는 앵무새들
  7. 7. 버섯농사 짓는 잎꾼개미 5천만년 전 부터 농사 시작 인류는 겨우(?) 1만년전 부터 심지어 농약도 만든다능 @.@
  8. 8. 빵 조각으로 낚시하는 해오라기
  9. 9. 혼자서도 잘 노는 강아지
  10. 10. 호모 사피엔스 호모 파베르 호모 루덴스 생각 도구 놀이
  11. 11. 호모 사피엔스 호모 파베르 호모 루덴스 생각 도구 놀이 사람만의 전유물이 아니라능…
  12. 12. 진정한 고유의 특징? 다른 동물과 구별되는, 사람만이 가진
  13. 13. 그것은 바로, “상징 체계” 를 만들고 공유하는 하는 능력
  14. 14. 그것은 바로, “상징 체계” 를 만들고 공유하는 하는 능력 언어 문자 수학 음악
  15. 15. 그것은 바로, “상징 체계” 를 만들고 공유하는 하는 능력 사람은, 상징 체계를 만들고, 발전시켜 다음세대에 물려줍니다. 언어 문자 수학 음악
  16. 16. 그것은 바로, “상징 체계” 를 만들고 공유하는 하는 능력 사람은, 상징 체계를 만들고, 발전시켜 다음세대에 물려줍니다. 언어 문자 수학 음악 이것을 가능하게 하는 것, 바로 “추상”화하는 능력입니다.
  17. 17. abstraction抽象
  18. 18. 피카소(?) 추상화(?), 어려운 것?abstraction抽象
  19. 19. 피카소(?) 추상화(?), 어려운 것?abstraction抽象
  20. 20. abstraction 코끼리 상 모양 상 抽象 뽑아낼 추 대상으로부터, 모양을 뽑아내는 것
  21. 21. abstraction 코끼리 상 모양 상 즉, 대상에서 특징만을 뽑아낸 것 (것 = description) 抽象 뽑아낼 추 대상으로부터, 모양을 뽑아내는 것
  22. 22. “추상”들을 만들고, 공유하고, 발전시키는 능력 이 능력이야 말로 다른 동물과 구별되는, 사람만이 가진 고유한 능력이라고 할 수 있습니다.
  23. 23. 객체지향에 대해 이야기하려던거 아니었나요? 무신소리 하는 거야?
  24. 24. 본론으로 돌아 가서...
  25. 25. 객체지향 客體指向 Object Oriented
  26. 26. 우선 사전을 찾아봅니다. 객체(客體): 작용의 대상이 되는 쪽 지향(指向): 어떤 목표로 뜻이 쏠리어 향함 (네이* 국어사전)
  27. 27. “객체지향”이라.. 음… 객체는 … 구체적인 대상 지향(指向).. 향한다 객체를 향해 간다? 객체를 추구한다?
  28. 28. “객체지향”이라.. 음… 객체는 … 구체적인 대상 지향(指向).. 향한다 객체를 향해 간다? 객체를 추구한다? 여기서 말하는 oriented 는 방향성 (X)
  29. 29. Oriented 은 “위주” 혹은 “선호”라고 하는 것이 더 잘 어울립니다. 예를 들어, 안주 Oriented 란? 술은 안마시고 안주만 먹는
  30. 30. 나름 다시 정리해 봅니다. 객체(客體): 객관적으로 존재하는 실체 지향(指向): → 위주(爲主), 주되는 것으로 삼는 것
  31. 31. Object Oriented, "객체 위주"라고 이해하는 것이 훨씬 편합니다.
  32. 32. • Object Oriented Analysis, 객체 갖고 분석하다 • Object Oriented Design, 객체 갖고 설계하다 • Object Oriented Programming, 객체 갖고 프로그램 하다 Object Oriented, 한마디로 "객체 갖고 놀자"
  33. 33. 객체지향 키워드 5 ( 쫌 아는 척 가능하게 하는 ) 클래스(class), 오브젝트(object) 캡슐화 (Encapsulation) 상속성 (Inheritance) 다형성 (Polymorphism)
  34. 34. 클래스와 오브젝트 클래스(class) = 추상(abstract) 오브젝트(object) = 실체(instance)
  35. 35. 정의 1. 클래스(class)는 표현 대상의 특징에 대한 서술 말한다. = abstraction 추상 클래스는 표현 대상들의 공통적인 특징을 서술(description)한 것
  36. 36. 추상 abstraction (다시 한번) 추상은 사용자가 구체적인 내용을 생각하지 않고도 사용할 수 하는 기능 • 프로시져 추상화 (Procedural abstraction) : 함수 • 데이터 추상화 (Data abstraction) : 구조체, 배열, 포인터
  37. 37. 정의 2. 오브젝트(object)는 클래스의 인스턴스(instance) 이다 오브젝트는 instance of class 입니다. 즉, 클래스가 실체로 만들어진 것이죠.
  38. 38. 클래스와 오브젝트 멍멍이 초롱이 누렁이 점박이 우리집 외가댁 옆집 클래스(class) 공통 특징, 서술 오브젝트 (object) 구체, 실제 존재, 고유성
  39. 39. 클래스와 오브젝트 클래스(class) = 추상(abstract) 오브젝트(object) = 실체(instance)
  40. 40. 다양한 용어들, 그러나 같은 뜻  attribute = data = member variables = state = field  behavior = operation = member function = method • 클래스(class) = 개념(concept) = 타입(type) • 객체(object) = 실체(instance) = 변수(variable)
  41. 41. class Dog { int x; int y; public: void move(int, int); void bark(); void run(); }; int main() { Dog d; d.move(10, 20); return 0; } 클래스(class) 공통 특징, 서술 오브젝트 (object) 고유성, 구체, 실제 존재 코드의 문법(C++)은 신경쓰지 마세요 ! 전체적인 생김새만 보세요.
  42. 42. 오브젝트는 데이터와 데이터에 대한 조작의 묶은 것입니다. 오브젝트의 모양은 클래스(class)에 서술되어 있죠.
  43. 43. 코드의 문법(C++)은 신경쓰지 마세요 ! Object = data + operation on data + Identity class Dog { int x; int y; public: void move(int, int); void bark(); void run(); }; int main() { Dog d; d.move(10, 20); return 0; }
  44. 44. (리뷰) 클래스와 오브젝트 정의 1. class: 표현 대상에 대한 description 정의 2. object: instance of class
  45. 45. 다음 세가지 특성을 지원하는 언어를 객체지향 프로그래밍언어라고 합니다. ① 캡슐화 (encapsulation) ② 상속성 (inheritance) ③ 다형성 (polymorphism)
  46. 46. 정의 3. 캡슐화: '데이터'와 '데이터를 다루는 방법'를 묶는 것 data + operation on data class Dog { int x; int y; public: void move(int, int); void bark(); void run(); };묶음
  47. 47. 캡슐화(encapsulation) • 캡슐화는 “데이터 + 데이터에 대한 조작”을 묶는 것 • 관련 있는 것을 묶어서 생각하는 것은 매우 자연스러운 일 묶어서 이름을 부여하는 것, 바로 추상화(abstraction)입니다.
  48. 48. 정의 4. 상속성 하나의 클래스가지고 있는 특징들을 그대로 다른 클래스가 물려 받는 것 = 데이터 + 조작
  49. 49. class Dog { int x; int y; public: void move(int, int); void bark(); void run(); }; class Poodle: public Dog { void bark(); }; Dog Poodle Poodle에 x,y, move()가 없지만 Dog에서 물려 받습니다. Bark()는 새로 정의 됩니다. 상속을 표현하는 화살표는 상속의 방향이 아니라 IS-A 관계를 표현합니다. Poodle IS-A Dog
  50. 50. Dog Poodle 썰매개 Bulldog Samoyed 상속성은 계보(계층)의 의미도 있습니다. 썰매개 IS-A Dog
  51. 51. Dog Poodle 썰매개 Bulldog Samoyed 새로운 개념 등장 기존 클래스와 구분되는 특징만기술하여 추가 합니다.
  52. 52. Dog Poodle 썰매개 Bulldog Husky IS-A 썰매개 Samoyed Husky Husky 추가 Dog과 썰매개의 특징을 그대로 물려받습니다. (재사용, 유연성) 썰매개 IS-A Dog
  53. 53. 정의 5. 다형성 상속성의 계층를 따라서 각각의 클래스에 한가지 이름을 줄 수 있는것 • 다형성(polymorphism; 폴리 모피즘) "여러 형태"를 의미하는 그리스어 • 상속성의 계층를 따라서 각 클래스에 동일한 이름의 메소드을 사용할 수 있는 것 • 간단히 말해, 같은 명령을 각기 다른 오브젝트에 줄 수 있다는 뜻
  54. 54. Dog Poodle 썰매개 Bulldog Samoyed Husky bark() “왈왈” Dog d; d = new Poodle() d.bark() // “왈왈” d = new Bulldog() d.bark() // “멍멍” d = new Husky() d.bark() // “…” 코드의 문법(가상언어)은 신경쓰지 마세요 ! bark() “멍멍” bark() “컹컹” bark() “…”
  55. 55. 메시지 전달 (message passing) 객체지향관점에서 프로그램은 오브젝트에 message를 보내는 것으로 실행 Dog d; d = new Poodle() d.bark() // “왈왈” d = new Bulldog() d.bark() // “멍멍” • d.bark(): “객체 d에 bark라는 메시지를 보낸다”고 읽는다. • 실제로는 객체 d의 bark()를 호출 • 즉, 실제 구체적 동작과 관계없이 “객체”와 객체에 대한 상호작용 관점을 제공
  56. 56. (리뷰) 캡슐화, 상속성, 다형성 정의 3. 캡슐화: Data + operation on data 정의 4. 상속성: 상속 계층을 따라 특성(data, operation)을 공유 정의 5. 다형성: 다양한 형태에 동일한 명령을 사용
  57. 57. 객체지향은 프로그래밍 중의 하나입니다.  구조적 프로그래밍 (파스칼, C)  객체지향 프로그래밍 (자바, C++)  명령형 프로그래밍 (포트란, 코볼, 알골, 파스칼, C, 에이다)  선언형 프로그래밍 (프롤로그, SQL)  함수형 프로그래밍 (하스켈, 리스프)  객체기반 (자바스크립트, 에이다), 이벤트 드리븐, 절차적… 등등등등등 많네요. 패러다임 = 관점(인식 체계)
  58. 58. 가장 대표적인 프로그래밍 패러다임 두가지  구조적 프로그래밍 Structured Programming (파스칼, C)  객체지향 프로그래밍 Object Oriented Programming (자바, C++) OOP
  59. 59. 구조적 (Structured) 에츠허르 데이크스트라 Sequence, Alternative, Iteration Divide and quanquer Top-down design Pascal, C 객체지향 (Object-Oriented) 앨런 케이 Class, object Encapsulation, Inheritance, Polymorphism Simula 67, Smalltalk, C++, Java
  60. 60. 에츠허르 데이크스트라 Edsger Wybe Dijkstra, 네덜란드의 컴퓨터 과학자, 1972년 튜링상 수상 • (모든 고수준 언어의 조상)인 ALGOL 개발(’50년대 말) • (1968) [Goto Statement Considered Harmful] [소프트웨어 공학]과 Structured Programming 시대를 여심 • [데이크스트라 알고리즘], 처음으로 최단거리 알고리즘을 학문적으로 연구 • [세마포어]의 개념 사용, 운영체제의 영역까지 지대한 영향 • 1972 [Turing Award] 수상 "Can machine think?" (기계가 생각을 할 수 있을까요?) 데이크스트라 교수는 대답 대신 반문했다. "Can submarine swim?" (잠수함은 헤엄칠 수 있을까?) (1930~ 2002)
  61. 61. 앨런 케이 Alan Curtis Kay 미국의 컴퓨터 과학자 • 이반 서덜랜드와 함께 스케치패드 개발(1960년대 유타대학교) • 제록스 파크(PARC)에서 Smalltalk 개발 (70년대) • 객체지향 프로그래밍을 개척한 공로로 튜링상(2003) 미래를 예측하는 가장 좋은 방법은 미래를 발명하는 것이다. (The best way to predict the future is to invent it.) (1940~ )
  62. 62. Smalltalk, “SW시스템”  Smalltalk의 목표는 프로그래밍을 하지 않아도 되는 시스템을 만드는것이 아니라, 누구라도 쉽게 프로그래밍을 할 수 있는 환경을 만드는 것  Smalltalk는 현대 대부분 객체지향언어의 조상  Smalltalk를 개발한 알토 워크스테이션은 최초의 GUI 시스템 이후 다른 컴퓨터 시스템들이 GUI에 지대한 영향  Smalltalk는 SW시스템 (프로그래밍 언어, 개발환경, 라이브러리로 구성) Smalltalk-76 User Interface
  63. 63. Object Oriented Programming Languages cs.washington.edu cse341 진짜 원조 OOP 원조 OOP
  64. 64. 객체지향과 시뮬레이션의 관계? 최초의 객체지향 언어 “Simula67”는 시뮬레이션을 위해 만들어진 언어 • Class, object 등의 개념은 모두 실세계를 어떻게 묘사할 것인가에 출발 • 실제, 객체지향 분석/설계는 현실세계를 시뮬레이션 한다는 관점에서 진행
  65. 65. 객체지향의 장점 1. 자연스런 모델링 (Natual Modeling of Problem) 2. 생산성 향상 (Higher Productivity) 3. 점진적 개발 (Incremental Development) 4. 견고한 의미적 모델링 (Stable Semantic Modeling) 5. 명확한 인터페이스 기술 (Clear Interface Description) 6. 보안 (Secure System) 7. 유지보수의 용이성 (Better Maintainability) 뭔지 모르겠지만 좋다는 이야기 같음
  66. 66. 다양한 오해들 • 객체지향 언어 = 객체지향 프로그래밍  누가, 어떻게 쓰냐에 따라 달라진다. • 기존의 방법보다 좋다  어디에, 어떻게 쓰냐에 따라 다르다. • 객체지향은 프로그래밍 방법론이다  분석/설계/구현을 포함한 SW시스템 관점에서 봐야
  67. 67. 분석/설계 구조적 (Structured)  기능적 분할 (functional decomposition)  절차 중심 (procedure-oriented)  처리 위주 - 프로세스의 계층에 초점  데이터가 드러남, 단일성, 1회사용, 순차적인 알고리즘 위주 객체지향 (Object-Oriented)  객체와 객체간 역할과 관계 중심  객체중심 (Object Orientation)  데이터 감추기 - 행위만 보여진다.  모듈화가 자연스레 달성, 재사용성, 순서없는 메시지 기반
  68. 68. 객체지향 분석/설계 1) 문제영역에서 배우(actor)를 찾아내고 2) 각 배우들의 책임과 역할을 정의하고 3) 배우들간의 관계를 지정하고 4) 각 배우들에 대한 대본(script)를 쓴다.
  69. 69. 객체지향 분석/설계 방법론 요약 식별하고 일반화하고(object, class), 대상들 간의 관계(inheritance, embedded)를 설정하고, 상호작용 하도록(behavior) 한다.
  70. 70. Iteration Planning Requirements Capture Analysis & Design Implementation Test & Release 폭포수모델(Waterfall model) 나선 모델(Spiral model) 요구분석 분석 설계구현 대표적 개발 모델
  71. 71. (리뷰) 구조적 프로그래밍, 객체지향 프로그래밍 • 구조적 프로그래밍: 기능, 절차 중심 • 객체지향 프로그래밍: 객체, 관계 중심
  72. 72. (리뷰) 기본 개념 • 객체지향: 객체 위주, 즉 “객체 갖고 놀자” • 클래스(class): 표현 대상에 대한 description • 오브젝트(object): instance of class
  73. 73. (리뷰) 객체 지향의 핵심 개념 • 캡슐화: Data + Operation on data • 상속성: 상속 계층을 따라 특성(data, operation)을 공유 • 다형성: 다양한 형태에 동일한 명령을 사용 • 메시지 전달 (message passing): 객체간에 메시지를 주고 받아 실행 캡슐화(추상화 능력), 상속성(분류하는 능력), 다형성(같은 방법으로 다루기) 메시지 전달 (실존하는 객체들이 상호작용) 객체지향은 사람의 추상능력, 인식방법에 가까운 개발 방법론
  74. 74. 객체지향을 한마디로 정의하면, "사람이 세계를 보고 이해하는 방법을 흉내 낸 방법론"
  75. 75. 이승준 fb.com/plusjune

×