SlideShare a Scribd company logo
1 of 34
Download to read offline
객체란 뭘까?
들어가기에 앞서…
이 PPT는 C언어 문법을 익힌 사람을 대상으로 만들었습니다
이 PPT는 Java를 사용해서 설명하고 있습니다
이 PPT는 필자의 개인적인 생각으로만 이루어져 있습니다
따라서 이 PPT는 신뢰도가 매우 낮습니다
본문에서는 반말씁니다
주의할 점
절차지향과 객체지향은 프로그래밍 언어가 아닙니다
절차지향과 객체지향은 하나의 패러다임입니다
단지 두 패러다임을 설명하기 위해 C와 Java를 사용하고 있을 뿐입니다
※패러다임 – 어떤 한 시대 사람들의 견해나 사고를 근본적으로 규정하고 있는 테두리로서의 인식의 체계.
또는 사물에 대한 이론적인 틀이나 체계
절차지향 vs 객체지향
절차지향 vs 객체지향
대학에서 객체지향을 배울 때 비교하는 것은 절차지향이다
그러면 절차지향이란 무엇인가?
절차라는 단어를 생각해보자
절차지향 vs 객체지향
일반적으로 절차는“순서대로”란
뜻으로 생각한다
실제로 C언어는 코드가 위에서부터
아래로 순서대로 실행된다
절차지향 vs 객체지향
그러면 객체지향은 순서대로 실행되지 않는가?
아니다
객체지향도 코드는 위에서부터 아래로 순서대로 실행된다
사실 엄밀히 말하면 순서대로 실행된다는 개념은 명령형 프로그래밍이다
(절차지향하고 다름)
절차지향 vs 객체지향
Java 코드 실행 결과
절차지향 vs 객체지향
그러면 절차지향하고 객체지향의 차이점은 무엇인가?
하나의 예를 들겠다
C언어에서 계산기가 필요하다고 하자
계산기 프로그램을 만드는 것이 아니다. 코딩할 때 계산기라는 어떤
데이터가 필요하다는 것이다.
계산기 만들기
계산기를 만드려면 무엇이 필요할까?
많은 기능이 있겠지만 우리는 덧셈, 뺄셈, 곱셈, 나눗셈만 필요하다고 하자
C언어에서는 이 기능들을 함수로 만들 수 있다
계산기 만들기
(0으로 나누는 경우같은 예외는 모두 생략)
계산기에 필요한 기능들을 만들었다
그럼 여기서 생각해보자
Add는 계산기인가? 아니다
단지 덧셈만 수행하는 계산기의 기능 중 하나다
Sub는 계산기인가? 아니다
Mul는? Div는? 모두 아니다
계산기 만들기
방금 만든 함수들을 모두 합쳐야 계산기라고 할 수 있을 것이다
그럼 어떻게 합칠까??
함수를 따로 만들어보자
계산기 만들기
계산기라는 함수를 만들었다
안에 덧셈, 뺄셈, 곱셈, 나눗셈 기능도
포함되어 있다
그러면 이것은 계산기인가??
역시 아니다
우리가 아는 계산기는 한 번에
덧셈, 뺄셈, 곱셈, 나눗셈을 하지 않는다
계산기 만들기
우리가 아는 계산기는 사용자가 원하는 기능만 수행할 수 있다
덧셈만 원하면 덧셈만, 뺄셈만 원하면 뺄셈만 할 수 있어야 한다
그러면 원하는 기능만 사용할 수 있도록 하자
분기문을 이용하면 된다
계산기 만들기
Switch문을 이용해 원하는 기능만 쓸 수
있도록 했다
이제는 계산기라고 불릴만 하다
하지만 문제가 있다
사용자가 첫번째 인자에 어떤 값을 전해주는지
알아야 한다
계산기 만들기
어떤 데이터를 사용할 때 사용자가 알아야 하는 것이 있다면 바람직한 구조가 아니다
방금 만든 계산기는 각 기능에 대해 그에 맞는 숫자(0,1,2,3)을 알고 있어야 한다
또한 숫자의 의미도 파악하기 힘들다
그러면 어떻게 해야 사용자가 쉽게 쓸 수 있을까?
다음 코드를 보자
계산기 만들기
1. 계산기 구조체를 만든다
구조체 안에는 덧셈, 뺄셈, 곱셈, 나눗셈
함수의 주소를 저장할 수 있는 함수 포인터가
들어있다.
계산기 만들기
2. 계산기 구조체를 선언한 후 구조체 안의
변수를 초기화 한다
초기화 안하면 이름만 add, sub, mul, div
이고 쓰레기 값이 들어있다
계산기 만들기
이번에는 구조체와 함수 포인터를 이용하여 계산기를 만들었다
사용할 때는 어떤지 보자
계산기 만들기
계산기(변수 C)의 덧셈(함수 add)를 사용하여
1과 2(매개 변수)를 더한다
의미가 명확하고 사용법이 간결해졌다
계산기 만들기
실행 결과도 정상적이다
계산기 만들기
우리는 계산기를 만들었고 실행도 잘되며 사용하기 편리하다…지만
과연 그럴까?
방금 만든 것도 문제점이 있다
계산기 만들기
1.
계산기 하나를 만들기 위해서 우리는
계산기에 필요한 함수를 따로 만들고
계산기 만들기
2.
계산기의 기능을 저장할 구조체를 따로
만들어야 하며
계산기 만들기
3.
계산기 구조체를 초기화 시켜줘야 한다
특히 초기화 작업은 계산기가 많아질수록
너무 불편하다
계산기 만들기
구조체 초기화 함수를 만들면 조금 편해지지만 근본적인 해결책이
되지는 못한다
절차지향 vs 객체지향
우리가 만든 계산기는 새로운 기능이 있을 때마다 함수를 추가해야 하고
구조체에 그에 맞는 함수 포인터를 새로 만들어야 하며
초기화 부분도 새로운 코드를 추가해야 한다
절차지향 vs 객체지향
여기서 절차지향의 특징이 보인다
절차지향은 데이터(구조체)와 함수(기능)가 분리되어 있다는 것이다
(즉, 독립적이다)
그러면 객체지향은 어떨까?
객체지향은 우리가 만든 계산기를 “객체”로 만들 수 있다
계산기 만들기
1.
계산기 클래스를 만든다
※(클래스는 객체가 아니다)
계산기 만들기
2.
New 키워드를 이용해 객체를
생성하고 사용하면 끝
실행 결과
절차지향 vs 객체지향
C언어에 비해 훨씬 간단해진 것이 느껴졌는가?
이렇듯 객체는 데이터와 기능이 함께 있어 사물을 묘사하기가
절차지향보다 직관적이고 편리하다
(아까 만든 계산기를 생각해보자)
절차지향 vs 객체지향
하지만 이건 객체지향 요소를 잘 사용할 경우 그렇다는 것이지
무조건 객체를 사용한다고 해서 코드가 간결해지거나
사용자가 편리해지는 것은 아니다
절차지향 vs 객체지향
클래스를 이렇게 개판으로 만들면 아까 만든 C언어 계산기보다
사용하기 불편해진다. 물론 실행 결과는 같다 ^^
절차지향 vs 객체지향
계산기 객체와 같이 프로그램을 명령어의 목록으로 보지 않고
여러 개의 독립된 단위인 객체들의 모임으로 파악하는 것이
객체지향 프로그래밍이다

