SlideShare una empresa de Scribd logo
1 de 29
글로벌 미디어학부
 자료구조 튜터링
  2013.04.06


               전익범
Introduce
• 본 자료는 숭실대 글로벌미디어학부의 자
  료구조 과목 (David Jean 교수님) 튜터링을
  위해 제작되엇어요.

• 본 자료는 자잘한 것 까지 구체적 설명을 하
  지 않으며, 핵심적인 부분을 이해하기 위한
  보조자료로 사용 해주길 바람..
자료구조란?

• 데이터를 효율적으로 표현하고, 저장하기 위해, 구조화하는 것.

• Ex)



                       vs




        급하게 외출 할 일이 생겨 코디를 한다고 할 때 어느 편이 더 편할까?
        당연히 후자. 옷들이 필요에 맞게 구조화 되어 있기 때문.
자료구조란?
• 여러분들은 이미 자료구조의 유용성에 대해 알고 있습니다.

대표적인 자료구조

   1. 배열

    int                         v   int val[100]
    val1, val2, val3, val4, v   s
    al5…. val100;



  관련된 데이터를 다 따로따로 선언하는 것보다, 배열로 한꺼번에 묶
  어 인덱스로 관리하는 것이 편하다.
자료구조란?
• 여러분들은 이미 자료구조의 유용성에 대해 알고 있습니다.

대표적인 자료구조

   2. 클래스(구조체)                    class Point
                                  {
                                    int x, y; //위치
                                    int color; //색상
    int main(void)                  int size; //크기
                                  }
    {
        int x, y; // 점의 위치
                              v
                                  int main()
        int color; //점의 색상    s   {
        int size; //점의 크기          Point p1;
        …                         …
    }                             }




          마찬가지로 관련 있는 데이터는 클래스로 묶어 관리하는 것이 편
          하다.
자료구조란?
• 이처럼 자료가 얼마나 잘 구조화 되어 있느
  냐에 따라 프로그램의 속도, 개발 시간, 유
  지 보수의 비용이 달라집니다.

• 자료구조 과목에서는 Data를 잘 구조화하
  기 위한 여러가지 방법에 대해 다룹니다.
추상자료형(Abstract Data Type)
• 정의 : 추상적으로 정의된 자료형

• 자료형(Type)이란?
 – int, double, float, char 을 말함.


• 그럼 추상자료형(ADT)이란?
 – int, double, flaot, char 말고도, 내가 필요한 자
   료형을 추상적으로 표현한 것.
추상자료형(Abstract Data Type)
• 예를 들어 보아요.

• int a;   // 여기엔 4byte 정수가 저장될 것임.
• double b; // 여기엔 8바이트 실수가 저장될 것임.
• char c; //여기엔 1바이트 문자 하나가 저장될 것임.

• Dragon d; //여기엔 드래곤이 저장된다.
         //하지만 c언어에는 Dragon이란 자료형이 없다. 하지만 내가 만들면 된다. 어떻게?
추상자료형(Abstract Data Type)
• Dragon 자료형을 만들기 위해.

• 먼저 Dragon을 추상화 해야한다. 이를 데이터
  추상화라 한다. Dragon을 추상화해보자.
 위치(x,y,z), 색깔(빨갛다, 노랗다..등등), 크기(몇 미터..)머리갯수(한 개, 두
 개), 다리 갯수, 난다, 걷는다. 불을 뿜는다.


• 이렇게 내가 Dragon을 정의하는데 있어 필요
  한 것들을 생각나는 대로 적어보면, 어쩔 수
  없이 Dragon은 추상화된다.
추상자료형(Abstract Data Type)
• 이 중, 데이터적인 것과 기능적인 것을 나눠
  보자.

• 데이터적인 것 : 위치, 색깔, 크기, 머리 개
  수, 다리 개수

• 기능적인 것 : 난다, 걷는다, 불을 뿜는다.
추상자료형(Abstract Data Type)
즉 ,데이터를 추상화 하라는 말은
아래와 같이 사물의 데이터적인 측면과 기능적인 측면을 기
술하라는 것이다.


   class Dragon
   {
              private:
                         double x, y, z;     //위치
                         int color;
                         float size;
                                         //색상
                                          //크기
                                                     데이터
                         int numHead; //머리 갯수
                         int numLeg;       //다리 갯수

              public:
                         void Fly();    //난다
                         void Walk();   //걷는다        기능
                         void Fire();   //불뿜는다.

   };
