전체 글 151

C# 1.0 - 연산자

시프트 연산자시프트(shift) 연산자는 비트 단위로 데이터를 제어할 때 사용한다. 데이터가 표현되는 2진수를 생각하면 된다. 정수형으로 숫자 38은 2진수로 100110에 해당한다. 10진수 3832비트 2진수 00000000 00000000 00000000 00100110시프트 연산자는 2진수 상태의 값을 좌/우로 비트를 밀어내는 연산자다. 숫자 38: 2진수 00000000 00000000 00000000 00100110좌측으로 비트를 2번 시프트 : 38 > 200000000 00000000 00000000 00001001 결과값 9 고급 언어에서는 비트 연산이 그다지 자주 사용되는 편은 아니지만, 일부 상황에서 유용한 때가 있다.좌측 시프트를 한 번 할 때마다 2를 곱하는 효과가 있다. 따라서 ..

C# 2025.09.23

C# 1.0 - 문법요소

구문전처리기 지시문C#의 전처리기 지시문(preprocessor directive)은 특정 소스코드를 상황에 따라 컴파일 과정에서 추가/제거하고 싶을 때 사용한다.class Program{ static void Main(string[] args) { string txt = Console.ReadLine(); if(string.IsNullOrEmpty(txt) == false) { Console.WriteLine("사용자 입력: " + txt); } }}Console.ReadLine 메서드는 Enter 키가 눌릴 때까지의 키보드 입력을 받는 역할을 한다.메서드가 실행되면 콘솔 화면에는 입력을 기다리는 프롬포..

C# 2025.09.21

C# 객체지향 문법 [C#의 클래스 확장 - 멤버 유형 확장]

클래스에서 기본으로 제공되는 멤버 유형은 필드와 메서드다.프로퍼티는 메서드의변형이고, 델리게이트는 중첩 클래스의 변형이다.C#의 기본적인 필드, 메서드 외에 다양한 구성요소가 존재한다.읽기 전용 필드프로퍼티를 이용하면 필드의 값을 읽기만 가능하도록 외부에 노출할 수 있다.클래스 내부에서도 읽기만 가능하도록 만들고 싶다면? 또는 한 번만 값을 사용한 후 다시 값을 설정하지 못하게 만들고 싶을 수도 있다. 이런 경우에 readonly 예약어를 사용해 읽기 전용 필드(read - only field)를 정의하면된다.public class Scheduler{ readonly int second = 1; //읽기 전용 필드 정의 및 값을 대입 readonly string name; //읽기 전용 필드 ..

C# 2025.07.26

C# 객체지향 문법 [C#의 클래스 확장 - 열거형]

