Chapter 0 이번 과제의 주제는 반복과 예외이다. 지금까지는 예외가 발생하면 그 상태로 에러를 반환하는 형태로 프로그램을 구현했다. 즉, "예외 -> 프로그램 종료" 라는 형식으로 코드를 작성했는데, 이번 과제에서는 예외가 발생한다면 다시 입력을 받거나, 예외가 발생한 구간부터 사용자가 작성한 코드를 동작하도록 만들어야 하는 것으로 보인다. 먼저, 이번 과제에서 자주 쓰일 try - catch 문에 대해 알아보도록 하자. Try - Catch 우리가 주로 사용하던 if문을 통한 예외처리 방식은 if 조건문이 굉장히 많이 쓰이고, 다방면으로 쓰이기 때문에 예외 처리를 위해 사용하는 것인지 한눈에 알아보기 힘들다. 이런 불편한 점 때문에, 가독성과 유지보수성을 위해 try-catch문을 사용하게 된다...
Chapter 0 Subtype polymorphism 서브타입 다형성이라는 것을 알아보기 전에, 다형성에 대해서 먼저 알아보자. 다형성이란, 하나의 객체가 여러가지 타입을 가질 수 있는 것을 의미한다. 객체 지향 프로그래밍의 구성에서 저번 과제때 배웠던 상속과 더불어 중요하게 작용하는 특징 중 하나이다. 다형성 중 부모 클래스의 포인터 또는 참조형을 통해 자식 클래스를 사용하는 것을 의미하는 경우가 서브타입 다형성이다. C++에서의 다형성은 지난 과제들에서도 사용했던 가상함수, 연산자 오버로딩, 앞으로의 과제에서 사용 할 템플릿 등이 있다. 가상함수이 과정을 통해 같은 이름을 함수지만 내용이 다른 함수를 호출이 가능해진다.또한, 클래스를 상속할 경우, 소멸자에 virtual을 붙여주어야 깔끔하게 상속을..
Chapter 0 Inheritance 이번 과제는 클래스 상속에 관한 과제이다. 상속이란 객체지향 언어에서 사용하는 정말 중요한 개념이다. 클래스 상속을 통해 기존에 정의해놓은 클래스를 용도에 맞게 재사용할 수 있으며, 수정하거나 새로운 기능을 추가하기 용이하다. 상속을 해주는 클래스를 '부모 클래스', 상속을 받는 클래스를 '자식 클래스' 라고 하는데, 다른 표현으로 '베이스 클래스', '파생 클래스'라고도 한다. 클래스에는 접근 제한자라는 개념을 통해, 클래스 내부에서만 접근 가능한 'private' 변수와 클래스 외부에서도 접근 가능한 'public' 변수로 나눌 수 있다. 상속 받은 클래스 또한 이 개념이 적용되어 'private' 변수는 접근할 수 없다. 이 부분에서, 'private' 영역은..
Chapter 1 Introduction 이 과제는 내가 걸어가야할 C++이라는 여행길에 시작점에 객체지향프로그래밍이 어떤건지를 설명해주는것이 목적이라고 한다. 객체지향은 많은 언어들이 사용하는데, 왜 C++을 배우게 되느냐.. 하면 나의 오랜 친구(42에서만)인 C에서 파생된 언어이기 때문이라고 한다. C++은 복잡한 언어이기 때문에, 단순하게 유지하기 위해 내 코드를 C++ 98 standard로 컴파일 할것이라고 한다. Chapter 2 General Rules 컴파일 너의 C++ 코드는 "-Wall -Wextra -Werror" 플래그와 함께 컴파일 한다. 너의 코드는 "-std=c++98"를 플래그로 추가하고도 컴파일이 되어야 한다. 포멧과 네임 컨벤션 모든 문제의 디렉토리는 다음의 방식을 따른..
Preview cpp00에서 엄청난 고난을 겪은 후, cpp01을 시작하게 되었다. 이번 과제에서는 메모리 동적할당과 포인터, 레퍼런스에 대해 배운다고 한다. Chapter 1 Introduction 이 과제는 내가 걸어가야할 C++이라는 여행길에 시작점에 객체지향프로그래밍이 어떤건지를 설명해주는것이 목적이라고 한다. 객체지향은 많은 언어들이 사용하는데, 왜 C++을 배우게 되느냐.. 하면 나의 오랜 친구(42에서만)인 C에서 파생된 언어이기 때문이라고 한다. C++은 복잡한 언어이기 때문에, 단순하게 유지하기 위해 내 코드를 C++ 98 standard로 컴파일 할것이라고 한다. Chapter 2 General Rules 컴파일 너의 C++ 코드는 "-Wall -Wextra -Werror" 플래그와 함..
Preview 저번 미니쉘을 끝으로 42서울의 과제 중 반정도를 끝냈다고 할 수 있을 것이다. 이제부터는 c++을 사용할 수 있고, norminette를 신경쓰지 않고 코딩을 할 수 있게 되었다 !! 잘가라 norminette, 어서와라 삼항연산자, tab_size: 2, camel case 등등... ㅎㅎ 이무쪼록 현재 42에서 points sale이 시작하기도 했고 평가도 잘 잡힌다고 하니... 여러모로 c++을 하기 제일 좋은 시기가 아닐까 싶었다. c++ 왕초보인 나한테는 더더욱 평가를 받기 수월한 시기이기에 너무 좋았다. 그럼 00부터 시작 ! Chapter 1 Introduction 이 과제는 내가 걸어가야할 C++이라는 여행길에 시작점에 객체지향프로그래밍이 어떤건지를 설명해주는것이 목적이라고..
Chapter 1 Introduction philosopher를 저번달에 끝낸 후, 벌써 한달 반이 지났다. 그 시간 동안 많은 일들이 있었는데.. 그것은... 어찌됐든.. 저걸 하면서 짬짬히 미니쉘을 진행했다. 다행인지 불행인지 같이 하기로 한 팀원이 2서클이어서 기한에 대한 압박없이 진행할 수 있었다. 미니쉘 과제는 흔히 사용하는 터미널 쉘을 만드는 것이다. 자세히 말하자면.. bash라는 쉘을 만들게 된다. 쉘은 사용자와 커널 사이에서 명령어들을 해석해 전달하는 명령어 해석기 기능을 수행하며, 많은 종류의 쉘이 존재한다. 그 중에서도 bash shell은 리눅스나 맥 OS에서 쓰이는 만큼 여러 방면에서 광범위하게 사용되고 있다. bash라는 명령어를 통해 bash shell을 실행해보면 저런식으로 ..
Chapter 1 Introduction 식사하는 철학자들 문제는 1965년에 만들어진 문제로, 운영체제의 교착상태를 설명하기 위한 문제이다. 교착상태는 네 가지 필요 조건을 충족시켜야 한다. 상호배제 : 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권 요구 점유대기 : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다림 비선점 : 프로스세가 어떤 자원의 사용을 끝낼 때 까지 그 자원을 뺏을 수 없음 순환대기 : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있음 이 조건 중 한 가지라도 만족하지 않으면 교착상태는 발생하지 않는다. 한번에 4가지를 동시에 만족시키기가 굉장히 힘들어 보이지만, 대부분의 현대 운영체제도 교착 상태를 막는것은 불가능하다. 따라서 교착상태를 막기 ..