오버라이딩과 오버로딩은 객체 지향 프로그래밍에서 중요한 개념이지만, 종종 혼동되는 경우가 많습니다. 이 글에서는 두 개념의 정의와 차이점을 핵심 내용과 함께 심층적으로 분석하고, 각 차이점과 관련된 코드 예시와 주의 사항을 제공합니다. 1. 개념 및 기본 사용법 오버라이딩: 상속 관계에서 하위 클래스가 상위 클래스의 메소드를 재정의하는 것을 의미합니다. 하위 클래스는 상위 클래스의 메소드 구현을 변경하거나 확장하여 특정 상황에 맞게 사용할 수 있습니다. 메소드 이름, 반환 타입, 매개변수 목록이 완전히 동일해야 합니다. 오버로딩: 같은 클래스 내에서 같은 이름의 메소드를 여러 개 정의하는 것을 의미합니다. 각 메소드는 매개변수 목록 (갯수, 타입, 순서)에 따라 구별됩니다. 메소드 이름이 동일하더라도 매..
자 이번 포스팅에서는 C/C++ 면접 시 단골질문으로 나오는 C/C++의 동적할당 부분에 대해서 포스팅해 보겠습니다. 먼저 동적 할당이란 프로그램 실행 중에 필요한 메모리를 할당하는 것을 말합니다.반면에 정적 할당은 프로그램이 실행되기 전에 메모리를 할당하는 방법을 말하며, 변수 선언과 같이 컴파일 타임에 메모리 공간이 확정됩니다. C/C++에서는 동적 할당을 위해 malloc/calloc/realloc 함수(C) 또는 new/delete 연산자(C++)를 사용합니다. 동적 할당과 정적 할당의 가장 큰 차이점은 할당 시점과 메모리 영역입니다. 할당 시점: 정적 할당은 컴파일 타임에, 동적 할당은 런타임에 메모리를 할당합니다. 이로 인해 동적 할당은 프로그램이 실행 중에도 메모리를 필요에 따라 할당하거나 ..
부동소수점 부동소수점은 컴퓨터 프로그래밍에서 실수를 표현하는 방법 중 하나입니다. C 언어에서는 부동소수점을 표현하기 위해 float과 double 두 가지 데이터 타입을 제공합니다. float: 4바이트 크기를 가지며, 단정밀도 부동소수점을 표현합니다. double: 8바이트 크기를 가지며, 배정밀도 부동소수점을 표현합니다. 부동소수점을 이해하기 위해 몇 가지 중요한 개념을 알아보겠습니다. 1. 정수와의 차이: 정수는 소수 부분이 없는 숫자를 표현하는 반면, 부동소수점은 소수점 이하의 숫자를 표현할 수 있습니다. 예를 들어, 5는 정수이지만 5.0은 부동소수점입니다. 2. 부동소수점 표현 방식: 부동소수점은 다음과 같은 형태로 표현됩니다. 부호(sign) + 가수(mantissa) + 지수(expone..
함수포인터 C 언어에서 함수 포인터(Function Pointer)는 함수를 가리키는 포인터 변수입니다. 다시 말하면, 함수 포인터는 메모리에서 특정 함수의 주소를 저장할 수 있고, 해당 주소를 사용하여 함수를 호출할 수 있게 해 줍니다. 이를 통해 함수를 다른 함수의 인수로 전달하거나, 함수를 동적으로 선택하여 실행할 수 있게 됩니다. 함수 포인터의 선언 방법은 다음과 같습니다: 반환_자료형 (*포인터_변수_이름)(매개변수_자료형1, 매개변수_자료형2, ...); 여기서 반환_자료형은 해당 함수의 반환하는 자료형, 매개변수_자료형1, 매개변수_자료형 2,... 는 해당 함수의 매개변수 자료형들을 나타냅니다. 예를 들어, int를 반환하고 int 매개변수를 한 개 가지는 함수를 가리키는 함수 포인터의 선..
대부분의 PS 문제를 해결할 때에는 보통 메모리 제한보다는 성능을 더 고려한다. 처음부터 메모리가 넉넉하게 주어지며, 사실 기술이 많이 발전한 지금 메모리를 극한으로 제한하는 것은 어불성설인 것 같기도 하다. 하지만 PS 문제에서 메모리를 제한할 때, 알아두면 좋을 방법이니 포스팅해보도록 한다. | 사용되지 않는 비트의 예시 1. 입력 값으로 주어진 수의 범위가 제한적일 때 예를 들어, 특정 문자열이 주어지고, 그 문자열의 길이를 저장해야 할 때 보통 int len = str.length(); 이런 식으로 사용하곤 하는데. 만약 주어진 문자열의 길이가 8 이하라면? 100 이하라면? 위의 Integer type변수 len의 앞쪽 비트는 전혀 사용되지 않는다. 다시말해 만약 문자열의 길이가 8 이하라면, ..
| 가상 함수 객체 지향 프로그래밍에서 가상 함수(virtual function 또는 virtual method)는 상속하는 클래스 내에서 같은 시그니처 함수로 오버 라이딩될 수 있는 함수 또는 메서드이다. 가상 함수에 관련된 내용은 아래 링크를 참조한다. https://coding-factory.tistory.com/699 | 가상 함수는 'vtable' 혹은 가상 테이블(virtual table)에 의존한다. 어떤 클래스의 함수가 virtual로 선언되어 있으면, 해당 클래스의 가상 함수 주소를 보관하는 vtable이 만들어진다. 컴파일러는 또한 해당 클래스의 vtable을 가리키는 vptr이라는 숨겨진 변수(hidden variable)를 해당 클래스에 추가한다. 하위 클래스가 상위 클래스의 가상 ..
| Hash Table 해시 테이블의 값(value)은 키(key)에 대한 해시 함수를 호출하여 저장한다. 값은 정렬된 순서로 보관되지 않는다. 삽입 및 탐색 연산은 분할상환적으로 O(1) 시간에 수행된다. (충돌이 적다는 가정하에) 잠재적 충돌을 고려하여 구현해야 한다. 보통은 충돌되는 값을 서로 연결하여(chaining)하여 이 문제를 해결한다. 즉, 특정 키에 대응되는 인덱스 위치에 모든 값을 연결 리스트로 묶는다. | STL map 키를 기준으로 만든 이진 탐색 트리에 키(key) / 값(value) 쌍을 보관한다. 충돌을 처리할 필요가 없고 트리의 균형이 유지되므로 삽입 및 탐색 시간은 O(logN)이 보장된다. key를 기준으로 정렬된 상태로 저장한다. 물론, 정렬하지 않은 상태로 저장하는 u..
reference : https://google.github.io/styleguide/ Google Style Guides Style guides for Google-originated open-source projects google.github.io 구글에서 제시하는 C/C++ 코드스타일(네이밍 룰)을 알아본다 1. Class/Struct Class의 이름은 Pascal Case를 사용한다. Class의 멤버함수 또한 Pascal Case를 사용한다 Class의 멤버함수안의 일반 변수들은 Snake Case를 사용한다. class MyClass { public: int CountFooErrors(const std::vector& foos) { int total_number_of_foo_errors =..
- Total
- Today
- Yesterday
- 반드시 알아야 할 자료구조
- interview question
- 속초
- 러스트
- Problem Solving
- 솔직후기
- 알고리즘
- rust
- 내돈내산
- DP
- 리트코드
- Interview
- PS
- 기술면접
- 트리
- Medium
- C++
- LeetCode
- coding interview
- 인터뷰
- 러스트 기초
- 자료구조
- 러스트 입문
- Tree
- 러스트 배우기
- 코딩인터뷰
- ProblemSolving
- 속초 맛집
- 맛집
- algorithm
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |