![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cVkMoz/btsEGSIzhvb/B4CQ1PfQspSloya3XXT2W1/img.png)
스택 영역 메모리의 스택 영역은 함수의 호출과 관계되는 지역 변수 및 매개변수가 저장되는 영역이다. 스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다. 스택 프레임 (Stack Frame) 함수가 호출될 때 스택에는 함수의 매개변수, 함수 호출이 끝난 뒤 돌아갈 반환 주소값, 함수 내부 지역 변수가 저장된다. 이렇게 스택 영역에 차례대로 저장되는 함수의 호출 정보를 스택 프레임(Stack Frame)이라고 한다. 이러한 스택 프레임을 통해 함수의 호출이 모두 끝난 뒤에, 해당 함수가 호출되기 이전 상태로 되돌아갈 수 있다. 스택 프레임의 동작 방식 int main(void) { func1(); // func1() 호출 return 0; } void func1() { func2()..
레지스터(Register) : 특정한 목적으로 외부 정보를 일시적으로 기억하는 장치. 데이터를 읽고 쓰는 기능이 매우 빠르며, 중앙 처리 장치(CPU) 안에 사용된다. 1. 프로그램 카운터 (PC, Program Counter) : 프로그램 카운터 또는 명령어 포인터(IP, Instruction Pointer)는 메모리에서 가져올 명령어의 주소, 즉 메모리에서 읽어드릴 명령어의 주소를 저장한다. 2. 명령어 레지스터 (IR, Instruction Register) : 메모리에서 읽어 드린 해설할 명령어를 저장하는 레지스터이다. 3. 메모리 주소 레지스터 (MAR, Memory Address Register) : 메모리의 주소를 저장하는 레지스터이다. CPU가 읽어들이고자 하는 주소 값을 주소 버스로 보낼..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cr4uli/btsEEJ0qDEA/74Aif4H6QoUysT36lSmGMK/img.jpg)
스택(Stack)이란? 쌓아놓은 더미라는 뜻. 데이터를 바닥에서부터 쌓아 올리는 구조. 스택에서 데이터 입/출력은 오로지 스택의 꼭대기에서만 이루어진다. 스택의 맨 아래에 있는 데이터를 꺼내려면 그 위에 있는 데이터를 모두 걷어내야 한다. 이처럼 스택은 가장 마지막에 들어간 데이터가 제일 먼저 나오는 LIFO(Last In - First Out : 후입선출) 형태를 띤다. 요소의 삽입과 삭제가 한쪽 끝에서만 이루어지는 것이 스택의 특징이다. 스택의 연산은 Push, Pop이 있다. Push 함수는 스택에 데이터를 추가한다. // 삽입 void push(StackType *S, element e) { if (is_full(S)) printf("Overflow\n"); else { S->top++;// to..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/b7Y8X4/btsEE3X007N/vgqKAEvOAqYkrOCUk3rbIK/img.png)
예외(exception)란 코드를 실행하는 중에 발생한 에러를 뜻한다. 다음과 같이 10을 어떤 값으로 나누는 함수 ten_div가 있을 때 인수에 따라 정상으로 동작하기도 하고 에러가 나기도 한다. >>> def ten_div(x): ... return 10 / x ... 이 함수에 2를 넣으면 5.0이 나온다. 하지만 0을 넣으면 실행하는 중에 에러가 발생한다. 이런 상황을 예외라고 하는데 여기서는 어떤 숫자를 0으로 나누어서 ZeroDivisionError 예외가 발생했다. ZeroDivisionError뿐만 아니라 지금까지 만난 AttributeError, NameError, TypeError 등 다양한 에러들도 모두 예외이다. try except로 사용하기 예외 처리를 하려면 다음과 같이 try..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/OPloS/btsEFOF3hqI/nDwsKxOELU6JgpoDAftWA1/img.png)
클래스 상속 사용하기 상속은 무언가를 물려받는다는 뜻이다. 그래서 클래스 상속은 물려받은 기능을 유지한채로 다른 기능을 추가할 때 사용하는 기능이다. 여기서 기능을 물려주는 클래스를 기반 클래스(base class), 상속을 받아 새롭게 만드는 클래스를 파생 클래스(derived class)라고 한다. 보통 기반 클래스는 부모 클래스(parent class), 슈퍼 클래스(superclass)라고 부르고, 파생 클래스는 자식 클래스(child class), 서브 클래스(subclass)라고도 부른다. 클래스 상속은 생물 분류를 떠올리면 이해하기 쉽다. 예를 들어 조류, 어류는 공통된 조상인 척추동물로부터 물려받은 특성을 공유하면서 각자 고유한 특성을 가진다. 척추를 가졌다는 특성은 변함이 없지만 날개를 ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bfllev/btsEFOlKrzJ/w9YdYPZUVGBzgINgV9tdu1/img.png)
속성에는 클래스 속성과 인스턴스 속성 두 가지 종류가 있다. __init__ 메서드에서 만들었던 속성은 인스턴스 속성이다. 클래스 속성 사용하기 class 클래스이름: 속성 = 값 class Person: bag = [] def put_bag(self, stuff): self.bag.append(stuff) james = Person() james.put_bag('책') maria = Person() maria.put_bag('열쇠') print(james.bag) print(maria.bag) 실행결과 ['책', '열쇠'] ['책', '열쇠'] james와 maria 인스턴스를 만들고 각자 put_bag 메서드로 물건을 넣었는데, james.bag과 maria.bag을 출력해보면 넣었던 물건이 합쳐져서..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/KOs1a/btsEFPyawaQ/AOqzpSnpxMjnBob2drvHkk/img.png)
클래스 사용하기 클래스는 객체를 표현하기 위한 문법이다. 프로그래밍에서는 현실 세계에 있는 개념들뿐만 아니라 컴퓨터 안에서만 쓰이는 개념들도 클래스로 만들어서 표현한다. 특정한 개념이나 모양으로 존재하는 것을 객체(object)라고 부른다. 그리고 프로그래밍으로 객체를 만들 때 사용하는 것이 클래스이다. 데이터를 클래스의 속성(attribute)이라 부르고, 기능을 메서드(method)라고 부른다. 이러한 프로그래밍 방법을 객체지향(object oriented) 프로그래밍이라고 한다. 객체지향 프로그래밍은 복잡한 문제를 잘게 나누어 객체로 만들고, 객체를 조합해서 문제를 해결한다. 따라서 현실 세계의 복잡한 문제를 처리하는데 유용하며 기능을 개선하고 발전시킬 때도 해당 클래스만 수정하면 되므로 유지 보..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/9mcEw/btsEGjMqTwg/zpQx3T9Q72R16H1hdD2Vw0/img.png)
람다 표현식 람다 표현식은 식 형태로 되어 있다고 해서 람다 표현식 (lambda expression)이라고 부른다. 특히 람다 표현식은 함수를 간편하게 작성할 수 있어서 다른 함수의 인수로 넣을 때 주로 사용한다. 람다 표현식으로 함수 만들기 >>> def plus_ten(x): ... return x + 10 ... >>> plus_ten(1) 11 숫자를 받은 뒤 10을 더해서 반환하는 함수 return x + 10으로 매개변수 x에 10을 더한 값을 반환하는 간단한 함수이다. 람다 표현식은 다음과 같이 lambda에 매개변수를 지정하고 : (콜론) 뒤에 반환값으로 사용할 식을 지정한다. lambda 매개변수들: 식 >>> lambda x: x + 10 실행해보면 함수 객체가 나오는데, 이 상태로는..