자료구조: 기본개념(Part 1)

김동현·2023년 3월 14일
0

자료구조

목록 보기
1/2
post-thumbnail

1. 주석

입력에 무엇이 들어가고 출력에 무엇이 들어가는지..

Celsius To Fahremheit → public static double Celsius To Fahremheit (double c)
  • 입력과 출력에 관한 명시가 들어간다.
  • 조건은 뭐가 있는지?
  • 오류에는 뭐가 나오는지?

2. 정제와 코딩

ADT 선언: 실제로 어떻게 표현할 지에 관한 선택을 하는 단계

[자료구조] 추상 자료형(Abstract Data Type, ADT)이란? (feat. 스택 & 큐)

ex) 학생에 관한 정보를 입력한다고 할 때,

학생에 관한 정보를 어떻게 할건지.

  • 나이에 관한 정보 → 어떻게 표현할래? : 에 관한 정보를 담는 단계

3. 검증

  • 얼마나 효율적으로 프로그램이 돌아가는지 검증.

  • 독립적인 단위로 테스트하고 전체 시스템으로 통합

  • 과거에는 10,000줄 이상의 코드가 많았기에 이를 검증하는 것의 중요성이 컸음

    • → 이를 어떻게 해결할지가 중요 → 객체지향설계가 이를 해결하게 됨
  • C언어와의 유사점: 작은 단위로 검증한다는 점에서 비슷함

    • 구구단에서 1부터 9까지 검증하는 것이 해당 (알고리즘적 분해)
  • C언어와의 차이점: ↔ 객체지향적 분해

    • 객체지향적 분해의 장점
      • 1) 재사용이 용이하다.
      • 2) 직관적이다.
  • 객체란 무엇인가?

    • 계산을 수행하는 부분 + 상태를 나타내는 부분
    • ex) 도서관 대출 시스템
      • 책이 갖는 정보 : 저자, 출판사
      • 책을 빌리는 사람

4. 클래스


                                        객체 지향적 설계             ↔              절차 지향적 설계

동물이 한 종류인 경우에는 문제가 되지 않지만, 동물의 종류가 늘어나는 경우 절차 지향적 설계에서는

추가해야할 함수가 많아진다. 각각의 구조체에 접근해서 하나하나 추가해야 한다는 불편함이 존재.

  • **Instance:** 인스턴스란?
    • 일반 오리라는 범주 안에, 오리A, 오리B, 오리C 각각의 대상이 **Instance:** 인스턴스이다.

[Java] 클래스, 객체, 인스턴스의 차이 - Heee's Development Blog

  • 객체지향 프로그래밍의 장점
    • 소프트웨어의 재사용성이 편리해진다.
    • 변화하는 유연한 소프트웨어 시스템에 대응하기 좋다.

다르게 동작하는 부분에 한해서 다른 값을 입력할 수 있다.

RubberDuck:Duck → 러버덕이 덕을 상속한 경우

  • 일반적으로는 모든 것을 상속한다. (상속받지 않는 경우 //don’t 를 입력하면 된다.)

5. 디자인 패턴

특정 상황에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책을 모은 것이다.

6. C언어의 장점

                                             C언어                     ↔                        어셈블리어      
  • 어셈블리어와 비교했을 때, 직관적인 코드라는 특징이 있다.

7. ADT란?

캡슐화 & 추상화

  • 데이터 캡슐화

           → 외부로부터 데이터 객체의 자세한 구현을 은닉
    
           한 쪽에 정보를 몰아두고, 밖에서는 해당 정보에 접근을 어렵게 함.
    
          의존성을 줄이기 위해서! 만든것이 데이터 캡슐화이다.
  • 데이터 추상화

          → 객체의 명세와 구현을 분리
    
            무엇(What)과 어떻게(How)를 명확하게 구분
    
            ex) 대출을 해줍니다! 만 말하고, 재학생인지, 대출권수가 몇권인지 체크하는건 뒤에서.

data type: 객체와 연산에 대한 명세가 적혀있다. → public 어쩌구 저쩌구 부분

abstract: 분리가 되어있음을 알 수 있다. → {…} 부분

  • 데이터 추상화와 데이터 캡슐화의 장점
    • 복잡한 작업들을 부분작업 단위로 작게 분해할 수 있다.
    • 각 단위로 작업을 해두었기에, (하나의 class로 묶어둔 것) 각각의 테스팅과 디버깅 작업이 쉽다.
    • 재사용성을 확보할 수 있다. ex) 만들어둔 하나의 대상을 여기저기에서 사용할 수 있다.
    • 데이터 타입의 표현을 수정하는데 쉽다. ex) 내부 구현에 직접 접근하는 연산들만 수정할 수 있다.

  • A B C 를 연결하는 접착부분에 해당하는 흰색 부분만 버그검사를 하면 되기에 반드시 캡슐화를 해야한다!
💡 **요구사항 → 분석 → 설계 → 정제와 코딩 → 검증**

8. C++ 프로그램의 구성

  • 헤더(header)파일

    • .h 또는 .hpp 확장자
    • 선언 저장에 사용
    • 시스템.사용자 정의 파일
    • 전처리기 명령 #include를 사용하여 파일에 포함시킴
  • 소스(source)파일

    • .cpp 또는 .cc 또는 .c 확장자
    • 소스 코드 저장에 사용 → 소스코드 단위로 수정한 부분만 컴파일할 수 있음.
  • .h라는 헤더파일에 .c 라는 소스코드 파일을 저장해두면 나중에 쉽게 편집할 수 있다.

💡 **컴파일 → 링크 → 적제**

(컴파일 → 링크에 해당하는 부분이다)

profile
디자인과 개발을 모두 할줄 아는 능력있는 개발자가 되고싶습니다.

0개의 댓글