추상자료형(Abstract Data Type)
데이터 적인 것은 private에 쓰고, 이를 멤버 변수라한다.
기능적인 것은 public에 쓰고, 멤버 함수라 한다.

 class Dragon
 {
        private:
                   double x, y, z; //위치
                   int color;      //색상        멤버 변수
                   float size;      //크기
                   int numHead; //머리 갯수
                   int numLeg;       //다리 갯수
        public:
                   void Fly();    //난다         멤버 함수
                   void Walk();   //걷는다
                   void Fire();   //불뿜는다.

 };
추상자료형(Abstract Data Type)
이제 Dragon 자료형이 선언되었으므로, 우리는 그 정의에
맞게 하나 하나 구현만하면된다.

하나만 예를 들어 보면 아래와 같다.

ex)
  void Dragon::Walk()
  {
     x+=10; //x축으로 10만큼 이동
  }
추상자료형(Abstract Data Type)
• 하지만 추상 자료형을 정의하는데 있어, 구
  현에 대해서는 신경쓸 필요가 없다.
    class Dragon
    {
               private:
                          double x, y, z;       //위치
                          int color;      //색상
                          float size;        //크기
                          int numHead; //머리 갯수
                          int numLeg;      //다리 갯수

               public:
                          void Fly();    //난다
                          void Walk();   //걷는다
                          void Fire();   //불뿜는다.

    };



즉 여기까지 작성(선언)이 완료됐으면, Dragon의 추상화는 끝난 것이다.
추상자료형(Abstract Data Type)



   그럼 구현은 누가하느냐?
추상자료형(Abstract Data Type)



  정답 : 아랫사람 시키면 된다.
추상자료형(Abstract Data Type)
즉, 내가 필요한 데이터와, 기능만 선언하면

그 구현은 다른 사람이 알아서 어떻게든
하면 된다는 의미이다.

즉, 일의 분업이 가능하다.
추상자료형(Abstract Data Type)

 즉 내가 甲이라면, 丁들에게 이러한 명령이 가능하다.

 class Dragon
 {
            private:
                       double x, y, z;      //위치
                       int color;      //색상
                       float size;        //크기
                       int numHead; //머리 갯수
                       int numLeg;      //다리 갯수    “이건 A가 만들어와”
            public:
                       void Fly();    //난다
                       void Walk();   //걷는다        “이건 B가 만들어와”
                       void Fire();   //불뿜는다.

 };
                                                   “이건 C가 만들어와”

즉즉, 추상 자료형은 우리 모두가 무엇을 만들 지에 대한 설계 지도 같은 것
이라고 보면 된다.
추상자료형(Abstract Data Type)
이렇게 추상자료형이 구현까지 완료되었다면, Dragon을 int, double처럼
사용할 수 있다.


#include “Dragon.h”

int main(void)
{
        Dragon d; //드래곤 생성

       d.walk()    //드래곤이 걷는다.
        d.fly();    //드래곤이 난다.

}
추상자료형(Abstract Data Type)
추상자료형의 또다른 목적은 정보은닉을 위해서다.
      Dragon.h



                  만약 위에서 언급한 A, B C들이 각 함수들을
                  다 구현해왔다고 하자.

                  (주로 추상자료형 선언은 .h파일에하고
                  구현은 .cpp파일에 한다.)


     Dragon.cpp
추상자료형(Abstract Data Type)

     Dragon.h



                 사용자인 나는 Dragon.h에 있는 함수명과 주
                 석만 보고, 내가 필요한 기능을 가져다 쓰면
                 된다.




    Dragon.cpp
                 Dragon.cpp에 있는 구현 방법에 대한 것은
                 알 필요가 없다. 머리만 아프다.
추상자료형(Abstract Data Type)

     Dragon.h



                만약 Fly()을 사용해봤는데 드래곤
                이 날지 않는다면?

                A를 만나 질책하면 된다.

                즉, 구현 방법에 대해서는 내가 신경
                쓸 필요가 없다.
