[OOP, C++] Class 기초 - 선언, 초기화, 사용
·
Computer Science and Engineering/OOP (Object Oriented Programming)
본격적인 객체 지향 프로그래밍의 시작이다. 클래스를 선언하고 초기화하고 사용하는 법까지 account라는 Class를 통해 알아보도록 하자. 헤더 파일 먼저 class를 선언하는 곳은 소스 파일이 아닌 헤더 파일이라는 사실이 중요하다. 그 이유는 클래스를 헤더 파일에 선언함으로써 코드의 재사용성, 가독성, 유지 보수성을 높일 수 있고, 컴파일 타임 최적화와 컴파일 시간 단축을 이룰 수 있기 때문이며, 객체 지향 프로그래밍의 핵심 중 하나이다. 우리가 만들 account라는 클래스는 다음과 같은 구조를 가진다. 1. 계좌의 잔액 2. 계좌의 잔액을 로그에 출력하는 메서드 3. 계좌의 잔액을 다른 계좌에 전달하는 메서드 // account.h class account { int balance; public:..
[Syntax, C++] Reference(&) - 참조란?
·
Computer Science and Engineering/OOP (Object Oriented Programming)
객체 지향 프로그래밍을 향한 마지막 관문이다. reference는 object에 specific 한 개념은 아니지만, 종종 자주 쓰이기 때문에 알아두면 좋다. // By pointer void foo(int* num) { *num *= 2; } // By reference void foo(int& num) { num *= 2; } 어떤 변수의 값을 함수를 통해 변경하는 방법은 C를 이용한 포인터의 개념을 설명할 때 언급한 적이 있다. 바로 변수의 주소를 보내고, 그 주소를 역참조하여 변수의 값을 변경시키는 것이다. 이와 같이 포인터를 이용하여 주어진 변수의 값을 변경할 수도 있지만 reference를 이용하는 방법도 있다. 왜 두 가지 방법이 존재하는 걸까? 그리고 이들의 장단점은 뭘까? 포인터의 장점 ..
[Syntax, C++] struct, enum, union을 활용하여 계산기 구현하기
·
Computer Science and Engineering/OOP (Object Oriented Programming)
pointer, array, struct, enum, enum class... 이 정도만 하면 얼추 C++에서 객체 지향 프로그래밍을 하기 위한 준비는 끝마쳤다고 볼 수 있겠다. class에 관한 syntax는 OOP와 함께 다뤄볼 예정이다. 함수와 구조체를 사용하는 이유는 복잡한 반복되는 과정을 효율적으로 처리하기 위함이다. 이번 시간에는 주어진 입력이 정수, 실수, 허수인지를 알아서 분기하여 사칙연산을 수행할 수 있게 하는 계산기를 만들 예정이다. 더하기와 빼기는 비교적 쉬우므로, 곱하기와 나누기 정도만 구현해 보도록 하자. 1. 수를 담는 구조체 (타입은 enum으로 분기, union으로 한 수에는 하나의 타입 매칭) 2. 수를 로그에 출력하는 함수 3. 수의 실수 부분(real_component)..
[Syntax, C++] struct를 활용하여 다각형의 둘레의 길이 구하기
·
Computer Science and Engineering/OOP (Object Oriented Programming)
지난 시간에 이어서 구조체를 활용한 다각형 둘레 구하기를 해보자. 구현에 필요한 조건은 다음과 같다. 1. 2차원 정수 좌표(x, y)를 요소로 갖는 point struct를 선언 2. 각 꼭짓점의 좌표 배열과 꼭짓점의 개수를 담은 polygon struct를 선언 3. polygon 내 배열의 좌표를 순차적으로 접근하며 변의 길이를 구하는 함수 구현 point struct point { double x, y; }; 좌표는 정수로 받지만 변의 길이는 실수가 나올 수 있으니 double로 선언한다. polygon struct polygon { point points[20]; size_t vertex; }; 최대 이십각형까지로 한다. vertex는 다각형의 꼭짓점의 개수를 의미한다. 두 좌표 간 거리 dou..
[Syntax, C++] struct, enum class를 활용하여 날짜(D - day) 계산하기
·
Computer Science and Engineering/OOP (Object Oriented Programming)
C++ 문법을 연습할 겸 두 날짜가 주어졌을 때 며칠이 차이 나는지를 계산할 수 있는 코드를 구현해보려 한다. 해당 조건에 맞춰 구현해 보자. 1. 당해 연도에서만, 그러므로 윤년 또한 고려해주지 않는다. 2. 월을 나타내는 enum class를 선언한다. 3. 해당 enum class와 날짜를 요소로 하는 struct를 선언한다. 4. 해당 월에 해당하는 날짜(28, 30, 31)를 반환하는 함수를 작성한다. 5. 해당 struct에 대한 메모리 주소를 인자로 받는 함수를 작성한다. enum class enum class month { jan, fab, mar, apr, may, jun, jul, aug, sep, oct, nov, dec }; enum class와 enum의 대표적인 차이는 예기치 못..
[Syntax, C++] Array에서의 Pointer
·
Computer Science and Engineering/OOP (Object Oriented Programming)
Array와 Pointer의 관계 메모리 주소에 직접적으로 접근할 수 있다는 장점이 있는 Pointer라는 개념은 Array와 밀접한 관련이 있다. 왜냐하면 Array는 메모리에 연속적으로 값을 저장하고, Array를 초기화한 변수 자체는 Array의 첫 번째 요소의 주소를 담고 있기 때문이다. 다음 예시를 통해 Array와 Pointer의 밀접한 관계를 이해할 수 있겠다. #include using namespace std; int main() { int x[] = { 2, 3, 4, 5 }; cout
[Syntax, C++] 입력값과 선언한 자료형이 다를 때는 어떻게 처리해야 할까? (with simple I/O, ignore and clea
·
Computer Science and Engineering/OOP (Object Oriented Programming)
simple I/0각 언어마다 입출력을 할 때 장단점이 있는 듯하다. C++에서는 먼저 받아올 변수의 자료형을 선언하고, 공백을 활용하여 해당 변수에 맞는 자료형으로 할당할 수 있다. 변수의 자료형을 미리 선언하는 것 빼고는 Python과 달라 보이지 않고 오히려 불편한데, 여러 자료형을 한 번에 받아올 수 있다는 점은 반대로 장점이 된다. 두 코드를 통해 차이를 이해해 보자. Python# 받아올 자료형이 같을 때: 공백을 기준으로 나눠서 할당 a, b = map(int, input().split()) # 받아올 자료형이 다를 때: list로 받아온 후 자료형 변경 # ex) input: '사과 3' arr = list(input().split()) b = int(arr[1])자료형이 같을 때에는 ma..
[Syntax, C] - 포인터(Pointer)란?
·
Computer Science and Engineering/OOP (Object Oriented Programming)
오랜만에 C와 C++ 공부를 다시 시작하게 되면서 그동안 쓸 일이 없었던 Pointer의 개념을 다시 정리해보려 한다. 하나의 scope 안에서 변수의 값을 초기화하고 변경하는 경우에는 아무런 문제가 없겠지만, 함수를 사용하는 과정에서 영구적으로, 혹은 완벽하게 해당 변수의 값을 변경하려고 한다면 반드시 알아야 하는 개념이 바로 포인터다. 또 다른 고급 언어(Python, Java 등)에는 없는, 메모리에 직접 접근할 수 있다는 것도 포인터가 지닌 장점 중 하나이다. 포인터로 할 수 있는 것 포인터 변수에는 변수가 저장된 메모리의 특정 장소, 즉 메모리 주소값을 저장할 수 있다. 포인터 변수에 변수의 메모리 주소값을 저장하고, 포인터 변수를 통해 해당 변수를 참조해서 값을 바꿀 수 있다. 또 필요한 경우..
100두산
'Computer Science and Engineering/OOP (Object Oriented Programming)' 카테고리의 글 목록