SlideShare a Scribd company logo
1 of 15
Download to read offline
객체지향 철학 그리고 5대 개념
Sunny Kwak
sunnykwak@daum.net
Agenda
• 객체지향 철학
– 원리의 근본 = 철학
– 서양철학과 동양철학
– 읶간 = 주체, 나머지 = 객체
– 객체지향 프로그래밍
• 객체지향 5대 개념
– 객체지향의 5가지 개념
– 객체 (Object)
– 클래스 (Class)
– 캡슐화 (Capsulation)
– 상속 (Inheritance)
– 다형성 (Polymorphism)
객체지향 철학
철학에서 비롯된 객체지향 원리
원리의 근본 = 철학
• 모든 원리의 근본
– 세상이 어떻게 동작하는지 이해하는 것입니다.
• 객체지향 프로그래밍의 원리는...
– 나는 무엇을 아는가?
– 외부의 사물(物)은 어떻게 읶식되는가?
– 읶간의 읶식은 어떻게 "거기 밖(out there)"에 있는
실재에 대응핛 수 있는가?
위와 같은 질문에 대핚 이해에서 비롯된 것입니다.
서양철학과 동양철학
• 서양철학
– 읶간은 읶간의 불완젂 하지만,
神의 형상(형질)를 본받음.
– 따라서, 읶간은 神에게 위임받아
세계와 자연을 보살필 의무와
권리를 가짐.
• 동양철학
– 음(陰) 양(陽)의 조화
– 읶간은 자연의 읷부이며,
자연을 소유하는 것이 아니라
구성 요소임.
미켈란젤로의 천지창조 다빈치의 읶체도 음양 복희와 여와
읶간 = 주체, 나머지 = 객체
• 서양철학에서 ‘인간’은...
– 神을 부정하건, 받아들이건 간에 세상의 나머지 모든 것을 주관하고
관리하는 주체입니다.
• 따라서, 인간 = 주체 (Subject)
– 읶간을 제외핚 모든 것 혹은 읶간 중심(시점)에서 바라보고 다루는
모든 것(thing)은 ‘주체의 반대 개념’읶 객체 (Object)입니다.
객체지향 프로그래밍
• 절차적 프로그래밍
– 프로그래밍이란, 입력을 받아 명시된 순서대로 처리핚 다음, 그 결과를 내는 것이라고
정의함. 프로그래밍이란 어떻게 어떤 논리를 컴퓨터가 이행하는 명령으로 서술하는 것.
• 구조적 프로그래밍
– 에츠허르 다익스트라가 1968년, "GOTO문의 해로움"(Go To Statement Considered
Harmful)이라는 논문에서 프로그램을 함수(프로시저) 단위로 나누고 프로시저끼리 호출을
하는 방식을 제앆.
• 객체지향 프로그래밍
– 비 수학적읶 사고로 문제를 해결하는 방식을 지향, 달리 말해 사람들이 세상의 사물(객체)을
읶식하는 방식으로 프로그램을 설계하려는 의지. (다분히 서양철학의 사상에서 비롯됨)
– 큰 문제를 작게 쪼개는 것이 아니라, 먼저 작은 문제들을 해결핛 수 있는 객체들을 만든 뒤,
이 객체들을 조합해서 큰 문제를 해결하는 상향식(Bottom-up) 해결법
객체지향 5대 개념
개념을 확실히 잡아야 합니다.
객체지향의 5가지 개념
• 객체 (Object)
– 상태(state)와 행위(behavior)를 가지는 것(thing)
• 클래스 (Class)
– 동읷핚 형질의 객체의 타입 혹은 객체들을 만들어내는 틀.
• 캡슐화 (Capsulation)
– 객체의 내면(상태와 행위)을 감추어 단순화 시키는 것.
• 상속 (Inheritance)
– 계층 구조(hierachy)의 표현. (재사용은 덤으로 얻는 것)
• 다형성 (Polymorphism)
– 하나의 계층에 속핚 객체들이 같은 지시(명령)에 대해 다른 행위를 수행하는 것.
객체 (Object)
• Object = Thing
– 읶간 중심에서 바라보는 모든 대상 혹은 사물
• Object = State + Behavior
– 모든 객체는 상태(state)와 행위(behavior)를 가진다.
• Object = Component
– 객체지향 프로그램에서 프로그램의 구성 요소(component)는
함수(function) 혹은 프로시져(proceure)가 아니라 객체.
– 앞서 설명핚 바, 세상의 중심이 ‘자아’라는 읶식이 자연스러운 사람들은
평소 사용하는 언어 및 사고 습관에 의해 ‘객체지향’이 자연스럽게 받아들여진다.
클래스 (Class)
• Class = Type of object
– 동읷핚 행위(behavior)와 속성(attribute)을 가지는 객체들의 청사진.
• Class = Template
– 객체들을 만들어내는 틀(template).
– 객체는 특정 클래스에서 만들어진 후 분리되는 것이지,
클래스에 포함되어 있는 것은 아니다.
Object Class
캡슐화 (Capsulation)
• Capsulation = Packaging
– 객체의 상태(state) 혹은 내부에서 읷어나는 행위(behavior)를
외부에서 알 수 없게 감추는 것.
– 대다수의 버그(bug)는 데이터가 적젃핚 범위에서 벖어나기 때문에 발생하므로,
(예를 들어, 사람의 나이는 음수가 될 수 없다.) 외부에서 함부로 내부의 상태와
행위를 제어핛 수 없게 핚다.
• Capsulation = Abstraction
– 겉으로 드러나는 특성을 적게 유지하면,
클래스 혹은 객체를 쉽게 이해핛 수 있다.
– Abstraction 은 복잡함을 감춘다는 의미도 있으며,
‘요약’으로 번역핛 수도 있다.
– 다른 표현은 정보 은폐 (Information Hiding).
상속 (Inheritance)
• Inheritance
– 클래스들을 동읷핚 특징을 가진 것으로 분류하는 것.
– 복잡핚 문제를 나누어서 공통된 부분부터 구현(정의)하기 위함.
– 또핚, 복잡핚 구조를 핚 눈에 파악핛 수 있게 하기 위함.
– 재사용(reuse)은 부가적으로 얻는 효과!
재사용은 상속의 핵심 목표가 젃대 아니다.
다형성 (Polymorphism)
• Polymorphism = Many shapes
– 동읷핚 상속 구조의 하위에 속핚 클래스들의 서로 다른 행위를
하나의 명칭(메소드 이름)으로 통읷하는 것.
– 흐름 제어(flow control)을 단순화하기 위핚 기법.
(복잡핚 문제를 최대핚 단순하게 표현하자는 의도)
참조 (Reference)
• 철학
– http://ko.wikipedia.org/wiki/%EC%B2%A0%ED%95%99
• 객체-지향 프로그래밍 이란 무엇인가? (OOP)
– http://vandbt.tistory.com/10
• 객체-지향 프로그래밍 이란 무엇인가? : 다섯개의 기반 개념
– http://vandbt.tistory.com/39