추상자료형(Abstract Data Type)


즉, 사용자에게 클래스의 용도만 알게 하고,
방법은 숨기는 것. 이를 정보 은닉이라 한
            다.
추상자료형(Abstract Data Type)
요약하면,

추상자료형이란 사물이나 현상을 데이터적
인 측면과 기능적인 측면으로 나누어 표현한
것이다.

그리고 그 장점은 크게,
1.분업가능, 2.정보은닉 으로 볼 수 있다.
추상자료형(Abstract Data Type)



      마지막으로 Quiz :
    코끼리를 냉장고에 넣는 법?
추상자료형(Abstract Data Type)




     정답 : 조교에게 시킨다.
추상자료형(Abstract Data Type)
조교는 코끼리를 구워서 넣든 삶아서 넣든,
교수느님께서 시키니까 어떻게든 해야한다.

교수님은 조교가 코끼리를 어떻게 넣든 신경
쓸 필요가 없다. 조교가 할 일이다.

다시 한번 말하지만, 추상 자료형에서 구현은
중요하지 않다.
추상자료형(Abstract Data Type)
하지만 여러분께선 이번 수업에서,
추상자료형을 선언 뿐만 아니라 구현도 해야
한다.

왜냐면 교수님이 시키니까
참고
• http://www.hanb.co.kr/network/view.html?b
  i_id=982

Más contenido relacionado

La actualidad más candente

[강의] OOP 개요
[강의] OOP 개요[강의] OOP 개요
[강의] OOP 개요Nohyun Kee
 
외계어 스터디 3/5 function and object
외계어 스터디 3/5   function and object외계어 스터디 3/5   function and object
외계어 스터디 3/5 function and object민태 김
 
자료구조 트리 보고서
자료구조 트리 보고서자료구조 트리 보고서
자료구조 트리 보고서mil23
 
주니어 개발자도 이해 할 수 있는 Go - Scope 편
주니어 개발자도 이해 할 수 있는 Go - Scope 편주니어 개발자도 이해 할 수 있는 Go - Scope 편
주니어 개발자도 이해 할 수 있는 Go - Scope 편Darion Kim
 
2012 Ds B1 01
2012 Ds B1 012012 Ds B1 01
2012 Ds B1 01seonhyung
 
Ds4 artist week_12
Ds4 artist week_12Ds4 artist week_12
Ds4 artist week_12SeungBum Kim
 
포인터의 기초(1)
포인터의 기초(1)포인터의 기초(1)
포인터의 기초(1)Hoyoung Jung
 

La actualidad más candente (10)

[강의] OOP 개요
[강의] OOP 개요[강의] OOP 개요
[강의] OOP 개요
 
Java 다형성
Java 다형성Java 다형성
Java 다형성
 
외계어 스터디 3/5 function and object
외계어 스터디 3/5   function and object외계어 스터디 3/5   function and object
외계어 스터디 3/5 function and object
 
자료구조 트리 보고서
자료구조 트리 보고서자료구조 트리 보고서
자료구조 트리 보고서
 
주니어 개발자도 이해 할 수 있는 Go - Scope 편
주니어 개발자도 이해 할 수 있는 Go - Scope 편주니어 개발자도 이해 할 수 있는 Go - Scope 편
주니어 개발자도 이해 할 수 있는 Go - Scope 편
 
2012 Ds B1 01
2012 Ds B1 012012 Ds B1 01
2012 Ds B1 01
 
Ds4 artist week_12
Ds4 artist week_12Ds4 artist week_12
Ds4 artist week_12
 
포인터의 기초(1)
포인터의 기초(1)포인터의 기초(1)
포인터의 기초(1)
 
Study1
Study1Study1
Study1
 
3.포인터
3.포인터3.포인터
3.포인터
 

Destacado (20)

1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)
 
Data Structure 3
Data Structure 3Data Structure 3
Data Structure 3
 
Data Structure 1
Data Structure 1Data Structure 1
Data Structure 1
 
Istanbul report
Istanbul reportIstanbul report
Istanbul report
 
Presentasi bab 6
Presentasi bab 6Presentasi bab 6
Presentasi bab 6
 
