본문 바로가기

프로그래밍8

객체지향 프로그래밍에서의 다형성의 의미 객체지향 프로그래밍에서 다형성(Polymorphism)은 객체들이 동일한 메시지에 대해 서로 다른 방식으로 응답할 수 있는 능력을 의미합니다. 다시 말해, 다형성은 하나의 인터페이스나 추상 클래스를 여러 개의 구현 클래스가 상속받아 각자의 방식으로 구현하여 동일한 메소드를 다르게 동작시키는 기능입니다. 이러한 다형성은 코드의 재사용성과 유지보수성을 높여줄 수 있습니다. 예를 들어, 도형(Shape) 클래스가 있고, 이 클래스를 상속받은 삼각형(Triangle), 사각형(Rectangle), 원(Circle) 클래스가 있다고 가정해 봅시다. 도형 클래스에는 getArea() 메소드가 정의되어 있고, 각 도형 클래스에서는 이 메소드를 오버라이딩하여 해당 도형의 면적을 계산하는 방식으로 구현할 수 있습니다. .. 프로그래밍 2023. 4. 26.
객체 지향 프로그래밍에서 오버로딩(Overloading)과 오버라이딩(Overriding) 차이점 객체지향 프로그래밍에서 오버로딩과 오버라이딩은 굉장히 중요한 개념이다. 이름은 비슷하게 생겼지만 그 사용처는 전혀 다른 기능인데 각각에 대해 설명하고 비교해 본다. 오버로딩(Overloading) 오버로딩은 객체 지향 프로그래밍에서 메서드의 이름은 같지만, 매개변수의 수, 타입, 순서 등이 다른 여러 개의 버전을 정의하는 것이다. 즉, 같은 이름의 메서드를 여러 개 정의할 수 있는 기능을 의미한다. 예를 들어 다음과 같이 add라는 이름의 메소드를 여러 개 정의할 수 있다. public class Calculator { public int add(int a, int b) { return a + b; } public int add(int a, int b, int c) { return a + b + c; }.. 프로그래밍 2023. 4. 24.
언리얼 엔진 4, 비쥬얼 스튜디오 2022 다운로드 및 설치 후 프로젝트 생성하기 언리얼 엔진 설치 언리얼 엔진 공식 홈페이지에 접속하면 Epic Games Launcher를 설치할 수 있습니다. 에픽 게임즈 런처는 언리얼 엔진의 소유주인 에픽게임즈에서 다양한 게임과 언리얼 엔진, 예제 소스, 뉴스, 마켓플레이스 등을 모아 놓은 하나의 플랫폼입니다. 밸브의 스팀, 유니티의 유니티 허브를 합쳐놓은 느낌이라고 생각하시면 됩니다. 언리얼 엔진의 공식 홈페이지는 https://www.unrealengine.com/ko/ 입니다. 오른쪽 상단에 X 버튼 아래에 다운로드 버튼을 클릭하면 에픽게임즈 런처를 다운로드할 수 있는 화면으로 전환됩니다. 시스템 권장 사양이 생각보다 낮은 스펙을 요구하지만 막상 프로그램을 실행하면 굉장히 높은 성능을 요구합니다. 그렇기에 홈페이지에 있는 권장 사양을 최소 .. 프로그래밍 2023. 2. 9.
[STL] 컨테이너의 분류와 종류(순차 컨테이너, 연관 컨테이너, 비정렬 컨테이너) 컨테이너의 종류는 크게 3가지로 나눌 수 있다. 순차 컨테이너, 연관 컨테이너, 비정렬 컨테이너로 볼 수 있는데 이 안에 포함되는 STL 컨테이너들도 간단히 소개한다. 순차 컨테이너 ( Sequence Container ) 모든 요소를 저장한 순서대로 저장하는 컨테이너이다. 원소를 선형적 순차열(Linear Sequence)에 저장하는데 이 때문에 인해 정렬되지 않는다. 이 위치는 삽입한 시점과 위치에 따라 달라지며 요소의 값과는 독립적이다. 자동적으로 정렬되지 않기 때문에 정렬 알고리즘을 사용하여 수동으로 정렬해야 한다. STL에 선정의된 순서 컨테이너는 배열(array), 벡터(vector), 데크(deque), 양방향 리스트(list), 단방향 리스트(forward_list) 가 있다. Array .. 프로그래밍 2023. 2. 8.
[C++] 레퍼런스(참조, &) 사용 시 주의 사항 C++에서 레퍼런스(Reference, 참조)란 변수에 대한 앨리언스(Alias, 별명)이다. 변수에 대한 별명이기 때문에 일반적인 자료형 뿐 아니라 포인터 자료형에 대해서도 사용이 가능하다. 레퍼런스 변수의 값을 변경하는 경우 해당 레퍼런스가 가리키는 원본의 값이 변경된다. int x = 10; int& xRef = x; xRef = 15;// x 는 15로 변경되었다. 레퍼런스는 변수의 주소를 가져오거나 변수에 대한 역참조 연산을 자동으로 수행하는 특수 포인터로 볼 수 있다. xRef 변수를 사용하는 것은 x를 사용하는 것과 동일하다. 즉, &xRef 연산으로 xRef의 주소를 찾는 경우 x의 주소 값인 &x가 반환된다. 다르게 말하면 &xRef == &x가 true가 된다. 이러한 레퍼런스를 사용할.. 프로그래밍 2023. 2. 8.
[C++] decltype 이란? decltype은 주어진 이름이나 표현식의 형식을 알려주는 역할을 한다. decltype은 대부분 예상한 자료형을 알려주지만 가끔 생각지도 못한 결과를 제공하는 경우가 있다. 그렇기에 decltype의 작동 방식을 알고 있는 것이 좋다. decltype은 템플릿이나 auto와 다르게 주어진 이름이나 표현식의 구체적인 자료형을 그대로 말해준다. 위 예제에서 사용된 코드들은 우리가 생각할 수 있는 그대로가 decltype을 통해 표현된다. 대체로 자료형 T의 객체들을 담은 컨테이너(vector, deque 등)에 대한 operator[] 연산은 T&을 반환한다. 그러나 std::vector에 대한 operator[] 연산은 bool&가 아닌 새로운 객체를 반환한다. 이처럼 operator[]의 반환 형식은 .. 프로그래밍 2023. 2. 8.
[C++] 순수 가상 함수(pure virtual method)와 추상 클래스(abstract class) 연관 클래스를 구현하다보면 동일한 기능을 하지만 내부 구조는 다르게 동작하는 것들이 있다. 예를 들면 일반 내연기관 자동차는 엑셀을 밟을 시 엔진이 회전하고 기름을 소모해 폭발 행정과 변속기를 통해 차량을 이동시키지만 전기차는 전기 모터를 회전시켜 가속을 한다. 사용자가 사용하기에는 두 차량 모두 엑셀 페달을 밟았다는 행동은 동일하다. 사용자는 차의 내부에서 어떤 동작이 일어나는지 구체적으로 알 지 못하더라도 차는 앞으로 간다. 내연기관 자동차와 전기 자동차의 엑셀을 각각 구현해도 괜찮겠지만 만약 두 자동차가 Car라는 클래스를 상속받은 차량이고 Car에 엑셀 페달을 밟는 함수가 없다면 업캐스팅 시에 엑셀레이터를 사용하지 못하는 경우가 발생한다. 따라서 부모 클래스에서 인터페이스를 제공해 자식 클래스에서 그에.. 프로그래밍 2023. 2. 8.
[C++] 함수 오버라이딩의 특수 케이스 확인하기 함수 오버라이딩을 하다보면 의도하지 않은 동작을 할 때가 있는데 부모 클래스와 자식 클래스가 static 함수를 같은 이름으로 둘 다 들고 있다거나, 오버로딩 된 함수의 일부만 오버라이딩 한다거나 하는 등의 일들이 발생한다. 이러한 예외적인 상황에 대해 알아본다. 동일한 이름의 static 함수 처리 부모 클래스의 오버로딩한 함수 중 일부만 오버라이딩 하는 경우 Public이 아닌 함수의 오버라이딩 부모 클래스 함수에 디폴트 매개변수가 있는 경우 오버라이딩 함수의 접근 지시자가 다른 경우 [동일한 이름의 static 함수 처리] 기본적으로 C++에서는 static 함수를 오버라이드 할 수 없다. 애초에 virtual 과 static 을 동시에 사용할 수가 없기 때문에 컴파일 자체가 불가능하다. 그러나 같.. 프로그래밍 2023. 2. 8.