열거형(enumeration type)도 값 형식의 하나로 byte, sbyte, short, ushort, int, uint, long, ulong만을 상속받아 정의할 수 있는 제한된 사용자 정의 타입이다.[접근_제한자] enum 타입명{ // 숫자를 대표하는 식별자 이름 나열}// enum 타입은 숫자형 값에 사람이 인식하기 쉬운 문자열 이름을 부여한다. // 상속 타입을 지정하지 않는 경우 기본적으로 System.Int32가 된다.enum은 내부에 정의된 식별자 순서에 따라 각각 0부터 시작해 1씩 값을 증가시키며 대응시킨다.따라서 예제 코드의 Sunday는 숫자0이고, 그 이후로 1, 2, 3, ...과 같은 식으로 증가해 Saturday는 6이 되어 결국 상속받은 System.Int32 타..

C# 2025.07.23

C# 객체지향 문법 [C#의 클래스 확장 - 구조체]

'Object로부터 파생된 타입 관계'를 보면 기본 타입에서 숫자형과 char, bool 타입이 값 형식에 속한다.참조 형식은 string, object와 class로 정의되는 모든 타입이 포함된다. 그런데 값 형식에도 class처럼 사용자 형식을 두려면?구조체(Struct)를 사용하면 된다. 구조체는 클래스를 정의하는 문법과 매우 유사하다. class 예약어를 struct 예약어로 대체한다는 것과 함께 다음의 차이점이 있다. 인스턴스 생성을 new로 해도 되고, 안 해도 된다.기본 생성자는 명시적으로 정의할 수 없다. - (C# 10 부터 궂체에도 기본 생성자를 정의할 수 있다.)매개변수를 갖는 생성자를 정의해도 마치 기본 생성자가 있는 것처럼 C# 컴파일러에 의해 자동으로 지원된다. (클래스의 경우 ..

C# 2025.06.04

C# 객체지향 문법 [C#의 클래스 확장 - 인터페이스]

인터페이스(interface)는 간단하게 계약(contract)이라고 정의되며, 구현 없이 메서드 선언만 포함된 클래스 문법과 비슷한 면이 있다.접근_제한자 interface 인터페이스_명{ //[메서드 선언];}// 설명: 인텊페이스에는 메서드 선언을 0개 이상 포함할 수 있다. 관례적으로 인터페이스의 이름에는// I 접두사를 붙인다.인터페이스를 '추상 메서드만 0개 이상 담고 있는 추상 클래스'라고 생각해도 무방하다.다음의 두 가지 표현은 몇 가지 특징을 제외하고는 완전히 동일하다.abstract class DrawingObject{ public abstract void Draw(); public abstract voidi Move();}interface IDrawingObject;{..

C# 2025.05.27

C# 객체지향 문법 [C#의 클래스 확장 ~ 델리게이트]

클래스, 캡슐화, 상속, 다형성을 구현하는 것으로 C# 언어가 객체지향 언어라고 말할 수 는 있지만, 현실 세계에서 프로그래밍 하려면 좀 더 다양한 요소가 필요하다.타입 유형 확장중첩 클래스중첩 클래스(nested class는 클래스 내부에 또 다른 클래스를 정의하는 것이다.중첩 클래스가 필요한가?ex) 하드디스크는 내부에 플래터(platter)라고 하는 원형 금속판을 여러 개 포함하고 있으며, 헤드(head)가 그 금속판 위에 데이터를 읽고 쓰는 동작을 수행한다. 이를 C#으로 표현하면 3개의 클래스로 만들 수 있다.class Platter{}class Head{}public class HardDisk{ platter [] platter; Head head;}하지만 플래터와 헤드는 다른 구성..

C# 2025.05.19

C# 객체지향 문법 [다형성]

객체지향의 4대 특징은 일반적으로 추상화, 캡슐화, 상속, 다형성이다.객체지향 언어에서 보통 추상화는 '클래스'를 통해 제공된다.다형성(polymorphism)은 '여러가지 형태를 띈다'는 것인데 메서드 오버라이드와 메서드 오버로드를 통해 다형성에 대해 공부할 수 있다.메서드 오버라이드현실 세계를 객체지향 개념을 이용해 모델링하면, 포유류 안에 사자, 고래, 인간 등이 포함된다.ex)class Mammal{ public void Move() { Console.WriteLine("이동한다."); }}class Lion : Mammal{}class Whale : Mammal{}class Human : Mammal{}그런데 객체들이 움직이는 방법이 각각 다르다. Lion은 네 발로..

C# 2025.05.17

C# 객체지향 문법 [상속]

현실 세계를 보면 인간과 침팬지는 영장류에 속하고, 영장류와 고래, 기린 등은 포유류에 속한다. 이런 식으로 어떤 공통적인 특징이 있고 그 특징을 상속(inheritance)받아 다른 세부적인 항목을 정의하는데, 일상적인 많은 객체가 이런 '계층적'인 관계를 따른다.상속이라는 개념이 없을 때 노트북, 데스크톱, 넷북 클래스는 다음과 같이 개별적으로 메서드와 상태 값을 정의해야 한다.public class Notebook{ bool powerOn; public void Boot(){} public void shutdown(){} public void Reset(){} bool finerScan; //public 특화 멤버 필드 추가 public bool HasFing..

C# 2025.05.15

C# 객체지향 문법 [캡슐화]

관련성이 있는 데이터와 그 데이터를 다루는 메서드를 객체 안에 구현하는 것이 일반적인 통념이고, 더 나아가서는 객체의 밖에서 알 필요가 없는 내부 멤버를 숨기기도 하는데, 이를 두고 캡슐화(encapsulation)라는 용어를 사용한다.double pi = 3.14;double GetAreaOfCircle(double radius) //원의 넓이를 반환하는 함수{ return radius * radius * pi;}void Print(double value){ Console.WriteLine(GetAreaOfCircle(value));}Print(10); //출력 결과: 314객체가 없어 파일로 구분해줄 수 있다.ex) 모든 코드를 math.c라는 파일안에 넣어 둘 수 있다. 어찌 보면 파일로..

C# 2025.05.13