[면접대비] C# 기초
댓글 2
댓글을 작성하려면 로그인이 필요합니다.
혼자 공부하면서 적어둔 것이라 틀린 내용이 있을 수 있습니다.
컴파일러는 전체 코드를 한 번에 기계어로 변환 후 실행하고 인터프리터는 코드를 한 줄씩 읽으면서 즉시 실행하는 방식입니다.
C#은 객체지향 기반의 정적 타입 언어입니다. 타입 안정성이 높고 가비지 컬렉터를 통해 메모리를 자동으로 관리한다는 특징이 있습니다. 람다, 제네릭, LINQ같은 다양한 기능을 제공해서 간결하고 읽기 쉬운 코드 작성이 특징입니다.
마이크로소프트가 만든 소프트웨어 플랫폼으로 프로그램을 만들고 실행하기 위한 도구와 라이브러리 모음입니다. Windows, macOS, Linux 등 다양한 운영체제에서 실행 가능합니다.
소스 코드를 실행 가능한 프로그램으로 변환하는 과정
코드에 직접 작성된 값 자체입니다. 정수, 실수, 문자, 문자열, 불 형식이 있습니다
리터럴은 코드에 고정된 값이고 변수는 저장하는 공간입니다
참조형식이지만 값 형식처럼 동작하는 특별한 형식입니다
한번 생성된 문자열은 변경할 수 없다는 특징이 있습니다
C#에서 데이터 형식 키워드는 .NET 구조체 클래스에 대한 별칭입니다.
C#에서 Int는 .NET의 System.Int32로 되어있습니다.
문자열은 불변 객체이고 문자열을 변경하는 것처럼 보이는 동작도 실제로는 문자열을 새로 생성하는 것입니다
StringBuilder는 문자열을 반복적으로 수정하거나 연결할 때 사용하는 클래스입니다. string은 불변이라 수정할 때마다 새로운 객체가 생성되지만, StringBuilder는 내부 버퍼를 활용하기 때문에 불필요한 객체 생성을 줄일 수 있습니다. 따라서 반복문이나 문자열을 연결할 때 StringBuilder를 사용해야합니다.
암시적 형식 변환은 작은 타입에서 큰 타입으로 변환할 때 자동으로 수행되는 동작입니다.
명시적 형식 변환은 큰 타입에서 작은 타입으로 변환할 때 캐스트 연산자를 사용하여 수행되는 동작입니다.
명시적 변환은 데이터 손실이 발생할 수 있습니다
컴파일러가 초기화 값을 보고 타입을 자동으로 추론하는 키워드입니다.
선언과 동시에 초기화 해야하고 한 번 타입이 결정되면 변경 불가합니다.
직사각형 배열은 하나의 다차원 배열로 구성되며 각 행과 열의 크기가 일정합니다.
가변 배열은 배열의 각 요소가 다른 배열을 참고하는 구조이기 때문에 각 행의 길이를 다르게 설정할 수 있습니다.
함수 멤버는 메서드, 프로퍼티, 인덱서 등 동작을 정의하는 멤버의 총칭이다.
같은 코드를 여러번 반복해야할 때 필요합니다.
재사용성, 유지보수, 가독성이 좋습니다
함수 중복으로, 같은 이름의 함수를 매개변수를 다르게 하여 여러 개 정의하는 것
매개변수의 개수, 매개변수의 타입, 매개변수의 순서가 달라야합니다
중괄호 대신 ⇒ 연산자를 사용하여 간결하게 함수를 정의하는 문법입니다
프로그램을 순차적인 명령어의 집합으로 구성하는 패러다임입니다
데이터(필드)와 기능(메서드)을 하나로 묶는 단위
클래스는 참조 형식이고 구조체는 값 형식입니다. 클래스는 객체의 참조를 전달하지만 구조체는 값을 복사하여 전달합니다.
클래스는 복잡한 데이터나 상속이 필요한 경우 사용하고, 구조체는 작고 간단한 데이터, 불변 데이터로 사용됩니다.
정적 멤버는 static으로 정의 된 멤버로 호출할 때 클래스 명으로 호출하지만
인스턴스 멤버는 new 키워드로 개체를 생성한 후 호출해야합니다
필드, 메서드, 생성자, 소멸자, 프로퍼티, 이벤트, 인덱서 등이 있다
현재 클래스나 구조체의 인스턴스 자신을 참조하는 키워드입니다
클래스 내부에 선언된 변수입니다. 객체가 생성될 때 메모리에 할당되며 클래스 전체에서 사용가능합니다
public은 어디서든 접근 가능하고
private은 클래스 내부에서만 접근 가능하고
protected는 클래스 및 상속 받은 클래스에서 접근 가능합니다
클래스의 인스턴스가 생성될 때 자동으로 호출되는 메서드
같은 클래스 내의 다른 생성자를 호출할 수 있는 생성자 이니셜라이저
정적 생성자는 해당 타입이 처음 사용될 때 한번만 자동 호출되어 정적 멤버를 초기화하고
인스턴스 생성자는 객체가 생성될 때마다 호출되어 인스턴스 멤버를 초기화합니다
필드 선언할 때나 생성자에서만 값을 할당할 수 있고, 이후에는 값을 변경할 수 없는 읽기 전용 필드입니다
중괄호 대신 ⇒를 사용해 간결하게 표현하는 문법
객체가 메모리에서 해제되기 직전에 자동으로 호출되는 메서드
직접 호출은 안되고 GC가 자동으로 호출합니다
더 이상 사용하지 않는 객체를 자동으로 찾아서 메모리를 해제하는 .NET의 기능
시스템 메모리가 부족할 때, GC 자체 판단에 따라 필요하다고 결정했을 때, GC.Collect()메서드를 명시적으로 호출했을 때
C심화 면접 대비(4)
C심화 면접 대비 (3)
C심화 면접 대비(2)
기초 포스팅인데도 실무나 면접에 꼭 필요한 알짜배기 내용들이 가득하네요! 본문에 GC.Collect()를 명시적으로 호출할 수 있다고 적어주신 부분이 눈에 띄는데, 혹시 면접에서 '그럼 GC.Collect()는 평소에 우리가 코드에서 직접 호출하는 게 좋을까요, 아니면 프레임워크가 알아서 하도록 내버려두는 게 좋을까요?' 같은 실무적인 질문이 나오면 뭐라고 대답하면 좋을까요? ㅎㅎ 오늘도 잘 읽고 갑니다!
댓글 감사합니다. 저는 GC를 직접 호출하지 않고 그냥 내버려두는게 좋다고만 알고 있어서, 말씀하신 질문이 나왔을 때 많이 당황했을 것 같습니다. 덕분에 해당 질문에 대해 'GC는 기본적으로 직접 호출하지 않고 프레임워크가 알아서 하도록 내버려두는게 좋습니다. GC는 메모리를 회수하는 과정에서 성능을 많이 잡아먹기 때문입니다. 하지만 대량의 객체가 한꺼번에 불필요해진 것이 명확하고, 즉시 메모리 회수가 필요한 예외적인 상황에서는 직접 호출을 고려할 수 있습니다.'라고 대답할 것 같습니다.