전체 글 137

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

C# 객체지향 문법 [생성자, 종료자, 정적멤버, 인스턴스 멤버, 네임스페이스]

생성자C# 클래스에는 특별한 용도의 메서드가 있다.클래스에 생성자 메서드를 추가하면 객체가 '생성'되는 시점에 해당 메서드가 자동으로 호출된다. 이런 점에서 생성자는 다른 여타 메서드와 구별된다는 특징이 있다.class 클래스_명{ 접근_제한자 클래스_명(타입 매개변수명, ....) { }}//생성자는 이름이 클래스명과 동일하며 반환타입을 명시하지 않는다는 점을 제외하면 //일반 메서드를 정의하는 방법을 따른다.(constructor를 줄여서 ctor라고 부르기도 한다.)반환 타입이 없고 클래스 이름과 동일한 public Person 메서드를 정의해두면 코드에서 new Person을 실행하는 시점에 해당 메서드의 코드가 실행된다.-> 생성자에는 말 그대로 객체를 생성하는 시점에 실행되야 할 코..

C# 2025.05.13

C# 객체지향 문법 [클래스, 필드, 메서드]

'책'이라는 개념을 보면, 어떤 공통적인 특징을 만족해야 '책'이라고 부를 수 있는가?책에는 '제목'이 있다. 이와 마찬가지로 'ISBN 식별자', '내용', '저자', '페이지 수'가 책에 포함될 수 있다.이러한 특징을 C#의 자료형으로 나타내는 것이 가능하다.책제목stringISBN 식별자decimal내용string저자string페이지 수int특정 사물의 특징 중에는 자료형으로 표현할 수 있는 여러 가지 값이 존재하고, 객체지향에서는 이를 속성(attribute)라고 한다.사물의 특징에는 속성만 있는 것은 아니다. 인간이라는 범주에 속하는 영희라는 객체가 책과 상호작용할 때 대표적으로 '책을 펼치고', '책을 덮는다'는 행위(behavior)를 한다.이러한 행위까지 포함한다면 책은 다음과 같은 특징으..

C# 2025.05.12

C# [제어문]

선택문C#의 선택문(selection statements)으로 if와 switch 구문이 있다. 두 단어 모두 C#의 예약어이며 그에 따른 일정한 형식의 문법이 있다.bool 자료형이 나오는 C# 연산자를 알아야 하는데, 전형적인 선택문에는 반드시 '조건'이 따르게 되고, 그 조건의 평가는 참/거짓으로 나오기 때문이다.관계 연산자, 논리 연산자연산의 결과가 참/거짓으로 나오는 C#의 연산자로는 관계 연산자(relational operator)와 논리 연산자(logical operator)가 있다.6가지 관계 연산자관계 연산자평가 방식예제>좌측 피연산자가 우측 피연산자보다 크면 참, 같거나 작으면 거짓bool result = 10 > 20; //거짓좌측 피연산자가 우측 피연산자보다 작으면 참, 같거나..

C# 2025.05.09

C# [배열]

배열(array)이란 무엇이고 왜 필요한가?개발자를 편리하게 만들어주는 것이 배열이다.개발자가 관리해야할 제품의 수의 양이 많다면 코드의 양도 증가하는데, 배열을 사용해 이 문제를 해결 할 수 있다.int box1 = 1000;int box2 = 2000;int box3 = 3000;//이렇게 관리하는 것이 아닌 배열을 선언해 사용한다.int[] boxs = new int[5];string[] names = new string[1000];new라는 예약어와 함께 배열을 정의하기 위한 대괄호(square bracket) 문장부호를 볼 수 있다.C#에서 new 키워드는 참조 형식과 함께 사용되는 경우 그에 필요한 메모리 힙(Heap)에 할당하는 역할을 한다.변수를 선언할 때 대괄호를 사용하면 해당 변수가 배..

C# 2025.05.07