More Related Content

What's hot

모놀리스에서 마이크로서비스 아키텍처로의 전환 전략::박선용::AWS Summit Seoul 2018
모놀리스에서 마이크로서비스 아키텍처로의 전환 전략::박선용::AWS Summit Seoul 2018모놀리스에서 마이크로서비스 아키텍처로의 전환 전략::박선용::AWS Summit Seoul 2018
모놀리스에서 마이크로서비스 아키텍처로의 전환 전략::박선용::AWS Summit Seoul 2018Amazon Web Services Korea
 
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근MinGeun Park
 
프로그래머를 위한 360VR
프로그래머를 위한 360VR프로그래머를 위한 360VR
프로그래머를 위한 360VRyorung
 
라이트,라이트맵,라이트프로브,누가가장가볍고이쁠까
라이트,라이트맵,라이트프로브,누가가장가볍고이쁠까라이트,라이트맵,라이트프로브,누가가장가볍고이쁠까
라이트,라이트맵,라이트프로브,누가가장가볍고이쁠까GukHwan Ji
 
Disorders of Hyperpigmentation
Disorders of HyperpigmentationDisorders of Hyperpigmentation
Disorders of HyperpigmentationIbrahim Farag
 
HAIR DERMATOLOGY REVISION NOTES
HAIR DERMATOLOGY REVISION NOTES HAIR DERMATOLOGY REVISION NOTES
HAIR DERMATOLOGY REVISION NOTES TONY SCARIA
 
제 13회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [GAN 안 쓰는 세얼GAN이들] : 코로나 언택트 시대, 나의 홈트레이닝을 도와줄 AI...
제 13회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [GAN 안 쓰는 세얼GAN이들] : 코로나 언택트 시대, 나의 홈트레이닝을 도와줄 AI...제 13회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [GAN 안 쓰는 세얼GAN이들] : 코로나 언택트 시대, 나의 홈트레이닝을 도와줄 AI...
제 13회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [GAN 안 쓰는 세얼GAN이들] : 코로나 언택트 시대, 나의 홈트레이닝을 도와줄 AI...BOAZ Bigdata
 
공간정보 스터디 1주차
공간정보 스터디 1주차공간정보 스터디 1주차
공간정보 스터디 1주차Byeong-Hyeok Yu
 
Pattern recognition facial recognition
Pattern recognition facial recognitionPattern recognition facial recognition
Pattern recognition facial recognitionMazin Alwaaly
 
Hcq ocular toxicity
Hcq ocular toxicityHcq ocular toxicity
Hcq ocular toxicityramarawand
 
Face Recognition Technology
Face Recognition TechnologyFace Recognition Technology
Face Recognition TechnologyShravan Halankar
 
Disorders of pigmentation
Disorders of pigmentationDisorders of pigmentation
Disorders of pigmentationdrangelosmith
 
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)Jaikwang Lee
 
Real-time Face Recognition & Detection Systems 1
Real-time Face Recognition & Detection Systems 1Real-time Face Recognition & Detection Systems 1
Real-time Face Recognition & Detection Systems 1Suvadip Shome
 

What's hot (20)

모놀리스에서 마이크로서비스 아키텍처로의 전환 전략::박선용::AWS Summit Seoul 2018
모놀리스에서 마이크로서비스 아키텍처로의 전환 전략::박선용::AWS Summit Seoul 2018모놀리스에서 마이크로서비스 아키텍처로의 전환 전략::박선용::AWS Summit Seoul 2018
모놀리스에서 마이크로서비스 아키텍처로의 전환 전략::박선용::AWS Summit Seoul 2018
 
Phakomatoses
PhakomatosesPhakomatoses
Phakomatoses
 
Motion blur
Motion blurMotion blur
Motion blur
 
Melasma treatment
Melasma treatmentMelasma treatment
Melasma treatment
 
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
 
프로그래머를 위한 360VR
프로그래머를 위한 360VR프로그래머를 위한 360VR
프로그래머를 위한 360VR
 
라이트,라이트맵,라이트프로브,누가가장가볍고이쁠까
라이트,라이트맵,라이트프로브,누가가장가볍고이쁠까라이트,라이트맵,라이트프로브,누가가장가볍고이쁠까
라이트,라이트맵,라이트프로브,누가가장가볍고이쁠까
 
Disorders of Hyperpigmentation
Disorders of HyperpigmentationDisorders of Hyperpigmentation
Disorders of Hyperpigmentation
 
HAIR DERMATOLOGY REVISION NOTES
HAIR DERMATOLOGY REVISION NOTES HAIR DERMATOLOGY REVISION NOTES
HAIR DERMATOLOGY REVISION NOTES
 
Ndc11 이창희_hdr
Ndc11 이창희_hdrNdc11 이창희_hdr
Ndc11 이창희_hdr
 
