[C# 기초강의] Ch 07. 클래스

728x90

https://www.youtube.com/watch?v=BHimqSqni98&list=PLVsNizTWUw7GN8wPRhclbKuQa9aI9Cj2V&index=8

📌 객체지향 프로그래밍

  • 코드 내 모든 것을 객체로 표현하고자 하는 프로그래밍 패러다임
  • 객체는 데이터(속성)과 기능(메서드)로 이루어짐
  • 절차적 프로그래밍 : 코드의 순차적 실행
    객체지향 프로그래밍 : 객체간의 상호작용

 

◾ 클래스와 객체

  • 클래스는 객체를 만들기 위한 청사진클래스객체
    형식 or 설계도 메모리에 적재된 실체
    각 형식/클래스 별로 하나만 존재 이론적으로는 무한대로 생성 가능, 메모리를 차지
    객체가 어떤 데이터 항목을 가지는지 정의 선언된 데이터 항목에 실제 데이터 저장
    어떤 메서드를 가질지 정의 정의되어있는 메서드를 실행

 

◾ 클래스 선언

  • class 키워드 이용
  • 속성 → 클래스의 변수 → 필드
  • 기능 → 메서드
class 클래스이름
{
	//데이터와 메서드
}

 

◾ 객체 생성

  • new 연산자와 생성자 이동
  • 객체의 멤버(필드 및 메서드 등)에 접급 시 . 연산자 사용
cat kitty = new Cat();

Kitty color = "하얀색";
Kitty.Meow();

 

◾ 생성자와 종료자

  • 생성자 : 객체가 생성될 때 호출
  • 종료자 : 객체가 소멸될 때 호출
  • 명시적 구현은 선택사항임
  • 종료자가 언제 실행될 지는 알 수 X
class 클래스이름
{
	//생성자
	한정자 클래스이름 (매개변수목록)
    	{
        	// 필드 or 자원초기화가 들어감 
        }
        
   //종료자     
    ~클래스이름()
    {
    	// 자원 정리 
    }
    
    //필드
    //메서드
 }       

 

◾ 생성자 오버로딩

  • 객체의 필드를 초기화하는 다양한 옵션 제공 가능
class Cat
	public Cat() 
    { Name=""; Color=""; }
    
    public Cat ( string_name, string_color}
    { Name = _Name; Color = _color; }
    
    public string Name;
    public string Color;
    ...
Cat kitty = new Cat();
kitty.name ="키티";
kitty.color = "하얀색";

Cat nabi = new Cat ("나비,"갈색");

 

◾ this 키워드

  • 객체를 사용하는 코드에서 참조로 객체를 지칭
  • 객체 내부에서 자신을 지칭할 때 사용하는 키워드
class Employee
{
	private string Name;
    public void SetName (string Name)
    {
    	this.Name = Name;
    }
}

 

◾ 접근 한정자

  • 객체간의 상호 작용이 중심인 OOP에서는 각 객체는 다른 객체에게 자신의 내부 사정을 공유하지 않음
  • 다른 객체에게 공유해야하는 멤버만 접근한정자를 이용하여 공개
  • 접근 한정자는 멤버를 외부에 어떤 수준으로 공개할 지 결정
    - public. protected, private
class Employee
{
	private string Name;
}

 

◾ 상속

  • 다른 클래스로부터 코드를 물려받는 것
  • 상속의 대상 : 클래스 멤버(필드, 메서드, 프로퍼티 등)
  • 새로 선언하는 클래스 이름 뒤에 콜론(:)과 기반 클래스의 이름을 표기하여 상속
  • 물려주는 클래스 : 기반(부모) 클래스, 물려받는 클래스 : 파생(자식) 클래스
class 기반클래스
{
	...
}

class 파생클래스 : 기반클래스
{
	...
}

 

◾ 오버라이딩

  • 기반 클래스에서 선언된 메서드를 자식 클래스에서 재정의하는 것
  • 기반 클래스에서 오버라이딩 할 메서드를 미리 virtual 로 한정
  • 파생 클래스는 virtual 메서드를 override 한정자를 이용하여 재정의
class ArmorSute
{
	//오버라이딩을 위해 virtual 를 붙여줌
	public virtual void Initialize()
    {
    	Console.WriteLine("Armored");
    }
}

class WarMachine : ArmorSuite
{
	//오버라이딩 
	public override void Initialize()
    {
    	base.Initialize();
        Console.WriteLine("Micro-Roxket Launcher Armed");
    }
}

 

◾ 구조체

  • class 대신 struct 를 이용하여 선언
  • 클래스는 참조형식, 구조체는 값 형식
  • 클래스 인스턴스는 CG가 제거, 구조체 인스턴스는 스택이 자동 제거
struct 구조체 이름
{
	//필드
    //메서드
}

 

◾ 튜플

  • 기본적으로 구조체, 즉 값형식
  • 형식 이름 없이 선언하여 사용
  • 일부 코드에서 즉석 활용되는 형식을 만들때 적합,
    프로그램 전역에서 사용할 형식에서는 부적합
var tuple = (123, 789);
//var : 형식 추론.튜플에 담겨진 모양을 보고 추론 
728x90