프로그래밍을 하다보면 중복된 함수를 사용하면 좋을 것 같은 상황이 오기 마련이다. 예를 들어 인자를 2개, 3개, 4개 받는 덧셈 함수를 만들고 싶은데 함수명을 plus2, plus3, plus4 만들었다고 가정하자. 이렇게 된다면 함수에 대한 명확성이 굉장히 떨어지고 이상하게 보인다. 다른 예로는 plus 함수를 A회사 클래스, B회사 클래스, C회사 클래스... 이렇게 수십개의 클래스에 적용하고 싶은데 이렇게 된다면 각 회사 클래스마다 매번 plus함수를 정의 해줘야 한다. 이러한 불편함들을 해결해줄 수 있는 기능으로 오버로딩과 오버라이딩이 존재하는데 이 개념에 대해서 설명하고자 한다. 오버로딩(Overloading)이란? 오버로딩은 매개변수의 개수와 유형이 다른 동일명 메서드를 여러 개로 정의 가능..
TIL
객체지향언어를 사용하여 프로젝트를 제작할 때 객체지향적으로 설계하라는 말을 자주 듣는다. 하지만 객체지향이 무엇이고 어떤 방법으로 구성해야 할지 구체적으로 모르는 경우가 많기 때문에 이러한 개념을 정리하여 확실히 숙지하고자 한다. 객체지향이란? 객체 지향이란 가장 작은 단위의 객체를 독립적으로 구성하여 객체들이 서로 상호작용하여 원하는 동작을 수행하게 하는 것이다. 객체지향 프로그래밍 OOP (Object Oriented Programming) OOP란 객체지향 프로그래밍을 뜻하며 객체지향의 개념을 프로그래밍에 적용하여 사용하는 것이다. 객체 지향의 특징 공통적인 특성을 파악한 후 하나의 묶음을 클래스로 정의하는 추상화 관련있는 기능을 묶어 외부로부터 정보은닉을 하는 캡슐화 상위 클래스의 기능을 하위클래..
프로젝트를 하다보면 메모리에 관한 작업을 하거나 그에 관한 이해가 많이 필요한 경우가 생기곤 한다. 그래서 메모리 구조에서 스택과 힙 영역이 무엇이고 어떠한 값이 저장되는지 알아보고자 한다. 스택 메모리란? 스택 메모리란 지역변수나 매개변수(파라미터), 리턴 값 과 같은 값 형식(Value Type)이 저장되는 곳입니다. 각 스레드마다 별도의 스택이 생기는 스택 프레임 형태로 구성되어 있고 메서드 안에 있는 값 형식들을 모두 스택프레임으로 구성하여 스택에 저장합니다. 그래서 메서드의 실행이 종료되면 해당 메서드와 관련된 모든 값 형식 데이터가 삭제됩니다. 힙 메모리란? 힙 메모리란 new 연산자를 사용하여 동적으로 할당되는 데이터와 객체들과 같은 참조 형식(Reference Type)이 저장되는 곳입니다..
인벤토리가 있는 게임을 하다보면 정렬 기능이 거의 존재한다. 하지만 이게 어떤 방식으로 동작하여 차례대로 정렬되는지 딱히 생각하지 않고 사용한다. 그래서 정렬 알고리즘이 왜 사용되며 어떤 방식으로 적용되는지 알아보고자 한다. 정렬 알고리즘이란? 정렬 알고리즘이란 데이터를 특정한 순서대로 배열하는 프로세스를 말한다. 대표적인 정렬 알고리즘으로는 버블, 삽입, 선택, 병합, 퀵 정렬이 있다. 이를 사용하는 이유는 데이터를 더 빠르게 탐색하고, 이해하기 쉽게 만들며, 데이터 처리의 효율성을 높이기 위해서다. C#의 대표적인 정렬 메서드는 다음과 같다. OdrerBy : 값을 오름차순으로 정렬 OrderByDesending : 값을 내림차순으로 정렬 ThenBy: 2차 정렬을 오름차순으로 수행 ThenByDes..
유니티를 하다보면 콜백 함수, 콜백 ~~ .. 이러한 기능들을 사용하곤 한다. 주로 내가 생각나는 것은 옵저버 패턴이나 대리자와 관련된 기능에서 사용했던 것으로 기억한다. 근데 그래서 이 콜백이란게 대체 무엇인지 사실 모르고 쓰고 있었다. 그렇기 때문에 이 개념에 대하여 숙지하고자 한다. Callback 이란? 호출을 당한 곳에서 다시 호출한 쪽을 호출하는 것이다. 이 개념을 처음봤을 땐 이게 뭔 소린지 감이 안잡힌다. 그렇기 때문에 상황을 병원에 갔을 때 나, 접수처, 의사 이렇게 3명이 있다고 가정해보자. 그럼 내가 접수처에가서 의사에게 진료를 받고싶다고 요청을 한다. 그럼 접수처에서 수락을하고 접수처가 의사에게 진료를 받고싶다는 환자가 있다고 전달한다. 여기까지가 내가 의사에게 호출을 한것이다. 그..
프로젝트를 하다보면 어느 특정한 사건에서 바로 메서드를 호출하고 싶은 상황이 있다. 이를 가능하게 하는 기능은 여러가지 있지만 그 중 델리게이트 에 대해서 설명하고자 한다. 델리게이트란? Delegate는 대리자 라고 불리며 메서드를 갖고와서 실행하는 기능이기 때문에 메서드에 대한 참조를 갖고 있다. 그렇기 때문에 delegate 인스턴스를 통해 참조하고 있는 메서드를 호출할 수 있다. 이러한 특징으로 특정 이벤트가 발생했을 때 원하는 함수를 호출할 수 있게 만들어 준다. 주의할점은 메서드를 구현할 때 반환 형식이 델리게이트의 반환 형식과 같아야 한다. 사용법 델리게이트는 namespace나 클래스 내부에서도 선언 가능하며 delegate 타입 함수명 형식으로 선언 가능하다. 위 코드에서는 델리게이트를 ..
1. 제네릭이란? 제네릭은 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 기술을 말합니다. 그렇기 때문에 제네릭은 클래스, 구조체, 인터페이스 및 메서드의 형식 매개 변수에 사용자가 원하는 타입을 지정해줘야 하고 원하는 형식을 매개 변수처럼 넘겨줘야합니다. 2. 제네릭의 장점 2 - 1. 제네릭의 큰 장점은 형식 안전성입니다. object 타입에 비해 제네릭은 형식을 엄격하게 검사하기 때문에 컴파일러에서 형식 안정성을 보장해야 하는 부담이 없어집니다. 이러한 이유로 데이터 형식 테스트를 할 필요 없고 형식 캐스팅의 필요성과 런타임 오류 발생 가능성도 감소합니다. 2 - 2. 제네릭은 클래스, 구조체, 인터페이스 및 메서드를 원하는 타입으로 지정 후 사용할 수 있기 때문에 코드의 재사용성이 ..
Collection을 제작하는 과정에서 배열, List, ArrayList, Dictionary 중 하나를 선택하여 사용하곤 한다. 모든 사람이 같은 컬렉션을 쓰지 않고 다르게 쓰이는데 왜 그런지 각 개념의 차이점을 설명하면서 알아보고자 한다. 1. Array란? Array는 고정 길이를 가진 동일한 데이터 타입의 컬렉션이다. 고정 길이를 가지고 있기 때문에 크기에 대한 동적 할당이 불가능 하다. 정적이며 연속적이고 메모리 효율적이다. 그래서 정해진 크기에서는 실행 속도가 빠르지만 반대의 상황에서는 메모리가 크게 낭비될 수 있다. 2. List란? List는 고정되지 않는 가변 크기를 가지고 있는 동일한 데이터 타입의 컬렉션이다. 그렇기 때문에 데이터의 크기를 동적으로 할당 가능하다. List는 포인터를..