본문 바로가기

C#/Knowledge

(27)
선형 자료 구조 - LinkedList, Stack, QueQue 1-1. LinkedList의 특성을 설명해주세요.순서 유지 : 데이터는 삽입된 순서대로 유지 동적 크기 : 필요에 따라 노드를 추가하거나 제거하여 크기를 조정 삽입/삭제 효율성 : 중간 위치에 데이터 삽입/삭제 작업이 빠름 (O(1) 시간 복잡도) 임의 접근 비효율성 : 특정 인덱스의 데이터에 직접 접근하는 데 느림 (O(n) 시간 복잡도) 추가 메모리 사용 : 각 노드는 데이터와 다음 노드를 가리키는 포인터를 저장하기 때문에 메모리 사용량이 증가1-2. LinkedList는 언제 사용하면 좋은 자료구조인가요? 반대로 언제 사용하기 불리할까요? 데이터 순서가 중요한 경우 : 데이터 삽입/삭제 순서를 유지해야 하는 경우 중간 삽입/삭제 빈도가 높은 경우 : 데이터 목록의 중간 부분에서 자주 삽입/삭제 작..
C# 심화 문법 1-1. 다음 코드에서 제네릭을 사용한 부분을 식별하고, 해당 코드가 제네릭을 사용하지 않았을 때 발생할 수 있는 문제점에 대해 설명하세요. 이 코드에서는 제네릭을 사용하여 Box 클래스를 정의하고 있다.제네릭을 사용하지 않으면 다음과 같은 나타낼 수 있다.이 접근법에서는 제네릭을 사용하지 않기 때문에 다음과 같은 문제점이 발생할 수 있다.ⓐ 타입 안정성 부족Value 속성이 object 타입이므로, Value에 어떤 타입의 값이든 할당할 수 있다. 이는 타입 안전성을 보장하지 않는다.예를 들어, int 값을 기대하고 사용하는 경우, Value가 실제로 string일 수도 있다. 이는 런타임 오류를 초래할 수 있다.ⓑ 박싱 및 언박싱 오버헤드값 타입(int, DateTime 등)은 object 타입으로 ..
GC 가비지 컬렉터 1-1. 위의 코드가 문제가 되는 이유를 메모리 관점에서 설명해주세요. ⓐ 문자열의 불변성C#에서 문자열은 불변(immutable)이다. 즉, 한 번 생성된 문자열은 변경될 수 없다. 문자열에 새로운 내용을 추가할 때마다 새로운 문자열 객체가 생성된다.LogMessages에 메시지를 추가할 때마다, 새로운 문자열 객체가 생성되고 기존 문자열의 내용과 새로 추가된 문자열의 내용이 모두 복사된다. 이는 메모리 사용을 비효율적으로 만든다.ⓑ 메모리 재할당과 복사LogMessages가 길어질수록 새 문자열을 만들 때 필요한 메모리도 늘어나게 된다. 기존 문자열이 1000자의 길이를 가지고 있다면, 새 문자열을 생성하기 위해 기존 1000자와 새로 추가될 문자열의 길이만큼의 메모리가 필요하다.이는 반복될수록 더 ..
상속과 인터페이스 1-1. 위와 같은 코드에서, 다음과 같이 다중 상속을 하는 것이 가능할까요? 가능/불가능하다면 이유는 무엇일까요?불가능하다.C#에서는 클래스의 다중상속을 지원하지 않는다. 만약 C와 B가 인터페이스였다면 다중 상속이 가능했을 것이다.1-2. 만약 C#에서 다중 상속이 지원되었다면, 클래스 D는 어떤 문제에 직면하게 될까요?클래스 B or C를 살펴보면 같은 이름의 메서드가 존재한다. 이런 경우 모호성 문제가 발생할 것이라고 생각한다. 이는 "다이아몬드 문제(Diamond Problem)"라고 불리며, 어떤 Display 메서드를 호출해야 할지 결정하는 데 어려움이 있다.2-1. 클래스를 다른 클래스로 상속하기 위한 방법은 무엇인가요?상속선언을 통해 파생 클래스가 기본 클래스의 모든 공용 및 보호된 멤버..
스택 메모리 vs 힙 메모리 1-1. 다음 struct 코드의 결과를 예측해 보세요.10 30구조체는 값 형식이므로 point2.x 값을 바꾸어도 값이 바뀌지 않는다.1-2. 다음 class 코드의 결과를 예측해 보세요.30 30 클래스는 참조 형식이니까 point2.x 를 참조해서 x 값이 모두 30으로 바뀐다2-1. 참조 형식과 값 형식에 대해 설명해주세요.참조 형식: 실제 데이터가 저장된 메모리 위치(참조)를 저장하는 데이터 유형이다. >> 힙 메모리에 할당, 더 큰 메모리 공간을 사용하며 동적 메모리 할당에 적합 , 실제 데이터의 참조(메모리 주소)가 복사된다. 값 형식: 변수가 실제 데이터를 저장하는 데이터 유형이다. 값을 직접 메모리에 저장한다. >> 스택 메모리에 할당 , 빠르게 접근 가능 , 기본 데이터 타입들 , ..
콜백, delegate, event 1-1. 위 코드의 출력 결과는 무엇인가요? 그 이유는 무엇인가요?① MathOperation 델리게이트에 Add 메서드를 할당② MathOperation(3, 4)를 호출하면 Add(3, 4)가 호출되어 3 + 4 = 7이 반환되고, 출력 ③ 이후 MathOperation 델리게이트에 Multiply 메서드를 할당 ④ MathOperation(7, 5)를 호출하면 Multiply(7, 5)가 호출되어 7 * 5 = 35가 반환되고, 출력 1-2. 위 코드의 Main 함수를 아래처럼 바꿔도 같은 방식으로 동작할까요? 그 이유는 무엇인가요?위 코드의 Main 함수를 아래와 같이 바꿔도 같은 방식으로 동작한다.그 이유는 Func는 MyCallback 델리게이트와 동일한 서명을 갖기 때문이다.즉, 두 개의 i..
객체지향 프로그래밍 1-1.  위 코드에서 삼각형 Triangle 클래스를 새로 작성한다고 했을 때, AreaCalculator의 코드를 수정하지 않고 AreaCalculator가 삼각형의 넓이를 계산하도록 만들 수 있을까요?인터페이스를 사용하는 방법이 있다.모든 도형 클래스가 동일한 CalculateArea 메서드를 갖게 만들어 AreaCalculator가 도형 객체를 통해 면적을 계산할 수 있다.1-2. 1번 질문 답변을 바탕으로 위 코드가 유지보수 측면이 어려운 부분을 설명해주세요. ⓐ 인터페이스 구현의 강제성모든 새로운 도형 클래스는 IArea 인터페이스를 구현해야 한다.ⓑ 형 변환 및 타입 검사 AreaCalculator 클래스가 다양한 도형의 면적을 계산할 수 있도록 하려면 인터페이스를 통해 접근해야 한다. 이는..
객체와 한정자 1-1. 위 예제 코드에서 Car는 무엇을 나타내나요? car1과 car2는 무엇을 나타내나요?Car : 클래스로 자동차의 브랜드, 모델, 연식과 같은 속성을 정의한다. 또한 Car 클래스에는 자동차의 정보를 출력하는 DisPlayInfo라는 메서드가 포함되어 있다.car1과 car2는 Car클래스의 인스턴스이다. 이는 Car 클래스의 설계도를 기반으로 생성된 구체적인 객체를 의미한다. 각각car1과 car2는 독립적인 자동차를 의미하며 해당 자동차의 정보를 갖고 있다. 1-2. 위 코드에서 Car클래스에 정의된 메서드를 호출할 때 car1과 car2를 사용해야 하는 이유는 무엇인가요?Car클래스의 DisplayInfo 메서드는 인스턴스 메서드이다. 이는 특정 인스턴스와 연관된 메서드로, 해당 인스턴스의..
파라미터 <-> 메서드 <-> 리턴 관계도
배열 / 리스트 선언하는 다양한 방법들 및 콤보 * 자주 사용되는 콤보 foreach
클래스에 대하여 더 알아보기 클래스에 대하여 알아보려 했더니 뜬금 없는 그림이 나왔다여기에 등장한 사람들은 누구일까? 왼쪽에 하늘을 가리키는 사람은 플라톤, 그리고 정면을 가리키는 사람은 아리스토텔레스학문의 원천이라고 할 수 있는 사람들이다 컴퓨터의 영역을 탄생시킨 사람들은 서양인이다그리고 컴퓨터 뿐만이 아닌, 대다수 학문의 시초는 서양이라고 볼 수 있다그러므로 우리가 배우는 학문에 대하여 이해하고 나아가려면서양인들의 철학 및 생각기반을 이해하고 중요하게 여길 필요가 있다 결국, 우리가 사용하고 있는 클래스도 시작점은 이 곳이다. 플라톤이 가리키는 하늘, 굉장히 추상적인 세계이며 우리가 흔히 말하는 이데야라고 하는 세계이다우리가 사용하는 클래스는 플라톤의 철학을 받아들였으며아리스토텔레스의 철학을 받아들인 것이 프로토타입이다 사과사과..
예외 처리 [ 예외 처리 ]예외 상황에 대비하여 프로그램을 안정적으로 유지오류 상황을 적절히 처리하고, 프로그램을 계속 실행프로그램의 안정성을 높이고 디버깅을 용이C#에서는 try-catch 블록을 사용하여 예외 처리를 수행try 블록 내에서 예외가 발생할 수 있는 코드를 작성하고, catch 블록에서 예외를 처리          catch 블록의 우선순위catch 블록은 위에서부터 순서대로 실행되며, 예외 타입에 해당하는 첫 번째 catch 블록이 실행예외 타입은 상속 관계에 있는 경우 상위 예외 타입의 catch 블록이 먼저 실행        finally 블록의 역할과 사용법finally 블록은 예외 발생 여부와 상관없이 항상 실행되는 코드 블록finally 블록은 예외 처리의 마지막 단계로, 예외 발생 시..