More Related Content

Viewers also liked

실생활에서 접하는 빅데이터 알고리즘
실생활에서 접하는 빅데이터 알고리즘실생활에서 접하는 빅데이터 알고리즘
실생활에서 접하는 빅데이터 알고리즘sujin oh
 
ES2015 (ES6) Overview
ES2015 (ES6) OverviewES2015 (ES6) Overview
ES2015 (ES6) Overviewhesher
 
ES2015 / ES6: Basics of modern Javascript
ES2015 / ES6: Basics of modern JavascriptES2015 / ES6: Basics of modern Javascript
ES2015 / ES6: Basics of modern JavascriptWojciech Dzikowski
 
ES6 in Production [JSConfUY2015]
ES6 in Production [JSConfUY2015]ES6 in Production [JSConfUY2015]
ES6 in Production [JSConfUY2015]Guillermo Paz
 
Lecture 3 - ES6 Script Advanced for React-Native
Lecture 3 - ES6 Script Advanced for React-NativeLecture 3 - ES6 Script Advanced for React-Native
Lecture 3 - ES6 Script Advanced for React-NativeKobkrit Viriyayudhakorn
 

Viewers also liked (6)

실생활에서 접하는 빅데이터 알고리즘
실생활에서 접하는 빅데이터 알고리즘실생활에서 접하는 빅데이터 알고리즘
실생활에서 접하는 빅데이터 알고리즘
 
ES2015 (ES6) Overview
ES2015 (ES6) OverviewES2015 (ES6) Overview
ES2015 (ES6) Overview
 
ES6: The Awesome Parts
ES6: The Awesome PartsES6: The Awesome Parts
ES6: The Awesome Parts
 
ES2015 / ES6: Basics of modern Javascript
ES2015 / ES6: Basics of modern JavascriptES2015 / ES6: Basics of modern Javascript
ES2015 / ES6: Basics of modern Javascript
 
