Ch. 01 프로그래밍 기초

raincoat03·2020년 6월 17일
0
post-thumbnail

1.1 변수(Variables)

값(Data)을 저장하기 위해 사용되는 공간을 명명한 것으로, 변수에 특정값을 할당하면 변수는 해당 값이 위치한 메모리를 주소를 가리킨다.

파이썬에서는 숫자, 문자열, 리스트 등을 변수에 할당할 수 있다. 'a = 20'의 형태로 쓰며 좌측의 변수명 a에 20을 할당한다는 의미를 갖는다.

변수명은 아래와 같은 규칙을 지키면서 만들어야 한다.

1. 영문 문자와 숫자를 사용할 수 있습니다.
2. 대소문자를 구분합니다.
3. 문자부터 시작해야 하며 숫자부터 시작하면 안 됩니다.
4. _(밑줄 문자)로 시작할 수 있습니다.
5. 특수 문자(+, -, *, /, $, @, &, % 등)는 사용할 수 없습니다.
6. 파이썬의 키워드(if, for, while, and, or 등)는 사용할 수 없습니다.

1.2 자료형(Data Types)

프로그래밍 언어에서 자료형은 미리 특징지어진 값들을 가지는 데이터들의 집합이다. 예를 들면, integer(정수), floating point unit number(부동소수점 수), character(문자), string(문자열) 등이 있다.

Python의 Built-in Data Types는 아래와 같다. 그 외의 모듈은 여기 참조.

  • Text Type : str
  • Numeric Types : int, float, complex
  • Sequence Types : list, tuple, range
  • Mapping Type : dict
  • Set Types : set, frozenset
  • Boolean Type : bool
  • Binary Types : bytes, bytearray, memoryview

자료형을 알아보고 싶은 경우, type() 함수를 이용하면 된다.

기본적으로 자료형에는 두 가지 유형이 있다. 첫째는 시스템 정의 자료형(원시 자료형 : Primitive data types)과 사용자 정의 자료형이다.

  1. 시스템 정의 자료형(Primitive data types)
    시스템에 의해 정의된 자료형이 원시 자료형이다. 언어마다 제공하는 원시 자료형이 다른데, 파이썬의 경우 Integers, Strings, Boolean, Float 등이 있다. 각각의 원시 자료형에 할당되는 바이트 수는 프로그래밍 언어와 컴파일러, 그리고 운영체제에 달려 있다.

  2. 사용자 정의 자료형(User defined data types)
    시스템 정의 자료형이 충분하지 않을 수 있으므로 대부분의 프로그래밍 언어들이 자신들만의 자료형을 선언할 수 있도록 하고 있다.

1.3 자료 구조(Data Structure)

일단 변수에 대입할 데이터를 가졌다면 데이터를 조작할 메커니즘이 필요하다. 자료 구조는 컴퓨터 내에서 유용하게 사용되도록 데이터를 저장하고 구조화하는 특정한 방법을 말한다. 즉, 자료 구조는 데이터르 저장하고 구조화하는 특별한 형태이다. 자료 구조의 유형은 배열, 연결 리스트, 스택, 큐, 트리, 그래프 등이 있다. 자료 구조는 구성요소들을 어떻게 구조화하였는가에 따라 두 가지 유형으로 분류된다.

  1. 선형 자료 구조(Linear data structures) : 선형 자료 구조의 구성 요소들은 순차적으로 접근되지만, 모든 요소들이 반드시 순차적으로 저장되지는 않는다(Linked Lists).

  2. 비선형 자료 구조(Non-linear data structures) : 자료 구조의 구성 요소들이 비순차적인 순서로 저장되고 접근된다.

1.4 추상 자료형(Abstract Data Types - ADTs)