제 13회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [GAN 안 쓰는 세얼GAN이들] : 코로나 언택트 시대, 나의 홈트레이닝을 도와줄 AI...
제 13회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [GAN 안 쓰는 세얼GAN이들] : 코로나 언택트 시대, 나의 홈트레이닝을 도와줄 AI...제 13회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [GAN 안 쓰는 세얼GAN이들] : 코로나 언택트 시대, 나의 홈트레이닝을 도와줄 AI...
제 13회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [GAN 안 쓰는 세얼GAN이들] : 코로나 언택트 시대, 나의 홈트레이닝을 도와줄 AI...
 
공간정보 스터디 1주차
공간정보 스터디 1주차공간정보 스터디 1주차
공간정보 스터디 1주차
 
Ichthyosis
IchthyosisIchthyosis
Ichthyosis
 
Pattern recognition facial recognition
Pattern recognition facial recognitionPattern recognition facial recognition
Pattern recognition facial recognition
 
HPA*
HPA*HPA*
HPA*
 
Hcq ocular toxicity
Hcq ocular toxicityHcq ocular toxicity
Hcq ocular toxicity
 
Face Recognition Technology
Face Recognition TechnologyFace Recognition Technology
Face Recognition Technology
 
Disorders of pigmentation
Disorders of pigmentationDisorders of pigmentation
Disorders of pigmentation
 
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
 
Real-time Face Recognition & Detection Systems 1
Real-time Face Recognition & Detection Systems 1Real-time Face Recognition & Detection Systems 1
Real-time Face Recognition & Detection Systems 1
 

Viewers also liked

객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)Seung-June Lee
 
객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념중선 곽
 
우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구Jae Sung Park
 
PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지Yoonwhan Lee
 
객체지향프로그래밍 특강
객체지향프로그래밍 특강객체지향프로그래밍 특강
객체지향프로그래밍 특강uEngine Solutions
 
사운드익스프레스 소개
사운드익스프레스 소개사운드익스프레스 소개
사운드익스프레스 소개춘희 윤
 
"왜 고전을 읽는가?"
"왜 고전을 읽는가?" "왜 고전을 읽는가?"
"왜 고전을 읽는가?" minumsa
 
Kgc presentation eng
Kgc presentation engKgc presentation eng
Kgc presentation engasweth12
 
[1st TEDx명동] 식민근대화 Vs 자주근대화
[1st TEDx명동] 식민근대화 Vs 자주근대화[1st TEDx명동] 식민근대화 Vs 자주근대화
[1st TEDx명동] 식민근대화 Vs 자주근대화Keynote User Group
 
Kiev Grand Classic
Kiev Grand ClassicKiev Grand Classic
Kiev Grand Classicasweth12
 
Manager vs. Leader
Manager vs. LeaderManager vs. Leader
Manager vs. LeaderLee Jihoon
 
Music cards to slap
Music cards   to slapMusic cards   to slap
Music cards to slapKyeongah So
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)MIN SEOK KOO
 
Programming paradigm
Programming paradigmProgramming paradigm
Programming paradigmBhavin Kamani
 

Viewers also liked (20)

객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)
 
객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념
 
Just java
Just javaJust java
Just java
 
우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구
 
PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지
 
부팅
부팅부팅
부팅
 
객체지향프로그래밍 특강
객체지향프로그래밍 특강객체지향프로그래밍 특강
객체지향프로그래밍 특강
 
루즈벨트 Vs 오바마
루즈벨트 Vs 오바마루즈벨트 Vs 오바마
루즈벨트 Vs 오바마
 
Instagram vs Pholar
Instagram vs PholarInstagram vs Pholar
Instagram vs Pholar
 
사운드익스프레스 소개
사운드익스프레스 소개사운드익스프레스 소개
사운드익스프레스 소개
 
"왜 고전을 읽는가?"
"왜 고전을 읽는가?" "왜 고전을 읽는가?"
"왜 고전을 읽는가?"
 
Kgc presentation eng
Kgc presentation engKgc presentation eng
Kgc presentation eng
 
