클래스

    [Unreal] 클래스 생성시 FObjectInitializer 사용법 (기본 컴포넌트 변경)

    FObjectInitializer 구조체를 이용해서 특정 맴버를 초기화 시키는 두가지의 방법이 있다. 1. 클래스 생성자 매크로를 GENERATED_BODY() -> GENERATED_UCLASS_BODY() 로 변경하고 const FObjectInitializer& ObjectInitializer 가 있는 생성자를 구현하는 방법 // .h 파일 UCLASS() class XXXX_API ClassA : public APawn { GENERATED_UCLASS_BODY() // 언리얼에서 클래스를 생성하면 GENERATED_BODY()가 디폴트 // 기타 클래스 세팅... } // .cpp 파일 // GENERATED_UCLASS_BODY()사용시 선언이 들어가므로 .cpp에 해당 구현만 처리하면 됨 C..

    [Unity] Debug 클래스 (에디터 출력용)

    유니티 스크립트에서는 게임을 제작하는 동안 디버깅을 도와주기 위해 Debug 클래스를 제공한다. - Debug.Log() Debug.Log() 메소드는 괄호 () 안에 로그 메시지를 넣어주면, 유니티 콘솔창에 로그 메시지를 출력해주는 메소드이다. - Debug.LogError() Debug.LogError() 메소드는 괄호 () 안에 로그 메시지를 넣어주면, 유니티 콘솔창에 로그와 함께 에러 메시지를 표시한다. - Debug.LogWarning() Debug.LogWarning() 메소드는 괄호 () 안에 로그 메시지를 넣어주면, 유니티 콘솔창에 로그와 함께 경고 메시지를 표시한다. 출처 : https://m.blog.naver.com/PostView.naver?blogId=nuberus&logNo=50..

    C# 부모 클래스 함수 호출과 오버라이딩 (base / override)

    개념 부모 클래스 내 함수를 자식 클래스 재정의 하는 것이며 C++하곤 살짝 다른 개념이다 기본적으로 룰이 존재하는데. 1. 절대로 private이면 안된다. 2. C++과 다르게 같은 함수명을 적어도 컴파일러는 알아채질 못한다. using System; using System.Collections.Generic; using System.Runtime.InteropServices; namespace ConsoleApplication1 { public class Parent { int mVal = 0; public int ValProp { get { return mVal; } set { mVal = value; } } public Parent() { this.mVal = 10; Console.WriteLi..

    C++ 부모 클래스 함수 호출과 오버라이딩 (override)

    오버라이딩 핵심 개념 오버라이딩은 부모 클래스에서 정의한걸 재정의 하는 것이다. 추상클래스 (순수 가상 함수) 참조 아래와 같이 부모 클래스에선 virtual 키워드를 붙여준 뒤 함수를 정의하고 자식 클래스에서 재정의 하는 것이다. virtual로 시작 (생략 가능) 그리고 마지막엔 override 붙일 수가 있다. (이것 또한 생략 가능) #include using namespace std; class Parent { int mVal = 0; public: virtual void Fn1() { } virtual void Fn2() { } virtual void Fn3() { } virtual void Fn4() = 0; }; class Child : public Parent { public: void ..

    C++ 추상 클래스 / 순수 가상 함수 (Pure Virtual Function)

    순수 가상함수란 선언(declaration)만 있고 구현(definition)이 없는 가상 함수다. virtual void Func() = 0; 추상 클래스 위와 같은 순수 가상함수를 하나라도 가지고 있는 클래스를 추상클래스(abstract class)라고 한다. 추상 클래스는 객체를 생성할 수 없다. 추상 클래스는 멤버 함수의 원형만을 정의하고 그 구현은 자식 클래스에서 하게 된다. 추상 클래스를 상속받는 자식 클래스는 반드시 순수 가상함수를 오버라이딩 하여 재정의 해야만 한다. 그렇지 않다면 아래 그림과 같이 컴파일 오류가 난다. 이렇게 추상클래스를 활용하면 파생클래스에서 순수 가상함수를 재정의 하게끔 강제할 수 있다. #include using namespace std; class Parent { ..

    C# 추상 클래스 (abstract)

    추상 클래스(abstract class)와 추상 메서드(abstract method)이다. 추상 메서드는 abstract 예약어가 지정되고 구현 코드가 없는 Method이다. 추상 메서드는 반드시 추상 클래스 안에서만 선언할 수 있으며, 추상 메서드를 하나라도 가지고 있으면 추상 클래스로 만들어줘야 한다. 특징 추상 메서드에는 접근 제한자로 private를 사용할 수 없다. new를 사용해 인스턴스로 만들 수 없다 추상 메서드만을 가질 수 있다. abstract class Employee { public int EmpID { get; private set; } public long Salary { get; set; } public Employee(int empId, long salary) { EmpID ..

    C# 클래스 접근 제한자 (Access Modifier)

    접근 제한자에는 public, protected, internal, private가 있다. 클래스 기본형은 internal이다. 접근 제한자 설명 private 클래스 내부에서만 접근이 가능하다. public 모든 곳에서 해당 멤버로 접근이 가능하다. internal 같은 어셈블리에서만 public으로 접근이 가능하다. protected 클래스 외부에서 접근할 수 없으나 파생 클래스에서는 접근이 가능하다. protected internal 같은 어셈블리에서만 protected으로 접근이 가능하다. using System; using System.Collections.Generic; using System.Runtime.InteropServices; namespace ConsoleApplication1 {..

    C++ 클래스 접근 제한자 (Access Modifier)

    public, private, protected 바로 이 3가지이고 쓰여지는 이유는 객체지향 프로그래밍의 중요한 개념 중 하나는 데이터 숨김(은닉) 때문이다. 클래스 내에 멤버에 대한 접근 제한자를 두지 않으면 기본적으로 private이다. 구조체 멤버에 대한 기본적인 접근 제한자는 public이다. friend 키워드는 private와 protected의 원칙을 깨트림으로서 코드의 직관성과 흐름 파악을 복잡하게하는 goto같은 존재이다. friend 관련 글 참고 public public으로 선언된 데이터 멤버 및 멤버함수는 . 연산자를 사용하여 프로그램의 아무곳에서나 액세스 할 수 있다. private 클래스 멤버를 private으로 선언하면 해당 멤버는 오직 클래스 내부에서 접근할 수 있다, 외부의..

    C# 원자적 연산 (Interlocked 클래스)

    Interlocked 클래스는 int 형 값을 증가시키거나 감소시키는데 사용한다. 멀티 스레드 환경에서 하나의 int 형 전역 변수를 공유한다고 생각해보자. 이런 경우에 A 쓰레드와 B 쓰레드가 값을 동시에 읽어와서 B 쓰레드가 수정한 값을 저장하고, A 쓰레드가 다시 수정한 값을 저장하게 되면 B 쓰레드의 변경사항을 잃어버리게 된다. 지금까지 이러한 자원의 동기화를 위해서 모니터나 뮤텍스를 사용하는 방법을 설명했지만 간단한 int 형의 값을 여러 쓰레드가 공유하는 것이 일반적이기 때문에 이러한 작업을 캡슐화한 클래스를 제공한다. Interlocked 클래스는 System.Threading 클래스에 있으며 주요 멤버는 다음과 같다. 메소드 이름 설 명 CompareExchange 두 대상을 비교하여 값이..

    C# 구조체 (struct) 클래스 (class) 차이

    struct 코드 struct Point { public int X; public int Y; public int Z; public Point(int x, int y, int z) { this.X = x; this.Y = y; this.Z = z; } public static Point operator +(Point p1, Point p2) { return new Point(p1.X + p2.X, p1.Y + p2.Y, p1.Z + p2.Z); } public String toString() { return "x: " + X + ", y: " + Y + ", z: " + Z; } } class 코드 class Point { public int X; public int Y; public int Z; pub..