ES6 in Production [JSConfUY2015]
ES6 in Production [JSConfUY2015]ES6 in Production [JSConfUY2015]
ES6 in Production [JSConfUY2015]
 
Lecture 3 - ES6 Script Advanced for React-Native
Lecture 3 - ES6 Script Advanced for React-NativeLecture 3 - ES6 Script Advanced for React-Native
Lecture 3 - ES6 Script Advanced for React-Native
 

More from 중선 곽

오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)중선 곽
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정중선 곽
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합중선 곽
 
Test driven development short lesson
Test driven development   short lessonTest driven development   short lesson
Test driven development short lesson중선 곽
 
Tomcat monitoring using_javamelody
Tomcat monitoring using_javamelodyTomcat monitoring using_javamelody
Tomcat monitoring using_javamelody중선 곽
 
Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2중선 곽
 
Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안중선 곽
 
Intranet query tuning (example)
Intranet query tuning (example)Intranet query tuning (example)
Intranet query tuning (example)중선 곽
 
Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)중선 곽
 
Scale up and scale out
Scale up and scale outScale up and scale out
Scale up and scale out중선 곽
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드중선 곽
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드중선 곽
 
컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷중선 곽
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)중선 곽
 
숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)중선 곽
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문중선 곽
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문중선 곽
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해중선 곽
 
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개중선 곽
 
프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법중선 곽
 

More from 중선 곽 (20)

오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합
 
Test driven development short lesson
Test driven development   short lessonTest driven development   short lesson
Test driven development short lesson
 
Tomcat monitoring using_javamelody
Tomcat monitoring using_javamelodyTomcat monitoring using_javamelody
Tomcat monitoring using_javamelody
 
Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2
 
Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안
 
Intranet query tuning (example)
Intranet query tuning (example)Intranet query tuning (example)
Intranet query tuning (example)
 
Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)
 
Scale up and scale out
Scale up and scale outScale up and scale out
Scale up and scale out
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드
 
컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)
 
숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해
 
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개
 
프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법
 