Jazz music vs
Jazz music vsJazz music vs
Jazz music vs
 
[1st TEDx명동] 식민근대화 Vs 자주근대화
[1st TEDx명동] 식민근대화 Vs 자주근대화[1st TEDx명동] 식민근대화 Vs 자주근대화
[1st TEDx명동] 식민근대화 Vs 자주근대화
 
Miracle
Miracle Miracle
Miracle
 
Kiev Grand Classic
Kiev Grand ClassicKiev Grand Classic
Kiev Grand Classic
 
Manager vs. Leader
Manager vs. LeaderManager vs. Leader
Manager vs. Leader
 
Music cards to slap
Music cards   to slapMusic cards   to slap
Music cards to slap
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
 
Programming paradigm
Programming paradigmProgramming paradigm
Programming paradigm
 

Similar to 절차지향 vs 객체지향

스타트업 인턴 개발자 3달간의 고군분투기 김은향
스타트업 인턴 개발자 3달간의 고군분투기 김은향스타트업 인턴 개발자 3달간의 고군분투기 김은향
스타트업 인턴 개발자 3달간의 고군분투기 김은향Eunhyang Kim
 
More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지Dong Chan Shin
 
객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고HeechanLee6
 
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃Kwangyoun Jung
 
함수형 프로그래밍
함수형 프로그래밍함수형 프로그래밍
함수형 프로그래밍QooJuice
 
Pivotal Labs 고객사례 - Coinone
Pivotal Labs 고객사례 - CoinonePivotal Labs 고객사례 - Coinone
Pivotal Labs 고객사례 - CoinoneVMware Tanzu Korea
 
프로그램 기초
프로그램 기초프로그램 기초
프로그램 기초Minsuk Lee
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Nam Hyeonuk
 
C++ Template/STL study
C++ Template/STL studyC++ Template/STL study
C++ Template/STL studySeo Dong-yu
 
쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유NAVER SHOPPING
 
[AKC2021] 힐링페이퍼의 애자일 전환(고찬혁 / 김종우)
[AKC2021] 힐링페이퍼의 애자일 전환(고찬혁 / 김종우)[AKC2021] 힐링페이퍼의 애자일 전환(고찬혁 / 김종우)
[AKC2021] 힐링페이퍼의 애자일 전환(고찬혁 / 김종우)AgileKoreaConference Alliance
 
KERIS SW교육 연계 로봇 활용 심화과정 (중등)
KERIS SW교육 연계 로봇 활용 심화과정 (중등)KERIS SW교육 연계 로봇 활용 심화과정 (중등)
KERIS SW교육 연계 로봇 활용 심화과정 (중등)Kwang-Hyun Park
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리Injae Lee
 
사용자 스토리 기반의 스크럼
사용자 스토리 기반의 스크럼사용자 스토리 기반의 스크럼
사용자 스토리 기반의 스크럼Junyi Song
 
사용자 스토리 기반의 스크럼(Scrum)
사용자 스토리 기반의 스크럼(Scrum)사용자 스토리 기반의 스크럼(Scrum)
사용자 스토리 기반의 스크럼(Scrum)재능마켓 크몽
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)Jay Park
 
Effective c++chapter1 and2
Effective c++chapter1 and2Effective c++chapter1 and2
Effective c++chapter1 and2성연 김
 
M5 1 1
M5 1 1M5 1 1
M5 1 1nexthw
 
3팀_객체지향 프로그래밍.pptx
3팀_객체지향 프로그래밍.pptx3팀_객체지향 프로그래밍.pptx
3팀_객체지향 프로그래밍.pptxssuser642b19
 

Similar to 절차지향 vs 객체지향 (20)

스타트업 인턴 개발자 3달간의 고군분투기 김은향
스타트업 인턴 개발자 3달간의 고군분투기 김은향스타트업 인턴 개발자 3달간의 고군분투기 김은향
스타트업 인턴 개발자 3달간의 고군분투기 김은향
 
More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지
 
객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고
 
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
 
함수형 프로그래밍
함수형 프로그래밍함수형 프로그래밍
함수형 프로그래밍
 