기본적으로 모든 원시 자료형은 사칙연산과 같은 기본적인 연산을 제공한다. 사용자 정의 자료형도 기본적인 연산을 정의해야 하고 이러한 연산에 대한 수행은 실제 우리가 필요할 때 사용하게 된다. 즉, 일반적인 사용자 정의 자료형들은 그들의 연산자들과 함께 정의된다는 것을 의미한다. 일반적으로 자료구조와 연산을 결합하여 추상 자료형이라고 부른다. 추상 자료형은 데이터 선언과 연산자 선언 두 부분으로 구성된다. 일반적으로 사용되는 추상 자료형은 연결 리스트, 큐, 스택, 이진 트리 등이 있다.

1.5 메모리와 변수(Momry and Variables)

메모리 각각의 위치는 주소로 식별된다. 보통 0번 주소는 유효한 메모리 주소가 아니다. 모든 바이트를 가리키는 주소는 interger다. 어떤 이치를 읽거나 쓰기 위해 CPU는 메모리 제어가(memory controller)에 그 위치를 전달하여 접근한다.

  • Size of a Variables : Sizeof 연산자(Python에서는 getsizeof 연산자가 있다)는 변수의 크기-변수가 얼마나 메모리를 차지하고 있는가-를 알아내는데 사용된다.
  • Address of a Variables : 참조 연산자(Python에서는 id())를 사용하여 변수의 주소를 얻을 수 있다.

1.6 포인터(Pointers)

포인터는 다른 변수의 주소를 보관할 수 있는 변수다. Python에서는 일반적으로 사용하지 않는다(구현해서 쓰시는 분들은 계신듯).

1.7 파라미터 전달 기법(Parameter Passing Techniques)

  • 실제 변수와 형식 변수(Actual and Formal Parameters) : 함수 B()가 다른 함수 A()에 의해 호출된다고 가정해보자. 이 경우, A는 호출자 함수(caller func.), 그리고 호출된 B는 피호출 혹은 피호출자 함수(callee func.)라 부른다. 또한 A가 B에 보내는 인자를 실제 매개 변수(actual argument)라 하며, B함수의 파라미터는 형식 매개 변수(formal argument)라 한다.
  • 추후 추가

1.8 바인딩(Binding)

  • 바인딩 시점
    • 언어 설계 시 : 연산자와 연산의 바인딩(ex. 산술 연산자 "+" 기호와 더하기 연산)

    • 언어 구현 시 : 데이터 유형과 데이터 유형이 가질 수 있는 값의 바인딩

    • 프로그램 작성 시 : 알고리즘, 데이터 구조, 모듈 이름에 대한 바인딩

    • 컴파일 시 : 변수와 데이터 유형을 바인딩(대부분 바인딩 여기서 일어남)

    • 링크 시 : 메모리 내의 프로그램 전체 레이아웃(개별 모듈(라이브러리))을 확정

    • 로드 시 : 물리적 주소 선택(C언어에서 정적 변수는 로드할 때 메모리 셀에 바인딩)

    • 실행 시 : 변수에 메모리에 위치한 값을 바인딩

      ▶ 위로 갈수록 정적, 아래로 갈수록 동적 바인딩이다.

  • 정적 바인딩(Static Binding - Early binding) : 정적 바인딩은 프로그램 실행 이전에 이루어지며 실행 중에 변경되지 않는다. 이를 종종 "Early binding"이라고 부른다.
  • 동적 바인딩(Dynamic Binding - Late binding) : 동적 바인딩은 프로그램이 실행되는 동안 발생하거나 변경되며, 이를 종종 "Late binding"라고 부른다(Python).

1.9 스코프(Scope)

1.10 기억 영역 분류(Storage Classes)

1.11 기억 영역의 구성(Storage Organization)

1.12 프로그래밍 테크닉

1.13 프로그래밍 기초 문제

참고 : 코딩인터뷰 퀘스천, 파이썬 공식문서 , 점프 투 파이썬, 코딩 도장, w3school

profile
https://github.com/raincoat03

0개의 댓글