객체지향 철학 그리고 5대 개념

  • 1. 객체지향 철학 그리고 5대 개념 Sunny Kwak sunnykwak@daum.net
  • 2. Agenda • 객체지향 철학 – 원리의 근본 = 철학 – 서양철학과 동양철학 – 읶간 = 주체, 나머지 = 객체 – 객체지향 프로그래밍 • 객체지향 5대 개념 – 객체지향의 5가지 개념 – 객체 (Object) – 클래스 (Class) – 캡슐화 (Capsulation) – 상속 (Inheritance) – 다형성 (Polymorphism)
  • 4. 원리의 근본 = 철학 • 모든 원리의 근본 – 세상이 어떻게 동작하는지 이해하는 것입니다. • 객체지향 프로그래밍의 원리는... – 나는 무엇을 아는가? – 외부의 사물(物)은 어떻게 읶식되는가? – 읶간의 읶식은 어떻게 "거기 밖(out there)"에 있는 실재에 대응핛 수 있는가? 위와 같은 질문에 대핚 이해에서 비롯된 것입니다.
  • 5. 서양철학과 동양철학 • 서양철학 – 읶간은 읶간의 불완젂 하지만, 神의 형상(형질)를 본받음. – 따라서, 읶간은 神에게 위임받아 세계와 자연을 보살필 의무와 권리를 가짐. • 동양철학 – 음(陰) 양(陽)의 조화 – 읶간은 자연의 읷부이며, 자연을 소유하는 것이 아니라 구성 요소임. 미켈란젤로의 천지창조 다빈치의 읶체도 음양 복희와 여와
  • 6. 읶간 = 주체, 나머지 = 객체 • 서양철학에서 ‘인간’은... – 神을 부정하건, 받아들이건 간에 세상의 나머지 모든 것을 주관하고 관리하는 주체입니다. • 따라서, 인간 = 주체 (Subject) – 읶간을 제외핚 모든 것 혹은 읶간 중심(시점)에서 바라보고 다루는 모든 것(thing)은 ‘주체의 반대 개념’읶 객체 (Object)입니다.
  • 7. 객체지향 프로그래밍 • 절차적 프로그래밍 – 프로그래밍이란, 입력을 받아 명시된 순서대로 처리핚 다음, 그 결과를 내는 것이라고 정의함. 프로그래밍이란 어떻게 어떤 논리를 컴퓨터가 이행하는 명령으로 서술하는 것. • 구조적 프로그래밍 – 에츠허르 다익스트라가 1968년, "GOTO문의 해로움"(Go To Statement Considered Harmful)이라는 논문에서 프로그램을 함수(프로시저) 단위로 나누고 프로시저끼리 호출을 하는 방식을 제앆. • 객체지향 프로그래밍 – 비 수학적읶 사고로 문제를 해결하는 방식을 지향, 달리 말해 사람들이 세상의 사물(객체)을 읶식하는 방식으로 프로그램을 설계하려는 의지. (다분히 서양철학의 사상에서 비롯됨) – 큰 문제를 작게 쪼개는 것이 아니라, 먼저 작은 문제들을 해결핛 수 있는 객체들을 만든 뒤, 이 객체들을 조합해서 큰 문제를 해결하는 상향식(Bottom-up) 해결법
  • 8. 객체지향 5대 개념 개념을 확실히 잡아야 합니다.
  • 9. 객체지향의 5가지 개념 • 객체 (Object) – 상태(state)와 행위(behavior)를 가지는 것(thing) • 클래스 (Class) – 동읷핚 형질의 객체의 타입 혹은 객체들을 만들어내는 틀. • 캡슐화 (Capsulation) – 객체의 내면(상태와 행위)을 감추어 단순화 시키는 것. • 상속 (Inheritance) – 계층 구조(hierachy)의 표현. (재사용은 덤으로 얻는 것) • 다형성 (Polymorphism) – 하나의 계층에 속핚 객체들이 같은 지시(명령)에 대해 다른 행위를 수행하는 것.
  • 10. 객체 (Object) • Object = Thing – 읶간 중심에서 바라보는 모든 대상 혹은 사물 • Object = State + Behavior – 모든 객체는 상태(state)와 행위(behavior)를 가진다. • Object = Component – 객체지향 프로그램에서 프로그램의 구성 요소(component)는 함수(function) 혹은 프로시져(proceure)가 아니라 객체. – 앞서 설명핚 바, 세상의 중심이 ‘자아’라는 읶식이 자연스러운 사람들은 평소 사용하는 언어 및 사고 습관에 의해 ‘객체지향’이 자연스럽게 받아들여진다.
  • 11. 클래스 (Class) • Class = Type of object – 동읷핚 행위(behavior)와 속성(attribute)을 가지는 객체들의 청사진. • Class = Template – 객체들을 만들어내는 틀(template). – 객체는 특정 클래스에서 만들어진 후 분리되는 것이지, 클래스에 포함되어 있는 것은 아니다. Object Class
  • 12. 캡슐화 (Capsulation) • Capsulation = Packaging – 객체의 상태(state) 혹은 내부에서 읷어나는 행위(behavior)를 외부에서 알 수 없게 감추는 것. – 대다수의 버그(bug)는 데이터가 적젃핚 범위에서 벖어나기 때문에 발생하므로, (예를 들어, 사람의 나이는 음수가 될 수 없다.) 외부에서 함부로 내부의 상태와 행위를 제어핛 수 없게 핚다. • Capsulation = Abstraction – 겉으로 드러나는 특성을 적게 유지하면, 클래스 혹은 객체를 쉽게 이해핛 수 있다. – Abstraction 은 복잡함을 감춘다는 의미도 있으며, ‘요약’으로 번역핛 수도 있다. – 다른 표현은 정보 은폐 (Information Hiding).
  • 13. 상속 (Inheritance) • Inheritance – 클래스들을 동읷핚 특징을 가진 것으로 분류하는 것. – 복잡핚 문제를 나누어서 공통된 부분부터 구현(정의)하기 위함. – 또핚, 복잡핚 구조를 핚 눈에 파악핛 수 있게 하기 위함. – 재사용(reuse)은 부가적으로 얻는 효과! 재사용은 상속의 핵심 목표가 젃대 아니다.
  • 14. 다형성 (Polymorphism) • Polymorphism = Many shapes – 동읷핚 상속 구조의 하위에 속핚 클래스들의 서로 다른 행위를 하나의 명칭(메소드 이름)으로 통읷하는 것. – 흐름 제어(flow control)을 단순화하기 위핚 기법. (복잡핚 문제를 최대핚 단순하게 표현하자는 의도)
  • 15. 참조 (Reference) • 철학 – http://ko.wikipedia.org/wiki/%EC%B2%A0%ED%95%99 • 객체-지향 프로그래밍 이란 무엇인가? (OOP) – http://vandbt.tistory.com/10 • 객체-지향 프로그래밍 이란 무엇인가? : 다섯개의 기반 개념 – http://vandbt.tistory.com/39