Pivotal Labs 고객사례 - Coinone
Pivotal Labs 고객사례 - CoinonePivotal Labs 고객사례 - Coinone
Pivotal Labs 고객사례 - Coinone
 
프로그램 기초
프로그램 기초프로그램 기초
프로그램 기초
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
 
C++ Template/STL study
C++ Template/STL studyC++ Template/STL study
C++ Template/STL study
 
Showroom 2019-react
Showroom 2019-reactShowroom 2019-react
Showroom 2019-react
 
쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유
 
[AKC2021] 힐링페이퍼의 애자일 전환(고찬혁 / 김종우)
[AKC2021] 힐링페이퍼의 애자일 전환(고찬혁 / 김종우)[AKC2021] 힐링페이퍼의 애자일 전환(고찬혁 / 김종우)
[AKC2021] 힐링페이퍼의 애자일 전환(고찬혁 / 김종우)
 
KERIS SW교육 연계 로봇 활용 심화과정 (중등)
KERIS SW교육 연계 로봇 활용 심화과정 (중등)KERIS SW교육 연계 로봇 활용 심화과정 (중등)
KERIS SW교육 연계 로봇 활용 심화과정 (중등)
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리
 
사용자 스토리 기반의 스크럼
사용자 스토리 기반의 스크럼사용자 스토리 기반의 스크럼
사용자 스토리 기반의 스크럼
 
사용자 스토리 기반의 스크럼(Scrum)
사용자 스토리 기반의 스크럼(Scrum)사용자 스토리 기반의 스크럼(Scrum)
사용자 스토리 기반의 스크럼(Scrum)
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
 
Effective c++chapter1 and2
Effective c++chapter1 and2Effective c++chapter1 and2
Effective c++chapter1 and2
 
M5 1 1
M5 1 1M5 1 1
M5 1 1
 
3팀_객체지향 프로그래밍.pptx
3팀_객체지향 프로그래밍.pptx3팀_객체지향 프로그래밍.pptx
3팀_객체지향 프로그래밍.pptx
 

More from QooJuice

리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션QooJuice
 
캐릭터 애니메이션
캐릭터 애니메이션캐릭터 애니메이션
캐릭터 애니메이션QooJuice
 
Screen space ambient occlusion
Screen space ambient occlusionScreen space ambient occlusion
Screen space ambient occlusionQooJuice
 
UE4 Garbage Collection
UE4 Garbage CollectionUE4 Garbage Collection
UE4 Garbage CollectionQooJuice
 
Compute shader
Compute shaderCompute shader
Compute shaderQooJuice
 
Game programming patterns 2
Game programming patterns 2Game programming patterns 2
Game programming patterns 2QooJuice
 
Game programming patterns
Game programming patternsGame programming patterns
Game programming patternsQooJuice
 
코루틴(Coroutine)
코루틴(Coroutine)코루틴(Coroutine)
코루틴(Coroutine)QooJuice
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템QooJuice
 
Direct x 12 초기화
Direct x 12 초기화Direct x 12 초기화
Direct x 12 초기화QooJuice
 
노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)QooJuice
 
Segmentation and Paging
Segmentation and PagingSegmentation and Paging
Segmentation and PagingQooJuice
 
Move semantics
Move semanticsMove semantics
Move semanticsQooJuice
 

More from QooJuice (16)

리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션
 
캐릭터 애니메이션
캐릭터 애니메이션캐릭터 애니메이션
캐릭터 애니메이션
 
Screen space ambient occlusion
Screen space ambient occlusionScreen space ambient occlusion
Screen space ambient occlusion
 
UE4 Garbage Collection
UE4 Garbage CollectionUE4 Garbage Collection
UE4 Garbage Collection
 
Compute shader
Compute shaderCompute shader
Compute shader
 
Game programming patterns 2
Game programming patterns 2Game programming patterns 2
Game programming patterns 2
 
Game programming patterns
Game programming patternsGame programming patterns
Game programming patterns
 
Picking
PickingPicking
Picking
 
