TIL/C#

· TIL/C#
코드를 잘 쓰는 것도 중요하지만 우리가 적은 코드들이 어떤 메모리 영역에 들어가서 관리되는지 이해하는 것도 중요하다. 그래서 오늘은 메모리 구조에 대해 살펴보고자 한다. 1. 메모리 구조 메모리의 구조는 크게 4가지 영역으로 나눠져있다. 1. 코드 영역 프로그램의 실행 코드가 저장되는 공간이며 텍스트 영역이라고 부른다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리한다. 2. 데이터 영역 전역 및 정적 변수를 저장하는 공간이며 특정 함수나 개체의 인스턴스에 연결되지 않았다. 프로그램이 시작할 때 함께 할당되며, 프로그램이 종료되면 소멸된다. 3. 스택 영역 함수의 호출 및 지역 변수와 매개변수를 관리하는 영역. 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸된다. 스택은 가장 최근..
· TIL/C#
좋은 프로그래머가 되기 위해서는 코드를 잘 구성하고 구현하는 것도 중요하지만 문제가 발생했을 때 그것을 빠르게 찾아내고 정확한 방법으로 해결하는 능력이 더 중요하다고 생각한다. 그렇기 때문에 디버그를 해야하는 이유와 방법을 소개하며 개념을 숙지하고자 한다. 디버그란? 코드에서 발생하는 오류에 대한 이유를 검출하고 수정하기 위한 작업 과정이다. 디버깅을 해야하는 이유 개인 프로젝트나 알고리즘 문제를 풀 때는 규모도 작고 시간도 자유로워서 디버그를 굳이 하지 않고 계속 코드를 바꿔가면서 실행하는 경우가 많다. 하지만 한 번 실행하는데 1 ~ 2분 이상이 걸리고 주어진 시간안에 치명적인 버그를 고치지 못하는 상황이라면 계속 코드를 바꿔가며 실행하는 것은 굉장히 비효율적일 것이고 프로젝트에 큰 영향을 끼칠 것이..
· TIL/C#
프로젝트를 하다보면 함수를 재정의하여 사용해야 하는 경우가 생기곤 한다. 그럴 때 마다 인터페이스를 사용할지 상속을 사용할지 고민이 된다. 왜냐하면 인터페이스와 상속에 대한 확실한 개념을 모르면 그냥 둘이 비슷한 기능을 한다고 생각하기 때문에 확실히 어떠한 점을 기준으로 나누기 힘들기 때문이다. 그리하여 오늘 인터페이스와 추상클래스에 대하여 개념을 숙지하고자 한다. 인터페이스란? 예를 들어 A회사 핸드폰, B회사 핸드폰.. 등 여러 회사의 핸드폰이있다고 가정할 때 모두 핸드폰의 특색은 다르지만 충전포트는 C타입으로 통일해야한다. 여기서 C타입 충전포트를 인터페이스, ~회사 핸드폰을 인터페이스를 상속받는 클래스라고 생각하면 된다. 인터페이스를 상속받는 클래스들은 무조건 인터페이스에 선언된 메소드, 이벤트,..
· TIL/C#
프로그래밍을 하다보면 중복된 함수를 사용하면 좋을 것 같은 상황이 오기 마련이다. 예를 들어 인자를 2개, 3개, 4개 받는 덧셈 함수를 만들고 싶은데 함수명을 plus2, plus3, plus4 만들었다고 가정하자. 이렇게 된다면 함수에 대한 명확성이 굉장히 떨어지고 이상하게 보인다. 다른 예로는 plus 함수를 A회사 클래스, B회사 클래스, C회사 클래스... 이렇게 수십개의 클래스에 적용하고 싶은데 이렇게 된다면 각 회사 클래스마다 매번 plus함수를 정의 해줘야 한다. 이러한 불편함들을 해결해줄 수 있는 기능으로 오버로딩과 오버라이딩이 존재하는데 이 개념에 대해서 설명하고자 한다. 오버로딩(Overloading)이란? 오버로딩은 매개변수의 개수와 유형이 다른 동일명 메서드를 여러 개로 정의 가능..
· TIL/C#
객체지향언어를 사용하여 프로젝트를 제작할 때 객체지향적으로 설계하라는 말을 자주 듣는다. 하지만 객체지향이 무엇이고 어떤 방법으로 구성해야 할지 구체적으로 모르는 경우가 많기 때문에 이러한 개념을 정리하여 확실히 숙지하고자 한다. 객체지향이란? 객체 지향이란 가장 작은 단위의 객체를 독립적으로 구성하여 객체들이 서로 상호작용하여 원하는 동작을 수행하게 하는 것이다. 객체지향 프로그래밍 OOP (Object Oriented Programming) OOP란 객체지향 프로그래밍을 뜻하며 객체지향의 개념을 프로그래밍에 적용하여 사용하는 것이다. 객체 지향의 특징 공통적인 특성을 파악한 후 하나의 묶음을 클래스로 정의하는 추상화 관련있는 기능을 묶어 외부로부터 정보은닉을 하는 캡슐화 상위 클래스의 기능을 하위클래..
· TIL/C#
프로젝트를 하다보면 메모리에 관한 작업을 하거나 그에 관한 이해가 많이 필요한 경우가 생기곤 한다. 그래서 메모리 구조에서 스택과 힙 영역이 무엇이고 어떠한 값이 저장되는지 알아보고자 한다. 스택 메모리란? 스택 메모리란 지역변수나 매개변수(파라미터), 리턴 값 과 같은 값 형식(Value Type)이 저장되는 곳입니다. 각 스레드마다 별도의 스택이 생기는 스택 프레임 형태로 구성되어 있고 메서드 안에 있는 값 형식들을 모두 스택프레임으로 구성하여 스택에 저장합니다. 그래서 메서드의 실행이 종료되면 해당 메서드와 관련된 모든 값 형식 데이터가 삭제됩니다. 힙 메모리란? 힙 메모리란 new 연산자를 사용하여 동적으로 할당되는 데이터와 객체들과 같은 참조 형식(Reference Type)이 저장되는 곳입니다..
· TIL/C#
인벤토리가 있는 게임을 하다보면 정렬 기능이 거의 존재한다. 하지만 이게 어떤 방식으로 동작하여 차례대로 정렬되는지 딱히 생각하지 않고 사용한다. 그래서 정렬 알고리즘이 왜 사용되며 어떤 방식으로 적용되는지 알아보고자 한다. 정렬 알고리즘이란? 정렬 알고리즘이란 데이터를 특정한 순서대로 배열하는 프로세스를 말한다. 대표적인 정렬 알고리즘으로는 버블, 삽입, 선택, 병합, 퀵 정렬이 있다. 이를 사용하는 이유는 데이터를 더 빠르게 탐색하고, 이해하기 쉽게 만들며, 데이터 처리의 효율성을 높이기 위해서다. C#의 대표적인 정렬 메서드는 다음과 같다. OdrerBy : 값을 오름차순으로 정렬 OrderByDesending : 값을 내림차순으로 정렬 ThenBy: 2차 정렬을 오름차순으로 수행 ThenByDes..
· TIL/C#
유니티를 하다보면 콜백 함수, 콜백 ~~ .. 이러한 기능들을 사용하곤 한다. 주로 내가 생각나는 것은 옵저버 패턴이나 대리자와 관련된 기능에서 사용했던 것으로 기억한다. 근데 그래서 이 콜백이란게 대체 무엇인지 사실 모르고 쓰고 있었다. 그렇기 때문에 이 개념에 대하여 숙지하고자 한다. Callback 이란? 호출을 당한 곳에서 다시 호출한 쪽을 호출하는 것이다. 이 개념을 처음봤을 땐 이게 뭔 소린지 감이 안잡힌다. 그렇기 때문에 상황을 병원에 갔을 때 나, 접수처, 의사 이렇게 3명이 있다고 가정해보자. 그럼 내가 접수처에가서 의사에게 진료를 받고싶다고 요청을 한다. 그럼 접수처에서 수락을하고 접수처가 의사에게 진료를 받고싶다는 환자가 있다고 전달한다. 여기까지가 내가 의사에게 호출을 한것이다. 그..
Sh_Blog
'TIL/C#' 카테고리의 글 목록