본문 바로가기

TIL

(81)
[TIL]2024-3-15 / 57일차 - 최종 프로젝트 2주차 5일차 1. 오늘의 기술 면접 - 박싱과 언박싱에 대하여 설명해주세요. (꼬리질문) 박싱, 언박싱을 사용할 때 주의해야 할 점이 있다면 무엇이 있나요? 박싱과 언박싱이란? 단순하게는 박싱(boxing)은 값(value) 형식을 참조(reference) 형식으로 변환 해주는 것 언박싱은 박싱했던 값을 다시 원상태로 복귀 시키는 것을 의미합니다. object형식을 통해 진행 되는데 박싱하면 힙 영역에 값 형식을 새 개체에 복사하여 할당시켜 저장하게 됩니다. 단순히 스택에서 힙으로 값을 복사하는 행위는 박싱이라고 하지 않습니다. 사용 시 주의할 점? 우선 새로운 개체로 복사하여 저장한다는 점에서 유추할 수 있듯이 메모리 사용량에 주의해야 합니다. 또한 값을 옮기는 데에 메모리 참조를 많이 하게 되어 시간적으로도 오버..
[TIL]2024-3-14 / 56일차 - 최종 프로젝트 2주차 4일차 1. 오늘의 기술 면접 질문 - 가비지 컬렉션이란 무엇인지 설명해주세요 가비지 컬렉션은 더 이상 참조되지 않은 객체를 해제하여 메모리 누수를 방지하는 프로세스입니다. 모든 메모리를 순회하는 것보다 효율적인 관리를 위해 3세대의 힙 메모리로 나뉘어 관리되는데, 새로 만든 개체는 0세대 메모리에 할당되며 이것이 넘치게 되면 가비지 컬렉션이 일어나고 아직 참조되고 있는 객체들(라이브 객체들)은 오래된 순서대로 1세대 -> 2세대로 승격되는데 2세대로 갈 수록 할당되는 메모리가 커지게 됩니다. 만약 2세대 메모리도 넘치게 된다면 모든 세대에 대한 기비지 컬렉션이 실행되게 됩니다. 이때는 프로그램이 멈추며 가비지 컬렉션이 진행되기 때문에 이러한 일이 일어나지 않도록 유의해야 합니다. 가비지 컬랙션의 과정은 크게 ..
[TIL]2024-3-13 / 55일차 - 최종 프로젝트 2주차 3일차 1.오늘의 기술 면접 질문 - 가비지 컬렉터를 회피하기 위한 전략은 무엇이 있나요? 가비지 컬렉터는 유용하면서도 컬렉션을 실행하며 성능저하가 발생하기 때문에 가비지 컬렉션을 회피할 수록 프로그램 성능이 늘어날 수 있는 결과가 된다. System.IDisposable 인터페이스에 있는 void Dispose()로 자체적으로 가비지 컬렉션을 미리 해줄 수 있고 애초에 메모리가 쌓이는 것을 방지하기 위해 힙 메모리의 사용 보다는 스트럭트 메모리의 사용을 하는 등의 방법과 객체를 생성하는 데에 메모리에 할당하는 것을 최소화 하는 방법 (오브젝트 풀링으로 재사용하는 객체는 미리 생성하고, 임시 객체의 생성을 최소화, 한 번에 너무 큰 객체를 생성하려고 하지 않기) 참조 관계를 최소화 하는 방법으로, 이는 참조 관..
[TIL]2024-3-12 / 54일차 - 최종 프로젝트 2주차 2일차 1. 오늘의 기술면접 - 가비지 컬렉터에 대해 설명해주세요 답안: 힙 메모리 영역은 공간이 유한하기 때문에 메모리 누수가 나지 않도록 유의해야 하는데 메모리의 주어진 공간을 순차적으로 채우는 특징으로 인해 할당을 반복하다 보면 힙 영역의 마지막 주소에 도달하게 되는데 이때 가비지 컬렉터가 더이상 사용하지 않는 메모리를 수집하여 공간의 할당을 해제하는 개념 이 필요없는 메모리 수집을 가비지 콜렉션(Garbage Collection)이라고 한다. 2. 오늘의 알고리즘 코드카타 - 기사단원의 무기 답안 : using System; public class Solution { public int solution(int number, int limit, int power) { // 1부터 number까지, 기사번호..
[TIL]2024-3-11 / 53일차 - 최종 프로젝트 2주차 1일차 오늘은 알고리즘 코드카타를 풀지 못했다... 1. 오늘의 기술 면접 문답 - struct와 class를 비교해서 설명해주세요. 답안: Struct와 Class는 우선 형태(Type)의 차이가 있다. Struct는 값 타입이고 Class는 참조 타입이다. Struct는 값(Value) 그 자체를 가지고 있으며, 변수에 값이 할당될 때 복사되어 메모리에서 스택에 저장됩니다. Class는 객체의 참조(Reference)가 변수에 할당되며, 변수가 실제 객체가 저장된 메모리 주소를 가리키는 방식으로 메모리에서는 힙(Heap)에 저장됩니다. 그렇기에 Struct는 복사된 각 값이 서로 독립적이어서 변경되어도 다른 변수에 영향을 주지 않지만, Class는 같은 객체를 참조하는 여러 변수가 있을 시 하나를 변경하면 ..
[TIL]2024-3-08 / 52일차 - 최종 프로젝트 1주차 3일차 1. 오늘의 기술면접 질문 - 접근제한자란 무엇이며, 각각 어떤 차이가 있는지 비교해서 설명해주세요. 답안 : 접근 제한자란 클래스나 함수 등에 앞에 선언되어 접근 수준을 정합니다. 일반적으론 Internal을 제외한 Public, Private, Protected를 사용하게 되며 Public은 완전 개방으로 다른 클래스에서 모두 접근이 가능하고, Private는 완전 제한으로 해당 클래스 내에서만 접근이 가능하고, Protected는 일부 제한으로 상속 받는 자식 클래스들 까지 접근이 가능해집니다. 2. 오늘의 알고리즘 코드카타 - 덧칠하기 답안 : using System; public class Solution { public int solution(int n, int m, int[] section)..
[TIL]2024-3-07 / 51일차 - 최종 프로젝트 1주차 2일 1. 오늘의 기술면접 질문 - 'ref'와 'out'의 사용 시 차이는 무엇인가요? 두 한정자 모두 개체를 참조하는 데에 이용되지만 차이가 존재합니다. 요약하자면 ref는 기존 변수를 메서드에서 수정하려 할 때 사용하는 경우가 많고, out는 메서드 내에서 생성되는 값을 반환할 때 사용하는 경우가 많다. 또한 여러 개의 결과가 생성되는 경우 함께 사용되는 경우가 많다. 2. 오늘의 알고리즘 코드카타 - 소수 만들기 답안 : using System; class Solution { public int solution(int[] nums) { int answer = 0; //총 3개의 수를 더해야 하므로 for문 3번 반복 for(int i=0; i
[TIL]2024-3-06 / 50일차 - 최종 프로젝트 시작날 1. 오늘의 기술 면접 질문 - float와 int의 표현 가능한 수의 범위가 다른 이유는 무엇인가요? 답안 : int와 float은 같은 메모리 양임에도 float이 소수점도 표현 가능한 등 차이가 존재하는데 이는 값을 저장하는 방법의 차이 때문입니다. 그러면 원리는 모르더라도 float만 쓰면 되지 않느냐라는 의문이 들 수 있는데 세부적으로 둘이 각각 배정된 32비트를 어느 구조로 배분하느냐는 차이가 생깁니다. 요점은 이러한 차이로 인해 float은 소수점을 표현할 수 있지만 그를 넘어서게 되면 (소수점에서는 흔하게 일어날 수 있는 상황) 근사치를 취하게 됩니다. 즉 표현할 수 없는 부분은 잘라버리고 비슷한 값을 가져가는 것으로 정확도가 100%가 아니게 됩니다. 그에 반해 int는 오직 있는 비트만..