Métodos de investigación
Métodos de investigaciónMétodos de investigación
Métodos de investigación
 
The Retargeting Series: Foundational 3-Audience Retargeting
The Retargeting Series: Foundational 3-Audience RetargetingThe Retargeting Series: Foundational 3-Audience Retargeting
The Retargeting Series: Foundational 3-Audience Retargeting
 
Bon jovi
Bon joviBon jovi
Bon jovi
 
Presentasi bab 4
Presentasi bab 4Presentasi bab 4
Presentasi bab 4
 
Trabajo i natali cardenas ramos
Trabajo i natali cardenas ramosTrabajo i natali cardenas ramos
Trabajo i natali cardenas ramos
 
Presentasi bab 10
Presentasi bab 10Presentasi bab 10
Presentasi bab 10
 
Top anticipated luxury hotels for 2014
Top anticipated luxury hotels for 2014Top anticipated luxury hotels for 2014
Top anticipated luxury hotels for 2014
 
Presentasi bab 11
Presentasi bab 11Presentasi bab 11
Presentasi bab 11
 
Trabajo ii natali cardenas ramos
Trabajo ii natali cardenas ramosTrabajo ii natali cardenas ramos
Trabajo ii natali cardenas ramos
 
Global trends april 2013 cavusgil
Global trends april 2013 cavusgilGlobal trends april 2013 cavusgil
Global trends april 2013 cavusgil
 
Presentasi bab 7
Presentasi bab 7Presentasi bab 7
Presentasi bab 7
 
Presentasi bab 9
Presentasi bab 9Presentasi bab 9
Presentasi bab 9
 
Presentasi bab 12
Presentasi bab 12Presentasi bab 12
Presentasi bab 12
 
Proto nest concept
Proto nest conceptProto nest concept
Proto nest concept
 
4박5일(20130405)
4박5일(20130405)4박5일(20130405)
4박5일(20130405)
 

Similar a 튜터링자료 1.adt

자료구조 04 최종 보고서
자료구조 04 최종 보고서자료구조 04 최종 보고서
자료구조 04 최종 보고서pkok15
 
Java programming pdf
Java programming pdfJava programming pdf
Java programming pdfJi Hoon Lee
 
학교에서 배우지 않는 C
학교에서 배우지 않는 C학교에서 배우지 않는 C
학교에서 배우지 않는 CHeesuk Kang
 
객체지향 정리. Part1
객체지향 정리. Part1객체지향 정리. Part1
객체지향 정리. Part1kim HYUNG JIN
 

Similar a 튜터링자료 1.adt (6)

2012 Ds 04
2012 Ds 042012 Ds 04
2012 Ds 04
 
자료구조 04 최종 보고서
자료구조 04 최종 보고서자료구조 04 최종 보고서
자료구조 04 최종 보고서
 
Java programming pdf
Java programming pdfJava programming pdf
Java programming pdf
 
학교에서 배우지 않는 C
학교에서 배우지 않는 C학교에서 배우지 않는 C
학교에서 배우지 않는 C
 
C++11
C++11C++11
C++11
 
객체지향 정리. Part1
객체지향 정리. Part1객체지향 정리. Part1
객체지향 정리. Part1
 

