본문 바로가기
반응형
[C#] as, is 연산자 공통점 둘다 객체를 캐스팅 할 때 사용한다. as 연산자 as 연산자는 캐스팅에 성공하면 캐스트 결과를, 실패하면 null을 리턴한다. 오브젝트의 타입을 변환할 때, 컴파일에러 없이 런타임 에러만 나오는 예외상황을 방지해준다. 참조 타입간의 캐스팅만 가능하다. Parent parent = new parent(); Parent parent2 = new children(); Children child = new children(); child = parent as Children; if(child != null) { children.Method(); //실행안됨 } child = parent2 as Children; if(child != null) { children.Method(); //실행됨 } as 연.. 2023. 5. 14.
[C#] 람다 식, 화살표, Lambda, Arrow Function 개요 최신 C#은 더 깨끗하고 간결한 코드를 작성하는 방법을 끊임없이 찾고 있습니다. 이 목표를 달성하는 데 도움이 되는 기능 중 하나는 화살표 기능입니다. 이 블로그 게시물에서는 C# 화살표 함수가 무엇인지, 어떻게 작동하는지, 왜 개발자에게 유익한지 살펴보겠습니다. 화살표 함수란? C# 6.0에서 도입되었습니다. 람다 식이라고도 합니다. 화살표 함수는 C#에서 익명 함수를 정의하기 위한 간단한 구문을 제공합니다. 이후 특히 대리자, 함수형 프로그래밍 및 비동기 작업으로 작업할 때 코드를 단순화하기 위한 인기 있는 선택이 되었습니다. 장점 가독성: 짧고 단순한 함수 정의의 경우 코드 가독성을 향상시킵니다. 생산성 향상: 화살표 함수는 명시적인 반환문을 없애 프로그래밍 생산성을 높입니다. 코드 유지 관리.. 2023. 5. 14.
[C#] Method Hiding vs Method Overriding 개요 기본 클래스 메서드를 효과적으로 숨길 수 있는 Method Hiding을 소개합니다 숨김은 개발자가 파생 클래스에서 부모 클래스의 메서드와 동일한 이름으로 새 메서드를 정의하는 경우에 발생합니다. 이 글에서는 메서드 숨기기의 개념이 메서드 재정의Overriding와 어떻게 다른지, 언제 사용하는지 살펴보겠습니다. 숨기기Hiding와 재정의Overriding C#에서 메서드 재정의는 부모 클래스의 메서드의 이름을 그대로 사용하면서도 파생 클래스가 메서드 동작내용을 바꿔쓸 수 있도록 합니다.메서드 재정의는 베이스 클래스의 메서드를 가상 메서드(Virtual Method)로 선언하여 자식 클래스에서 재정의할 수 있도록 합니다. 메서드 숨기기는 베이스 클래스 메서드가 가상으로 선언되지 않더라도 new 키워.. 2023. 5. 14.
[C#] 참조 형식(Reference Types)과 값 형식(Value Types) C# 형식은 참조 형식과 값 형식 두 가지가 있습니다. 참조 형식 (Reference Types) 참조 형식은 Heap 공간에 데이터를 할당합니다. 힙 영역은 동적으로 할당되는 메모리로, 프로그래머가 원하는 시점에 메모리에 들어가는 변수들이 힙 영역으로 들어갑니다. 그리고 가비지 컬렉터는 주기적으로 힙 영역을 청소합니다. 힙 영역에 있는 값이 어떠한 스택에 의해서도 참조되고 있지 않으면 가비지컬렉션의 대상이 됩니다. 참조 형식의 변수에는 데이터(오브젝트)에 대한 '가리킴(참조)'이 저장됩니다. 우리가 어떤 파일을 폴더 안에 넣어두고, 바탕화면에는 바로가기 폴더를 만들어 놓듯이, 참조 변수는 실제 데이터가 어디에 있는지를 가리키는 정보를 가집니다. 값 형식의 변수에는 해당 데이터가 직접 들어가 있습니다. .. 2022. 9. 10.
[C#] Immutable과 Mutable 타입 Immutable과 Mutable 프로그래밍에서 mutable과 immutable은 객체의 상태와 변수를 할당하고 변경할 수 있는 방법을 나타냅니다. 오늘날 대부분의 애플리케이션은 동적입니다. 그러니 데이터가 어떻게 변경되는지가 중요합니다. Mutable과 immutable은 각각 "변경할 수 있는"과 "변경할 수 없는"을 의미합니다. 변경 가능한 타입은 인스턴스가 생성된 후 데이터 멤버를 변경할 수 있는 타입입니다. 변경 불가능한 타입은 인스턴스가 생성된 후에 데이터 멤버를 변경할 수 없는 타입입니다. Immutable Type : 변경할 수 없는 타입 개체를 생성하고 변경하지 않아야 프로그래밍의 부작용을 줄일 수 있을 때 사용합니다. 변경 불가능한 오브젝트의 값을 바꿀 때는 새로운 메모리가 생성되고 .. 2022. 9. 10.
[C#] 묵시적(Implicit), 명시적(Explicit) 형변환 형식 변환은 크게 묵시적(암시적) 형변환과 명시적 형변환으로 구분할 수 있습니다. 묵시적 형변환은 변환 형식이 안전하게 유지됩니다. 데이터가 손실되지 않는 특성으로 인해 특수한 구문이 필요치 않습니다. 예를 들어 숫자 형식 중 int는 그보다 큰 long 형식에 그대로 담을 수 있습니다. Data TypeSize (bytes)Range byte 1 0..255 sbyte 1 -128..127 short 2 -32,768 .. 32,767 ushort 2 0 .. 65,535 int 4 -2,147,483,648 .. 2,147,483,647 uint 4 0 .. 4,294,967,295 long 8 -9,223,372,036,854,775,808 .. 9,223,372,036,854,775,807 ulo.. 2022. 9. 10.
[C#] 박싱(Boxing)과 언박싱(Unboxing) 박싱과 언박싱을 알아야 하는 이유가 개념 자체보다 중요합니다. 결국, 성능 때문에 우리는 박싱과 언박싱에 주목해야 합니다. 여러분은 이미 박싱과 언박싱을 많이 사용하고 있고, 개념도 어렵지 않습니다. 박싱/언박싱 간단 설명 박싱은 값 타입을 참조 타입으로 바꾸는 행위입니다. 언박싱은 반대입니다. 박싱이든 언박싱이든 스택 메모리와 힙 메모리를 오가고 복제하는 과정에서 오버헤드가 발생합니다. int i = 1; // int는 값 타입, object는 참조 타입 object o = i; // boxing int j = (int)o; // unboxing 문제 상황 클래스는 참조 타입입니다. 참조 타입은 인스턴스화 시 힙 메모리에 저장됩니다. 구조체는 값 타입입니다. 선언 시 스택 메모리에 저장됩니다. 박싱-언.. 2022. 9. 10.
[C#] 깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy)의 이해 얕은 복사 Shallow Copy 참조만 복사합니다. 복사된 객체를 수정하면 원본 객체도 바뀝니다. 주의하세요! 얕은 복사의 예시 class Person { public string Name; public int Age; } Person person1 = new Person { Name = "John", Age = 30 }; Person person2 = person1; // Shallow copy person2.Age = 35; Console.WriteLine(person1.Age); // Output: 35 이 예제에서 person1과 person2는 두 개의 다른 오브젝트이지만 동일한 주소 오브젝트를 공유합니다. 깊은 복사 Deep Copy 객체의 독립적인 복사본을 만들 때 사용합니다. 깊은 복사의.. 2022. 9. 10.
[C#] const와 readonly 차이 변수를 초기화하는 시점 const는 코드에 명시된 변수값을 compile 시점에 확정합니다. readonly는 프로그램이 메모리에 올라가는 runtime 시점에 값을 확정합니다. const는 컴파일 타임 상수이며, readonly는 런타임 상수입니다. 상수는 프로그램이 종료될 때까지 변경하거나 수정할 수 없습니다. 그렇다면 차이점은 무엇인지 알아봅시다. const 컴파일 타임 상수입니다. 상수는 기본적으로 정적(Static)입니다. 내장자료형 (정수형, 실수형, Enum, String)에 대해서만 사용 할 수 있습니다. 변수 선언과 동시에 값을 초기화해야 합니다. 클래스 내부의 상수라고 해도 인스턴스화 없이도 값에 접근할 수 있습니다(static과 비슷합니다). 메모리 할당 위치는 기본적으로는 Stack.. 2022. 9. 10.
[C#] ref, in, out, params 매개변수 한정자(ref, in, out, params)란? 매개변수 한정자는 메소드가 받는 인자가 어떤 형태여야 하는지, 어떻게 취급되어야 하는지 명시하는 키워드입니다. 기능과 용도가 달라서 제대로 이해하려면 하나씩 짚어보아야 합니다. ref 매개변수 한정자 변수의 주소를 복사해서 할당과 메소드를 통해 원래 값을 조작할 수 있습니다. 값 형식은 원래 이러한 방식으로 조작할 수 없었다는 사실을 기억합시다. ref 키워드를 달아서 변수의 주소를 복사해보면 다음과 같은 결과를 얻을 수 있습니다. 할당을 통해 변수를 조작 using System; public class Program { public static void Main() { int a = 0; Console.WriteLine(a); ref int a.. 2022. 9. 10.
[C#] Abstract(추상) vs Virtual(가상) vs Interface(인터페이스) 차이 Virtual virtual은 재정의(override)가 선택사항이다. virtual 키워드가 포함된 클래스는 인스턴스화가 가능하다. 상속할 때 어떻게 할 것인지의 문제와 결부되어 있으므로 상속을 염두에 둔 클래스에 적용한다. 일반 메소드는 new를 통해 재정의할 수 있지만 부모 클래스를 기반으로 자식을 인스턴스화하면 부모 메소드가 나온다. 일반 메소드와 달리 override를 통해 재정의하면 부모 클래스를 기반으로 자식을 인스턴스화하더라도 제대로 자식 메소드가 나온다. 버추얼 메소드와 일반 메소드의 상속 차이 // Online C# Editor for free // Write, Edit and Run your C# code using C# Online Compiler using System; publi.. 2022. 8. 30.
[C#] 메소드 재정의 다형성은 메서드 재정의 및 메서드 오버로딩을 포함하는 OOPS 원칙 중 하나입니다. Virtual 및 Override 키워드는 메서드 재정의에 사용되고 new 키워드는 메서드 숨김에 사용됩니다. 이 포스팅에서는 C# 코드를 사용하여 각 키워드에 대해 자세히 설명합니다. 단순한 클래스 상속 클래스 A, B, C가 있는 상속 관계를 생각해 봅시다. A는 상위/기본 클래스이고 B는 클래스 A에서 파생되며, C는 클래스 B에서 파생됩니다. Class A > Class B > Class C Test() 메서드가 기본 클래스 A에 선언되어 있습니다. 클래스 B와 C는 메서드가 없습니다. using System; namespace Polymorphism { class A { public void Test() { Co.. 2022. 8. 30.
반응형