전체 글

성장 중 🌱🌱
1. 구조체(Struct)구조체는 Java에 없는 개념이라 한 번 정리해보자.(C를 했으면 조금 어떤 느낌인지 알겠지만... 단순 데이터 묶음인 C에 반해, C#의 구조체는 객체지향 요소를 결합한 요소이다.) 구조체 (struct)클래스 (class)타입값 타입 (Value Type)참조 타입 (Reference Type)메모리 할당스택 (Stack)힙 (Heap)상속불가능가능용도작은 데이터 구조 모음복잡한 데이터 구조 및 기능 / 메서드 등 구조체 생성 시에 중괄호 안에 속상에 값을 바로 넣을 수 있다.Point point = new Point { X = 10, Y = 20 };Console.WriteLine(point); // 출력: (X: 10, Y: 20)struct Point{ public..
기본적인 개념과 문법이 Java와 거의 동일하다.하지만 C# 만에 특별한 문법에 C#의 철학이 녹아있어서 한 번 짚고 넘어가려고 한다.1. 타입 캐스팅 (Type Casting)암시적 변환int i = 10;double d = i;명시적 변환double d = 3.14;int i = (int)d; 2. as 연산자C#에만 있는 연산자계속 느끼는 건데, Java도 타입에 예민하지만, C#이 좀 더 타입에 명시적이거나, Null에 대해 다루는 문법이 많은 것 같다. as 연산자는 "참조 타입 변환에서 실패 시 예외 대신 null 반환"한다.(RunTime Exception으로 아예 예외를 뱉는 대신, 예외도 하나의 분기 흐름으로 보려는 관점이 보인다. Null로써 처리)object obj = "hello";..
1. 인터페이스 (Interface)"이 타입은 무엇을 할 수 있는가?"를 정의하는 계약구현이 아닌 책임의 형태를 먼저 고정하고, 구현은 클래스나 구조체에서 맡긴다.public interface IAnimal{ void MakeSound(); string Name { get; set; }}참고: Inteface Naming 규칙 중 앞에 대문자 I를 넣는 암묵적인 Rule이 있다. 인터페이스에서는 딱 3가지만 존재한다.메서드 시그니처프로퍼티 형태 (get, set)이벤트 선언=> 상태와 구현은 없다.C# 8 부터는 일부 구현 사항도 포함할 수 있다. [Default 구현] 즉, Interface는 어떻게 하는지가 아닌 무엇을 보장하는지만 표현한다. 또한, 단일 상속만 허용되었던 것과 반해 인터..
클래스는 C#에서 객체 지향 프로그래밍의 꽃. 객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 핵심 개념인 클래스이다.Java에서도 익숙하지만 한 번 깊이 있게 다뤄보려고 한다. 1. 클래스 (Class)데이터와 동작을 하나로 묶어 의미 있는 책임 단위를 만든다.단순한 묶음이 아닌, "접근 제어, 초기화, 확장 방식"까지 포함한 설계의 기본 단위에 가깝다. 간단하게 정리만 해보자면,필드(Field): 클래스의 데이터 또는 상태를 나타내는 변수프로퍼티(Property): 필드에 대한 접근을 제어하는 멤버로, 데이터의 캡슐화를 지원메서드(Method): 클래스가 수행할 수 있는 동작을 정의생성자(Constructor): 객체가 생성될 때 호출되는 특별한 메서드로, 초기화..
문자열은 텍스트 데이터를 표현하는 기본 타입 이다.1. 문자열은 참조 타입(Reference Type)참조 타입은 데이터가 메모리의 Heap 영역에 저장된다.변수는 그 데이터를 참조하는 포인터(주소값)을 저장한다.참조 타입은 값 자체를 저장하는 것이 아님! -> "다른 변수에 할당하면, 값이 아닌 메모리 주소가 복사된다." 가장 대표적인 것이 배열(Array), 문자열(string)이다. 2. 문자열에서의 empty vs nullstring emptyString = "";string nullString = null;둘 다 출력하면 빈칸으로 나오지만,"" -> 길이가 0인 문자열null -> 문자열 객체 자체가 없다.라는 점에서 차이가 있다. 이 차이는 이후 메서드 호출이나 조건 분기에서 중요한 차이로 작..
1. 배열(Array): 고정 길이의 연속된 메모리 공간C#도 Java와 비슷하게 "컬렉션"이 풍부한 언어이다. 선언과 초기화// 선언만 진행int[] numbers;string[] fruits;// 초기화 방법int[] scores = { 90, 85, 78, 92, 88 };// 크기만 지정하여 생성int[] numbers = new int[5];각각 타입의 기본값 ( int: 0, bool: false, 참조 타입: null )으로 초기화 된다. 요소 접근인덱스로 배열을 접근하는 것~ 똑같다.하지만, 두 가지 연산자를 추가로 알아두자.^: 뒤에서부터의 인덱스[1..3]: 범위 지정int[] numbers = new int[5]; // 정수열 배열 선언string[] strings = new stri..
Java랑 똑~같다.다만 최근 C# 버전에 편의성을 위해 추가된 문법들이 조금 있으니, 살짝만 코드로 보고 넘어가자.1. if / else & Switch 문// If-Elseint score = 85;if (score >= 90){ Console.WriteLine("A");}else if (score >= 80){ Console.WriteLine("B");}else{ Console.WriteLine("C");}// Switchint day = 3;switch (day){ case 1: Console.WriteLine("Monday"); break; case 2: Console.WriteLine("Tuesday"); break;..
1. 디버깅개발자가 버그를 신속하게 찾고 수정할 수 있도록 도와준다.단순 실행을 멈추고 값을 확인하는 정도가 아니라, "현재 코드가 어떤 상태로 흘러왔는지"를 따라가게 만드는 데 초점이 맞춰져 있다.Visual Studio에서 제공되는 Debugger를 사용하면 편하게 디버깅 할 수 있다. 우리가 흔히 아는 벌레모양 디버깅...우리는 코드를 실행할 때 2가지 방식으로 실행한다.1. 디버그 모드로 실행2. 디버거 없이 실행디버그 모드는 실행 흐름을 추적하고, 중단점을 기준으로 상태를 관찰하는 용도디버거 없이 실행은 실제 실행 환경에 가까운 동작을 빠르게 확인하는 용도 2. 중단점(Breakpoint)디버깅의 시작은 중단점이다.."상태를 들여다 보기 위한 기준점"이다.코드가 돌아가는 순서상 단계별로 바라보..
dog-pawwer
지노개발일기