목록언어/C, C++ (22)
개발하는 리프터 꽃게맨입니다.
static 키워드 static이 앞에 붙는 변수나 함수는 어떤 객체에 소속되어 있는 것이 아니라 프로그램이 시작되면 독립적인 메모리를 차지한다는 특징이 있습니다. static 키워드는 변수, 클래스의 멤버 변수, 클래스의 멤버 함수에 붙일 수 있으며 저는 '접근이 제한적인 전역 변수'라고 부릅니다. 실제로 전역 변수와 메모리를 차지하는 형태가 비슷합니다. 메모리에는 코드, 데이터, 힙, 스택 총 4개의 영역이 존재하는데요 static 변수, 함수와 전역 변수는 동일하게 데이터 영역에 할당됩니다. 그런데 전역 변수와 다른 점은 전역 변수는 어디에서나 접근이 가능하다는 특징이 있지만 static 키워드가 붙은 변수나 함수는 '제한된 범위'에서만 접근이 가능합니다. 하나의 블럭, 하나의 네임스페이스, 하나의..
함수 호출의 단계 함수를 정의하고 컴파일하면, 함수는 기본적으로 메모리의 '코드 섹션'에 저장되고 알맞은 고유의 주소를 가집니다. 그리고 함수 호출 시에는 스택에 함수의 주소를 올려 함수의 본체(body)를 찾아 실행하는 단계를 거치게 되죠. 함수 정의와 함수 호출에는 생각보다 오버헤드가 조금 있습니다. 1) 함수를 사용하기 위해 기존 레지스터에 들어있던 값을 스택에 푸시 2) 현재 PC(Program Counter) 값을 스택에 푸시 3) 함수 주소로 PC값을 변경하여 점프 4) 함수 실행 5) 기존 PC값과 레지스터 값을 스택에서 팝 하여 복구 이런 단계 때문에 함수 호출은 기본적으로 코드를 쌩으로 사용하는 것보다는 속도가 느리다는 단점이 있습니다. 그래서 '재귀'라는 알고리즘 메커니즘이 속도가 느리..
캐스팅 이란? 캐스팅은 쉽게 말해서 형 변환입니다. 기본 데이터 타입 int, char, short, float 등.. 데이터를 담는 그릇을 바꿔준다고 보시면 되겠습니다. 다음 예시를 보겠습니다. 이런 식으로 바꿔주고 싶은 데이터형을 앞에 명시해 준다면, 자동적으로 적당한 데이터로 컴파일러가 데이터 형을 변환합니다. 위 예시는 'C언어 스타일 캐스팅' 방법입니다. C 스타일 캐스팅 C 언어에서는 하나의 캐스팅밖에 존재하지 않았습니다. 이 예시들을 보면 알 수 있듯 그냥 간편하게 괄호 안에 데이터형을 명시해 주면 강제로 캐스팅해 줍니다. 강제로 캐스팅해 준다. 이거 참 무섭지 않나요? 런타임에서 충분히 오류가 발생할 수 있는 코드도 컴파일에서 통과시켜 준다는 것입니다. 1) float에서 int로 바꾸는 ..
다형성이란 무엇인가? 다형성은 '하나의 함수가 여러 기능을 가질 수 있는 특성'을 뜻합니다. 다형성 또한 상속, 은닉성을 잇는 OOP의 매우 중요한 개념이라고 볼 수 있죠. 다형성에는 2가지 종류가 있습니다. 1) 같은 이름의 함수가 여러 종류의 매개변수를 처리하여 다른 기능을 하도록 하는 오버로딩 2) 부모 클래스에 존재하는 함수를 자식 클래스에서 재정의하여 다른 기능을 하도록 하는 오버라이딩 오버로딩은 이전 포스팅 '연산자 오버로딩'에서 비슷한 내용을 다뤘으므로, 자세한 것은 설명하지 않을 것이고 OOP에서 중요한 것은 오버라이딩입니다. 오버라이딩은 클래스 상속 관계에서 완전히 같은 이름과 같은 매개변수를 가지는 함수를 자식 클래스에서 재정의하여 다른 기능을 하도록 재정의하는 것입니다. 해당 코드를 ..
개요 객체 지향 프로그래밍의 핵심 개념은 은닉성, 상속, 다형성입니다. 이번 포스팅에서 설명할 것은 '상속'인데, 상속은 객체들을 관리하고 설계하기에 매우 훌륭한 도구입니다. '상속'은 '파생 클래스'가 '기초 클래스'의 기능을 계승하는 것이라고 설명할 수 있습니다. 일반적으로 상속의 뿌리에는 '베이스 클래스'라는 것이 있고, 베이스 클래스를 상속받는 '파생 클래스'가 존재합니다. 흔히 이것을 '부모'와 '자식'의 관계에 있다고 말하는데요. 부모는 자식에게 상속하고 싶은 함수와 변수를 설정하고, 자식은 부모로부터 상속받은 함수와 변수를 사용할 수 있습니다. 다음 코드로 예시를 보겠습니다. class Player { public: Player(int x, int y, int id) : _x(x), _y(y..