코루틴(Coroutine)
코루틴(Coroutine)코루틴(Coroutine)
코루틴(Coroutine)
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
Direct x 12 초기화
Direct x 12 초기화Direct x 12 초기화
Direct x 12 초기화
 
행렬
행렬행렬
행렬
 
벡터
벡터벡터
벡터
 
노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)
 
Segmentation and Paging
Segmentation and PagingSegmentation and Paging
Segmentation and Paging
 
Move semantics
Move semanticsMove semantics
Move semantics
 

절차지향 vs 객체지향

  • 2. 들어가기에 앞서… 이 PPT는 C언어 문법을 익힌 사람을 대상으로 만들었습니다 이 PPT는 Java를 사용해서 설명하고 있습니다 이 PPT는 필자의 개인적인 생각으로만 이루어져 있습니다 따라서 이 PPT는 신뢰도가 매우 낮습니다 본문에서는 반말씁니다
  • 3. 주의할 점 절차지향과 객체지향은 프로그래밍 언어가 아닙니다 절차지향과 객체지향은 하나의 패러다임입니다 단지 두 패러다임을 설명하기 위해 C와 Java를 사용하고 있을 뿐입니다 ※패러다임 – 어떤 한 시대 사람들의 견해나 사고를 근본적으로 규정하고 있는 테두리로서의 인식의 체계. 또는 사물에 대한 이론적인 틀이나 체계
  • 5. 절차지향 vs 객체지향 대학에서 객체지향을 배울 때 비교하는 것은 절차지향이다 그러면 절차지향이란 무엇인가? 절차라는 단어를 생각해보자
  • 6. 절차지향 vs 객체지향 일반적으로 절차는“순서대로”란 뜻으로 생각한다 실제로 C언어는 코드가 위에서부터 아래로 순서대로 실행된다
  • 7. 절차지향 vs 객체지향 그러면 객체지향은 순서대로 실행되지 않는가? 아니다 객체지향도 코드는 위에서부터 아래로 순서대로 실행된다 사실 엄밀히 말하면 순서대로 실행된다는 개념은 명령형 프로그래밍이다 (절차지향하고 다름)
  • 8. 절차지향 vs 객체지향 Java 코드 실행 결과
  • 9. 절차지향 vs 객체지향 그러면 절차지향하고 객체지향의 차이점은 무엇인가? 하나의 예를 들겠다 C언어에서 계산기가 필요하다고 하자 계산기 프로그램을 만드는 것이 아니다. 코딩할 때 계산기라는 어떤 데이터가 필요하다는 것이다.
  • 10. 계산기 만들기 계산기를 만드려면 무엇이 필요할까? 많은 기능이 있겠지만 우리는 덧셈, 뺄셈, 곱셈, 나눗셈만 필요하다고 하자 C언어에서는 이 기능들을 함수로 만들 수 있다
  • 11. 계산기 만들기 (0으로 나누는 경우같은 예외는 모두 생략) 계산기에 필요한 기능들을 만들었다 그럼 여기서 생각해보자 Add는 계산기인가? 아니다 단지 덧셈만 수행하는 계산기의 기능 중 하나다 Sub는 계산기인가? 아니다 Mul는? Div는? 모두 아니다
  • 12. 계산기 만들기 방금 만든 함수들을 모두 합쳐야 계산기라고 할 수 있을 것이다 그럼 어떻게 합칠까?? 함수를 따로 만들어보자
  • 13. 계산기 만들기 계산기라는 함수를 만들었다 안에 덧셈, 뺄셈, 곱셈, 나눗셈 기능도 포함되어 있다 그러면 이것은 계산기인가?? 역시 아니다 우리가 아는 계산기는 한 번에 덧셈, 뺄셈, 곱셈, 나눗셈을 하지 않는다
  • 14. 계산기 만들기 우리가 아는 계산기는 사용자가 원하는 기능만 수행할 수 있다 덧셈만 원하면 덧셈만, 뺄셈만 원하면 뺄셈만 할 수 있어야 한다 그러면 원하는 기능만 사용할 수 있도록 하자 분기문을 이용하면 된다
  • 15. 계산기 만들기 Switch문을 이용해 원하는 기능만 쓸 수 있도록 했다 이제는 계산기라고 불릴만 하다 하지만 문제가 있다 사용자가 첫번째 인자에 어떤 값을 전해주는지 알아야 한다
  • 16. 계산기 만들기 어떤 데이터를 사용할 때 사용자가 알아야 하는 것이 있다면 바람직한 구조가 아니다 방금 만든 계산기는 각 기능에 대해 그에 맞는 숫자(0,1,2,3)을 알고 있어야 한다 또한 숫자의 의미도 파악하기 힘들다 그러면 어떻게 해야 사용자가 쉽게 쓸 수 있을까? 다음 코드를 보자
  • 17. 계산기 만들기 1. 계산기 구조체를 만든다 구조체 안에는 덧셈, 뺄셈, 곱셈, 나눗셈 함수의 주소를 저장할 수 있는 함수 포인터가 들어있다.
  • 18. 계산기 만들기 2. 계산기 구조체를 선언한 후 구조체 안의 변수를 초기화 한다 초기화 안하면 이름만 add, sub, mul, div 이고 쓰레기 값이 들어있다
  • 19. 계산기 만들기 이번에는 구조체와 함수 포인터를 이용하여 계산기를 만들었다 사용할 때는 어떤지 보자
  • 20. 계산기 만들기 계산기(변수 C)의 덧셈(함수 add)를 사용하여 1과 2(매개 변수)를 더한다 의미가 명확하고 사용법이 간결해졌다
  • 22. 계산기 만들기 우리는 계산기를 만들었고 실행도 잘되며 사용하기 편리하다…지만 과연 그럴까? 방금 만든 것도 문제점이 있다
  • 23. 계산기 만들기 1. 계산기 하나를 만들기 위해서 우리는 계산기에 필요한 함수를 따로 만들고
  • 24. 계산기 만들기 2. 계산기의 기능을 저장할 구조체를 따로 만들어야 하며
  • 25. 계산기 만들기 3. 계산기 구조체를 초기화 시켜줘야 한다 특히 초기화 작업은 계산기가 많아질수록 너무 불편하다
  • 26. 계산기 만들기 구조체 초기화 함수를 만들면 조금 편해지지만 근본적인 해결책이 되지는 못한다
  • 27. 절차지향 vs 객체지향 우리가 만든 계산기는 새로운 기능이 있을 때마다 함수를 추가해야 하고 구조체에 그에 맞는 함수 포인터를 새로 만들어야 하며 초기화 부분도 새로운 코드를 추가해야 한다
  • 28. 절차지향 vs 객체지향 여기서 절차지향의 특징이 보인다 절차지향은 데이터(구조체)와 함수(기능)가 분리되어 있다는 것이다 (즉, 독립적이다) 그러면 객체지향은 어떨까? 객체지향은 우리가 만든 계산기를 “객체”로 만들 수 있다
  • 29. 계산기 만들기 1. 계산기 클래스를 만든다 ※(클래스는 객체가 아니다)
  • 30. 계산기 만들기 2. New 키워드를 이용해 객체를 생성하고 사용하면 끝 실행 결과
  • 31. 절차지향 vs 객체지향 C언어에 비해 훨씬 간단해진 것이 느껴졌는가? 이렇듯 객체는 데이터와 기능이 함께 있어 사물을 묘사하기가 절차지향보다 직관적이고 편리하다 (아까 만든 계산기를 생각해보자)
  • 32. 절차지향 vs 객체지향 하지만 이건 객체지향 요소를 잘 사용할 경우 그렇다는 것이지 무조건 객체를 사용한다고 해서 코드가 간결해지거나 사용자가 편리해지는 것은 아니다
  • 33. 절차지향 vs 객체지향 클래스를 이렇게 개판으로 만들면 아까 만든 C언어 계산기보다 사용하기 불편해진다. 물론 실행 결과는 같다 ^^
  • 34. 절차지향 vs 객체지향 계산기 객체와 같이 프로그램을 명령어의 목록으로 보지 않고 여러 개의 독립된 단위인 객체들의 모임으로 파악하는 것이 객체지향 프로그래밍이다