튜터링자료 1.adt

  • 1. 글로벌 미디어학부 자료구조 튜터링 2013.04.06 전익범
  • 2. Introduce • 본 자료는 숭실대 글로벌미디어학부의 자 료구조 과목 (David Jean 교수님) 튜터링을 위해 제작되엇어요. • 본 자료는 자잘한 것 까지 구체적 설명을 하 지 않으며, 핵심적인 부분을 이해하기 위한 보조자료로 사용 해주길 바람..
  • 3. 자료구조란? • 데이터를 효율적으로 표현하고, 저장하기 위해, 구조화하는 것. • Ex) vs 급하게 외출 할 일이 생겨 코디를 한다고 할 때 어느 편이 더 편할까? 당연히 후자. 옷들이 필요에 맞게 구조화 되어 있기 때문.
  • 4. 자료구조란? • 여러분들은 이미 자료구조의 유용성에 대해 알고 있습니다. 대표적인 자료구조 1. 배열 int v int val[100] val1, val2, val3, val4, v s al5…. val100; 관련된 데이터를 다 따로따로 선언하는 것보다, 배열로 한꺼번에 묶 어 인덱스로 관리하는 것이 편하다.
  • 5. 자료구조란? • 여러분들은 이미 자료구조의 유용성에 대해 알고 있습니다. 대표적인 자료구조 2. 클래스(구조체) class Point { int x, y; //위치 int color; //색상 int main(void) int size; //크기 } { int x, y; // 점의 위치 v int main() int color; //점의 색상 s { int size; //점의 크기 Point p1; … … } } 마찬가지로 관련 있는 데이터는 클래스로 묶어 관리하는 것이 편 하다.
  • 6. 자료구조란? • 이처럼 자료가 얼마나 잘 구조화 되어 있느 냐에 따라 프로그램의 속도, 개발 시간, 유 지 보수의 비용이 달라집니다. • 자료구조 과목에서는 Data를 잘 구조화하 기 위한 여러가지 방법에 대해 다룹니다.
  • 7. 추상자료형(Abstract Data Type) • 정의 : 추상적으로 정의된 자료형 • 자료형(Type)이란? – int, double, float, char 을 말함. • 그럼 추상자료형(ADT)이란? – int, double, flaot, char 말고도, 내가 필요한 자 료형을 추상적으로 표현한 것.
  • 8. 추상자료형(Abstract Data Type) • 예를 들어 보아요. • int a; // 여기엔 4byte 정수가 저장될 것임. • double b; // 여기엔 8바이트 실수가 저장될 것임. • char c; //여기엔 1바이트 문자 하나가 저장될 것임. • Dragon d; //여기엔 드래곤이 저장된다. //하지만 c언어에는 Dragon이란 자료형이 없다. 하지만 내가 만들면 된다. 어떻게?
  • 9. 추상자료형(Abstract Data Type) • Dragon 자료형을 만들기 위해. • 먼저 Dragon을 추상화 해야한다. 이를 데이터 추상화라 한다. Dragon을 추상화해보자. 위치(x,y,z), 색깔(빨갛다, 노랗다..등등), 크기(몇 미터..)머리갯수(한 개, 두 개), 다리 갯수, 난다, 걷는다. 불을 뿜는다. • 이렇게 내가 Dragon을 정의하는데 있어 필요 한 것들을 생각나는 대로 적어보면, 어쩔 수 없이 Dragon은 추상화된다.
  • 10. 추상자료형(Abstract Data Type) • 이 중, 데이터적인 것과 기능적인 것을 나눠 보자. • 데이터적인 것 : 위치, 색깔, 크기, 머리 개 수, 다리 개수 • 기능적인 것 : 난다, 걷는다, 불을 뿜는다.
  • 11. 추상자료형(Abstract Data Type) 즉 ,데이터를 추상화 하라는 말은 아래와 같이 사물의 데이터적인 측면과 기능적인 측면을 기 술하라는 것이다. class Dragon { private: double x, y, z; //위치 int color; float size; //색상 //크기 데이터 int numHead; //머리 갯수 int numLeg; //다리 갯수 public: void Fly(); //난다 void Walk(); //걷는다 기능 void Fire(); //불뿜는다. };
  • 12. 추상자료형(Abstract Data Type) 데이터 적인 것은 private에 쓰고, 이를 멤버 변수라한다. 기능적인 것은 public에 쓰고, 멤버 함수라 한다. class Dragon { private: double x, y, z; //위치 int color; //색상 멤버 변수 float size; //크기 int numHead; //머리 갯수 int numLeg; //다리 갯수 public: void Fly(); //난다 멤버 함수 void Walk(); //걷는다 void Fire(); //불뿜는다. };
  • 13. 추상자료형(Abstract Data Type) 이제 Dragon 자료형이 선언되었으므로, 우리는 그 정의에 맞게 하나 하나 구현만하면된다. 하나만 예를 들어 보면 아래와 같다. ex) void Dragon::Walk() { x+=10; //x축으로 10만큼 이동 }
  • 14. 추상자료형(Abstract Data Type) • 하지만 추상 자료형을 정의하는데 있어, 구 현에 대해서는 신경쓸 필요가 없다. class Dragon { private: double x, y, z; //위치 int color; //색상 float size; //크기 int numHead; //머리 갯수 int numLeg; //다리 갯수 public: void Fly(); //난다 void Walk(); //걷는다 void Fire(); //불뿜는다. }; 즉 여기까지 작성(선언)이 완료됐으면, Dragon의 추상화는 끝난 것이다.
  • 15. 추상자료형(Abstract Data Type) 그럼 구현은 누가하느냐?
  • 16. 추상자료형(Abstract Data Type) 정답 : 아랫사람 시키면 된다.
  • 17. 추상자료형(Abstract Data Type) 즉, 내가 필요한 데이터와, 기능만 선언하면 그 구현은 다른 사람이 알아서 어떻게든 하면 된다는 의미이다. 즉, 일의 분업이 가능하다.
  • 18. 추상자료형(Abstract Data Type) 즉 내가 甲이라면, 丁들에게 이러한 명령이 가능하다. class Dragon { private: double x, y, z; //위치 int color; //색상 float size; //크기 int numHead; //머리 갯수 int numLeg; //다리 갯수 “이건 A가 만들어와” public: void Fly(); //난다 void Walk(); //걷는다 “이건 B가 만들어와” void Fire(); //불뿜는다. }; “이건 C가 만들어와” 즉즉, 추상 자료형은 우리 모두가 무엇을 만들 지에 대한 설계 지도 같은 것 이라고 보면 된다.
  • 19. 추상자료형(Abstract Data Type) 이렇게 추상자료형이 구현까지 완료되었다면, Dragon을 int, double처럼 사용할 수 있다. #include “Dragon.h” int main(void) { Dragon d; //드래곤 생성 d.walk() //드래곤이 걷는다. d.fly(); //드래곤이 난다. }
  • 20. 추상자료형(Abstract Data Type) 추상자료형의 또다른 목적은 정보은닉을 위해서다. Dragon.h 만약 위에서 언급한 A, B C들이 각 함수들을 다 구현해왔다고 하자. (주로 추상자료형 선언은 .h파일에하고 구현은 .cpp파일에 한다.) Dragon.cpp
  • 21. 추상자료형(Abstract Data Type) Dragon.h 사용자인 나는 Dragon.h에 있는 함수명과 주 석만 보고, 내가 필요한 기능을 가져다 쓰면 된다. Dragon.cpp Dragon.cpp에 있는 구현 방법에 대한 것은 알 필요가 없다. 머리만 아프다.
  • 22. 추상자료형(Abstract Data Type) Dragon.h 만약 Fly()을 사용해봤는데 드래곤 이 날지 않는다면? A를 만나 질책하면 된다. 즉, 구현 방법에 대해서는 내가 신경 쓸 필요가 없다.
  • 23. 추상자료형(Abstract Data Type) 즉, 사용자에게 클래스의 용도만 알게 하고, 방법은 숨기는 것. 이를 정보 은닉이라 한 다.
  • 24. 추상자료형(Abstract Data Type) 요약하면, 추상자료형이란 사물이나 현상을 데이터적 인 측면과 기능적인 측면으로 나누어 표현한 것이다. 그리고 그 장점은 크게, 1.분업가능, 2.정보은닉 으로 볼 수 있다.
  • 25. 추상자료형(Abstract Data Type) 마지막으로 Quiz : 코끼리를 냉장고에 넣는 법?
  • 26. 추상자료형(Abstract Data Type) 정답 : 조교에게 시킨다.
  • 27. 추상자료형(Abstract Data Type) 조교는 코끼리를 구워서 넣든 삶아서 넣든, 교수느님께서 시키니까 어떻게든 해야한다. 교수님은 조교가 코끼리를 어떻게 넣든 신경 쓸 필요가 없다. 조교가 할 일이다. 다시 한번 말하지만, 추상 자료형에서 구현은 중요하지 않다.
  • 28. 추상자료형(Abstract Data Type) 하지만 여러분께선 이번 수업에서, 추상자료형을 선언 뿐만 아니라 구현도 해야 한다. 왜냐면 교수님이 시키니까