- C#과 같은 객체지향 언어에서는 '객체'와 '인스턴스' 용어가 등장하는데, 두 개의 차이는 무엇일까?
- 프로그래밍 언어에서 대체로 '객체' == '인스턴스' 라고 생각하면 됩니다.
- '객체지향'이라고 말할 때의 '객체'는 '클래스' or '인스턴스' 두 가지 의미를 포함한 개념을 나타냅니다.
1.1 클래스
1.1.1 클래스 정의
클래스
- 클래스 내부에 데이터, 메서드 등을 정의할 수 있습니다.
- Class 정의*생성자
[접근 제한자] class 클래스명 { // 필드, 메소드 ... }
- 클래스와 이름이 같은 특수한 메서드
- 아래 예제에서는 생성자의 정의에 맞춰 Code, Name, Price 속성에 있는 set 접근자의 권한을 private로 설정했습니다.
- 이렇게하면 생성자를 통하지 않고서는 속성 값을 초기화 하지 못합니다.
생성자 예제
class Program
{
// class
public class Product
{
// 속성
public int Code { get; private set; }
public string Name { get; private set; }
public int Price { get; private set; }
// 생성자
// Class와 같은 이름의 메서드
// 생성자를 통해서 Code,Name,Price를 초기화 해야합니다.
public Product (int code, string name, int price)
{
this.Code = code;
this.Name = name;
this.Price = price;
}
}
}
1.1.2 클래스의 인스턴스 생성
- 클래스를 이용하려면
new 연산자
를 사용해 클래스의 인스턴스를 생성합니다. - 인스턴스란?
- '컴퓨터의 메모리상에 확보된 클래스의 실체'라고 생각하면 됩니다.
- 인스턴스 예제*
Product cloth = new Product(001,"jean",19000);
1.2 구조체
- 구조체는 클래스와 매우 유사합니다.
- 구조체에도 속성과 메서드가 있으므로 클래스처럼 이용할 수 있습니다.
- 구조체 예제*
DataTime date = new DateTime(2021,06,10); int year = date.year;
구조체와 클래스의 차이점?
- 객체를 메모리 상에 저장하는 방식의 차이
- 클래스는 변수가 있는곳과 다른 곳에 객체의 영역이 확보되고 변수에는 그 참조가 저장됩니다.
- 클래스 객체 :
힙 영역
에 할당됩니다.
- 클래스 객체 :
- 구조체는 변수 자체에 객체가 저장됩니다.
- 구조체 객체 :
스택 영역
에 할당됩니다. - 또한 상속할 수 없다는 제한이 있습니다.
- 구조체 객체 :
클래스, 구조체 선언 예제
//클래스
class MyClass
{
public int x { get; set; }
public int y { get; set; }
}
//구조체
struct MyStruct
{
public int x { get; set; }
public int y { get; set; }
}
MyClass myClass = new MyClass {x = 1, y = 2};
MyStruct myStruct = new MyStruct {x = 1, y = 2};
1.3 값형과 참조형
1.4 정적 멤버와 정적 클래스
1.4.1 정적 속성과 정적 메서드
정적 속성, 정적 메서드
- 아래 코드는 인스턴스를 생성하지 않은 상태입니다.
- Today 속성을 참조했고, WriteLine 메서드를 호출했습니다.
- 이처럼 인스턴스를 생성하지 않고 이용할 수 있는 속성, 메서드를 각각 정적속성, 정적메서드라고 부릅니다.
정적속성 , 정적메서드 예제
// Today 는 static 속성
DateTime today = DateTime.Today;
// Console은 static 클래스, WriteLine은 static 메서드
Console.WriteLine("");
정적 멤버
- 정적 속성, 정적 메서드, 정적 필드를 모두
정적 멤버
라고 합니다. - 선언부에
static
키워드를 사용합니다. - 정적 멤버 이용시 new로 객체를 생성할 필요가 없습니다.
- '형 이름.속성', '형 이름.메서드'와 같이 '형 이름'을 사용해서 접근합니다.
정적멤버 예제
pubilc static DateTime Today { ... }
1.4.2 정적 클래스
- 선언부에
static
키워드를 사용합니다. - 정적 클래스에서 인스턴스 생성은 의미가 없기 때문에, 인스턴스 속성, 인스턴스 메서드가 없습니다.
정적 클래스 예제
public static class Console { ... }
- C# 정적 클래스 인스턴스 생성 시 오류 발생합니다.
1.6 상속
1.6.1 상속이란?
- 이미 정의된 클래스를 확장,변경 하여 새로운 클래스를 만드는 것
- 상속한다는 '파생한다'라고도 말합니다.
'프로그래밍 > (도서)프랙티컬 C#' 카테고리의 다른 글
[C#] 프랙티컬 C# - 3.1 람다식 (0) | 2022.03.31 |
---|---|
[C#] 프랙티컬 C# - 2.2 매출 계산 프로그램 (0) | 2022.03.31 |
[C#] 프랙티컬 C# - 2.1 거리 환산 프로그램 (0) | 2022.03.31 |