본문 바로가기

C#80

[C#][Study][기초다지기] ref, out의 차이점 1. out - 매개변수를 참조로 전달 - 인수가 초기화 되지 않았어도 전달 가능 - 내부에서 변수에 값을 할당 해주어야 함 2. ref - 매개변수를 참조로 전달 - 인수가 초기화 되지 않은 경우 전달 불가(오류 발생) ex) using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace command { class Program { public static void Out(out int x) { x = 1; // 내부에서 해당 변수에 값을 할당 해주어야 함! x++; // 단독으로는 쓰일 수 없음 } public static void Reference(ref int x) { x++; } sta.. 2023. 9. 16.
[C#][Study][기초다지기] Main함수, 명령줄 인수 Main(string[] args) : 명령줄 인수 - Main() 함수는 프로그램 실행을 시작하는 곳이기에 다른 어떤 메소드에서도 매개변수를 허용하지 않는다. - Command line(명령줄)을 통해 매개변수를 허용하는데 런타임 시 n개의 매개변수를 받을 수 있는 배열형 매개변수를 선언 받는다.(Main(string[] args)) - 명령줄 인수를 사용해보는 두가지 방법이 있다. [사용법 1] cmd로 실제 매개변수 선언 [사용법 2] VS 내에서 디버그 매개변수를 미리 선언 아래의 코드를 두 예시에서 동일하게 사용했다. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace comm.. 2023. 9. 16.
[WPF][C#][Study] WPF 시작 2일차 1. XAML 이벤트 - 마우스 이벤트 - MouseUp : 마우스를 놓을 때 발생 - MouseDown : 마우스를 누를 때 발생 - 이벤트를 생성하는 2가지 방법 1) XAML에서 직접 호출 // 1) 위처럼 MouseUp의 델리게이트를 직접 연결해줌 2) Code-behind에서 델리게이트 추가 using System; using System.Windows; using System.Windows.Input; namespace WpfTutorialSamples.XAML { public partial class EventsSample : Window { public EventsSample() { InitializeComponent(); // 2) Code-behind에서 델리게이트에 직접 추가함 pnl.. 2023. 9. 15.
[WPF][C#][Study] WPF 시작 1일차 1. Hello World를 출력했다! Hello, WPF! 2. XAML - eXtensible Application Markup Language의 약자 - GUI를 묘사하기 위한 Microsoft XML의 한 형태 - 간단하게 GUI를 생성하고 편집할 수 있다는 장점이 있음 - 꺾쇠괄호()에 컨트롤의 이름을 넣어 컨트롤을 생성하고, 끝맺음 태그를 쓰거나 시작 태그에 슬래시를 써서 닫아줘야 함 // 1 // 2 - 대소문자를 구별해주어야 한다. - 각 컨트롤은 속성을 가질 수 있음 - 속성은 두가지 방법으로 표현할 수 있음 // 1번째 방법 // 2번째 방법 Bold A button - WrapPanel을 이용해 여러 하위 요소들을 묶을 수 있음 // 1번째 방법 Bold Multi Color Butt.. 2023. 9. 14.
[개발더미][Unity] 모노 싱글톤 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Singleton : MonoBehaviour where T : MonoBehaviour { private static object lockObject = new object(); // 쓰레드 안전화에 사용 private static bool isQuit = false; // 프로그램이 종료되거나 이상이 있는 경우 판단 private static T instance = null; // 객체 public static T Instance { // 쓰레드 안전화(Thread-Safe) get { // lock블럭 : 한번에 한 쓰레드만 실행되도록 .. 2023. 7. 25.
[면접 준비][C#] 제네릭(Generic) 1. 제네릭(Generic)이란? - 데이터 형식을 일반화하여 사용이 가능하게 한 형식 매개변수(Type parameter)이다. - 박싱/언박싱(강제 형번환)이 일어나지 않도록 타입을 미리 지정하는 방식이다. 2. 제네릭의 장점 - 지정된 타입과 호환하는 타입에 대해서만 사용할 수 있게하고, 그렇지 않은 경우 컴파일 에러를 발생시켜 타입에 대한 안정성이 높다. - 런타임 시 데이터 형식이 결정 되는 것이 아닌 코드에서 호출할 때 데이터 형식이 결정되므로 성능 저하가 없다. - 또한 Object 타입을 이용해 값 타입을 사용한 경우 박싱이나 언박싱이 일어나는데 제네릭을 사용하면 값 타입의 인스턴스 자체를 값 자체로 전달할 수 있어 박싱이 수행되지 않아 성능이 더 좋다. - 컴파일러가 형변환을 해주기 때문.. 2023. 7. 20.
[면접 준비][C#] 박싱(boxing)과 언박싱(unboxing)의 차이점 1. 박싱(boxing) - 값 형식(value types)을 참조 형식(reference types)으로 변환 해주는 것 2. 언박싱(boxing) - 박싱했던 값을 다시 원상태로 복귀 시키는 것 - 즉, 참조 형식을 값 형식으로 변환 해주는 것 3. object 타입 - 박싱과 언박싱이 가능한 이유 - 모든 타입의 부모 객체 -> 모든 타입이 object로 변환이 가능함 - object 타입이 참조 형식이기 때문에 임의의 타입을 object형으로 형변환 하는것을 박싱이라 한다. - 반대로, object형에서 다시 원상태로 복귀 시키는 것을 언박싱이라 한다. 4. 박싱 언박싱을 사용하는 이유 - 만약 int형으로 배열을 선언한다면 int형 외에 string형 등의 참조형은 배열에 넣을 수 없지만, ob.. 2023. 7. 20.
[면접 준비][C#] class와 struct의 차이점 1. struct(구조체) [C#] - 값 형식 -> 복사(call by value) - 스택에 할당 -> GC사용x -> 프로그램 속도 향상에 도움 - 자주 사용하지 않고 인스턴스 크기가 16바이트 미만인 경우에 사용 - protect 선언 불가 , 상속 불가 [C++] - 기본값이 public 2. class(클래스) [C#] - 참조 형식 -> 주소(call by reference) - 힙에 할당됨 -> 삭제시 GC사용 -> 프로그램 속도 저하 - 변수나 함수 등이 자주 사용될 경우에는 참조로 접근하는 것이 좋음 - protect 선언 가능, 상속 가능 [C++] - 기본값이 private C#에서 구조체는 값 형식인 call by value 형태로 값이 복사되어 전달되고, 클래스는 참조 형식인 c.. 2023. 7. 20.