TIL

· TIL/C#
박싱과 언박싱에 대한 개념은 잘모르지만 무의식적으로 코딩할 때 자연스럽게 쓰는 경우가 있다. 그렇기 때문에 박싱과 언박싱에 대한 개념을 확실히 알고 사용하면 좋을 것 같아서 이에 대해 설명하고자 한다. 박싱(boxing)이란? boxing은 가비지에서 수집되는 힙에 값 형식을 저장하는 데 사용한다. 이를 풀어서 설명하자면 boxing은 값 형식을 object형식이나 값 형식에서 구현된 임의의 인터페이스 형식으로 암시적 변환을 한다. 그 다음 힙에 개체 인스턴스가 할당되고 값이 새 개체에 복사된다. i라는 변수를 선언한 뒤 object o = i라는 박싱 연산을 적용하는 과정이다. 힙에서 개체 인스턴스가 할당되고 그 곳에 값 형식이 복사되는 것을 볼 수 있다. 언방식(unboxing)이란? 박싱은 값 형식..
· TIL/C#
얼마전에 가비지 컬렉터에 관하여 개념을 정리하여 글을 적었다. 근데 정보를 찾다가 발견한거는 가비지 컬렉터와 가비지 컬렉션은 같은 단어인줄 알았는데 사실은 다른 개념이었다. 그래서 가비지 컬렉션에 관한 개념을 정리하고자 한다. 1. 가비지 컬렉션이란? 동적으로 할당된 메모리 영역을 찾아서 만약 사용하지 않는 영역이면 자동으로 해제하는 메모리 관리 기법이다. 사용하지 않는 영역은 포인터를 이용하여 변수 접근 가능메모리를 파악하여 찾아낸다. 이러한 가비지 컬렉션 과정을 수행하는 부분을 가비지 컬렉터(Garbage Collector)라고 부른다. 2. 가비지 컬렉션의 장점과 단점 장점 가비지 컬렉션은 메모리를 자동으로 관리해주기 때문에 사용자가 직접 메모리를 할당, 해제해주는 부분을 완벽하게 관리할 필요가 없..
· TIL/C#
C#에는 공용언어런타임인 CLR에 가비지 컬렉터가 있다. 그래서 개발자가 사용하는 메모리를 모두 가비지 컬렉터에서 알아서 관리해줄거라 생각하는데 사실 아니다. 파일 IO, DB, Connection 등 이러한 것들은 CLR에 의해 관리되지 않는다. 그래서 그에맞는 기능들을 사용해야 하는데 이것에 대해 설명하고자 한다. 1. Finalizer Finalizer 란 "종료자" 라는 뜻으로 위에서 말한 IO, DB, Connection 등을 직접 해제할 수 있는 기능이다. Finalizer는 이러한 형식으로 작성하여 사용된다. 2. Finalizer의 단점 Finalizer는 가비지 컬렉터가 가비지라고 판단한 시점부터 문제가 생긴다. 일반적인 메모리라면 즉시 해제되지만 Finalizer의 경우 이를 호출한 다..
· TIL/C#
자바나 C#을 이용하던 사람들이면 가비지 컬렉터라는 개념을 한 번은 들어봤을 것이다. 메모리를 관리해주는 것은 알겠는데 어떤 방식으로 관리를 해주는지 자세히 모른다. 그렇기 때문에 가비지 컬렉터에 대한 개념을 설명하고자 한다. 1. 가비지 컬렉터란? 공용 언어 런타임에서 가비지 컬렉터는 자동 메모리 관리자 역할을 하는데 주로 메모리 할당 및 해제를 관리해준다. 그래서 따로 메모리를 할당 및 해제하는 코드를 작성하지 않아도 된다. ex) C++의 Malloc 2. 가비지 컬렉터 구성 가비지 컬렉터는 포인터가 담긴 가상 주소 공간이 있다. 하지만 이 공간은 CLR(공용 언어 런타임)에서 관리해주기 때문에 개발자가 건들일 필요가 없다. 가상 주소 공간은 관리되는 힙 즉, Managed Heap 이라고 부르고 ..
· TIL/C#
Struct와 Class는 비슷한 기능을 하고 있지만 확실하게 다른 구조를 가지고 있다. 기능을 사용할 때 확실히 알고 쓰는거랑 모르고 쓰는거는 큰 차이가 있기 때문에 이 둘의 대한 개념을 설명하고자 한다. Struct란? 영어 뜻 그대로 구조체 형식이며 관련 기능을 캡슐화 할 수 있다. 구조체 형식은 값 형식이다. Class란? Class는 Struct와 비슷한 기능을 하지만 상속이 가능하며 클래스 형식은 참조 형식이다. Struct와 Class의 차이점 우선 테스트를 진행 할 Class와 Struct를 만들었다. 둘은 현재 이름과 나이, 이름과 나이를 표시해주는 함수를 공통적으로 가지고 있으며 이를 통해 둘의 차이점을 알아보고자 한다. 선언한 Class와 Struct를 Main부분에서 사용하는 부분이..
· TIL/C#
접근제한자가 존재한다는 사실은 대부분 알고있지만 프로젝트와 같은 작업을 하지 않는 이상 쓸 기회가 없다. 마치 코딩 알고리즘 문제를 풀 때 굳이 접근제한자를 사용하지 않는 것과 같은 이유다. 그렇기 때문에 접근제한자의 종류와 차이점에 대해 설명하고자 한다. 1. public public으로 선언된 것은 어떠한 곳에서든 제약을 받지 않고 사용할 수 있다. 접근이 쉬운만큼 남용하게 되면 독립적으로 될 수 없기 때문에 안좋은 코드가 될 수 있다. 2. private private로 선언된 것은 해당 클래스 내에서만 접근이 가능하다. 반대로 말하자면 클래스 내를 제외한 모든 곳에서 접근이 불가능하다. 다른 클래스에 의해 사용되는 것을 방지하기 위해 주로 사용한다. 3. protected protected로 선언..
· TIL/C#
c#에서 ref와 out을 정말 비슷한 기능을 가지고 있다. 실제로 둘의 기능을 사용하다 보면 개념을 확실하게 인지하지 않는 이상 무슨 차이인지 모르고 그냥 사용한다. 그렇기 때문에 오늘 이 둘의 차이를 확실하게 설명하고자 한다. 1. ref ref는 참조 값을 메서드 인수로 전달한다. 다르게 말하자면 호출자에게 참조 값을 보내준다는 것이다. 이 함수를 실행해보면 결과 값은 5가 나오게 된다. 하지만 ref의 개념을 이 함수에 적용해보면 참조 값 (number = 3) 이 함수에서 호출한 val 에 전달 한 것이다. 요약하자면 number = 3의 참조 값이 메서드의 ref int val에 들어가고 메서드의 ref int val 이 메서드 안에 있는 val = 5를 가져오게 된다. (인자를 함수로 넘겨줌..
· TIL/잡담
int 와 float는 똑같은 4byte의 크기인데 왜 표현가능한 수의 범위가 다를까? 이 문제에 대한 해답을 간략하게 설명하고자 한다. 1. int와 float의 구조 다들 알다시피 int와 float는 4byte 즉, 총 32비트로 구성되어있다. 하지만 float는 int와 달리 굉장히 큰 범위를 가지고 있다. 그러한 이유는 다음과 같다. int는 단순한 32비트 구조이기 때문에 2^-31 ~ 2^31 - 1 의 범위를 갖는다. 하지만 float는 32비트가 int처럼 단순하게 하나로 구성돼있는 것이 아닌 부호비트(1bit) * 지수(8bit) * 유효자리비트(23bit)의 32비트로 구성되어있다. 그렇기 때문에 int는 대략 42억의 수를 표현할 수 있는 반면에 float는 1.175494351 E..
Sh_Blog
'TIL' 카테고리의 글 목록 (4 Page)