본문 바로가기

분류 전체보기

(77)
인터페이스(interface) 와 형변환 일종의 약속,강제로 제약을 만들어냄. 인터페이스에서 만든 함수는 적용받은 곳에선 무조건 만들어야함. 그걸 강제로 제약건다함. 이 인터페이스는 한 클래스에서도 여러개 적용가능. 공통된 기능을 추려내서 인터페이스로 만들면 편함. 다형성을 활용하여 필요시 인터페이스 형을 바꿀수도 있음. interface Interctable {     void 반드시구현해야할함수(); } 인터페이스는 기능들만의 집합체이다. 인터페이스는 여러개 중복해서 룰을 적용 하는것이 가능하다 예시로 들어서 이런게 가능하다 .class Plane : IDrivable,IAppDomainSetup,ICloneable 아래는 실 사용시 예시다 //룰들의 집합체 interface IDrivable //여러개를 한 클래스에 적용시킬수있..
추상(abstract) 클래스 다른 클래스가 상속받아야 하는 기본 구조를 정의 하는것이다. 추상 클래스는 인스턴스화할 수 없고, 주로 다른 클래스의 기반 클래스로 사용된다. 즉, 부모클래스로만 쓰인다. 추상 메서드는 구현되지 않으며, 상속받는 클래스에서 반드시 구현해야 하는 것이다.  그리고 메서드 생성 방식도 조금 다르다.위에 코드에선 BaseAttack() 메서드를 좀 바꿔야한다.추상 메서드는 추상 클래스 내에서 정의되며, 본체(body)가 없다. 이 메서드는 파생 클래스에서 반드시 재정의(override)되어야 한다.   class Mage : Character{ string _staffType = "기본스테프"; public override void BaseAttack()//기본공격이 캐릭터마다 다르다고 가정 ..
다형성(Polymorphism) 다형성(Polymorphism)은 객체 지향 프로그래밍의 중요한 개념 중 하나로, 동일한 인터페이스를 통해 서로 다른 데이터 타입을 다룰 수 있게 하는 기술이다. 혹은 필요에 따라 형태를 바꿀수 있는것을 보고 다형성이라고 함.  C#에서 다형성은 주로 상속과 인터페이스를 통해 구현되며,이는 코드를 더 유연하고 확장 가능하게 만든다. 다형성의 종류컴파일 타임 다형성 (Compile-Time Polymorphism)오버로딩: 동일한 이름의 메서드 혹은 생성자를 여러 개 정의하고, 매개변수의 수나 타입에 따라 다른 메서드혹은 생성자를 호출하는것이다. //생성자 public Ship() { _name = "Default"; _health = 100; } //오버로딩 똑같은 생성자 혹은 함수 이름을..
제네릭(Generic) 제네릭이란? 제네릭(Generic)은 특정 데이터 타입에 의존하지 않고 다양한 타입을 다룰 수 있는 방법이다. 제네릭을 사용하면 코드의 재사용성이 높아지고, 컴파일 시 타입 안정성을 제공하며, 런타임 오류를 줄일 수 있다.제네릭은 주로 클래스, 메서드, 인터페이스에서 사용된다고 한다. 제네릭 : 하나의 클래스가 다양한 형태의 자료형을 처리할수 있게됨.  C#에서 제네릭을 사용하는 예를 들어보면 다음과 같다. 제네릭 클래스public class GenericClass{ private T data; public GenericClass(T value) { data = value; } public T GetData() { return data; }}..
상속(Inheritance) C#에서 상속(Inheritance)은 객체 지향 프로그래밍의 핵심 개념 중 하나로, 기존 클래스의 속성과 메서드를 새로운 클래스에 재사용하는 방법을 제공한것 이다. 상속을 사용하면 코드의 재사용성과 확장성을 높일 수 있다. 예를들어 자동차를 분류해 보았다. class Sedan{ float _maxSpeed; string _brand; public void SedanAction() { Console.WriteLine("동승자 태우기"); } public void Drive() { Console.WriteLine("주행"); }}class Truck{ float _maxSpeed; string _brand; public ..
Static -4. static 클래스 클래스 자체가 static일 경우, 정적클래스라고 불리며 new를 통한 동적할당이 불가능 하다. 정적공간에 이미 만들어진걸 쓰기 때문이다.//그렇기에 static 클래스는 인스턴스화가 안된다.? 정적클래스는 딱 한 개체만 존재할 상황에서 유용하단다.예를 들어, 원주율같은 상수값이나 수학관련 계산식을 모아둔 클래스가 있다면 굳이 이런건 사용할 때 매번 수학객체를 만들어서 사용하기보단 연산 전용 하나의 객체를 두고, 이를 활용하는 것이 나을거라고 한다. static class MyMath { static int usageCount;//몇번사용했는지 변수 public const float PI = 3.14f; //const는 선언과 동시에 값을 안넣으면 터진다. //정적 클래스의 정적..
Static -3. static 함수 class StaticFunc{ int nonStaticNum = 5;//비정적, 일반적인 필드 static int staticNum = 10;//정적 필드 public static void PrintNum()//정적 메서드 만들었슴. { //Console.WriteLine("비정적 인트값은 : " + nonStaticNum); Console.WriteLine("정적 인트값은 : " + staticNum); } public static void IncreaseAndPrintStaticNum()//정적 메서드는 정적메서드만 부를수 이씀. { //정적메서드 내에서 지역변수들은 static일 필요는없다. int a = 10..
Static -2 static 프로퍼티 타인이 Enemy.createCount 변수에 직접 접근해서 실수로 데이터를 수정해버릴수도 있는 것이 걱정되어 정적 createCount버변수를 private로 숨기고 싶다. 하지만 완전 숨기는 것이 아니라 필요에 따라 열람도 하고 싶다면 어떻게 해야할지 배웠다. 일반적인 상황에서 Property를 사용 하면 된다고 한다. public static int CreateCount{ get { return _createCount; } set { _createCount = value; }} 별로 특별한 것이 없어보이지만 static 프로퍼티는 조금 특이하다. get이나 set에 들어갈 맴버변수는 반드시 static 맴..