성장일기

06/01 스마트팩토리 교육 -생성자, 정보은닉, 프로퍼티,상속,is as 연산자 본문

프로그래밍언어/C#

06/01 스마트팩토리 교육 -생성자, 정보은닉, 프로퍼티,상속,is as 연산자

김몽몽 2020. 6. 1. 18:30

○생성자

현재 person 1만 스택에 만들어진 상태
스태틱 생성자가 호출됨

객체 생성하려는 시도를 할 떄, 스태틱생성자가 가장 먼저 호출됨

Main안에서 아무도 스태틱생성자를 호출하지 않았지만 Person을 생성하려하니 스태틱생성자가 먼저 호출

->이때 heap에 Person객체에 디폴트생성자 호출(person1에 대입은 안한 상태)

person1에 Person대입됨
일반생성자 호출, 정적 생성자는 최초 접근 한번만 실행-> 스태틱 오버로딩

스태틱이 더이상 뜨지 않음

일반 생성자가 호출된다

=> 디버깅모드를 쓰면 프로세스 이해가 쉬움

 

○정보은닉

정보은닉은 캡슐화가 잘 되면 함께 지켜진다

즉 정보은닉은 캡슐화의 수단이다.

get과 set을 씀

public void SetSpeed를

if문으로 제약을 건다

변수를 감추고 간접적으로 제어, 300을 설정해도 제약으로 150까지로만 나옴

 

○프로퍼티

 

○상속

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20200601_003
{
class Program
{
public class Notebook
{

bool powerOn;
public void Boot()
{
Console.WriteLine("노트북을 부팅합니다.");
}
public void Shutdown()
{
Console.WriteLine("노트북을 끕니다.");
}
public void Reset()
{
Console.WriteLine("노트북을 리셋합니다.");
}
bool fingerScan;
public bool HasFingerScanDevice()
{
return fingerScan;
}
}

public class Desktop
{
bool powerOn;
public void Boot()
{
Console.WriteLine("데스크톱을 부팅합니다.");
}
public void Shutdown()
{
Console.WriteLine("데스크톱을 끕니다.");
}
public void Reset()
{
Console.WriteLine("데스크톱을 리셋합니다.");
}
}

public class Netbook
{
bool powerOn;
public void Boot()
{
Console.WriteLine("넷북을 부팅합니다.");
}
public void Shutdown()
{
Console.WriteLine("넷북을 끕니다.");
}
public void Reset()
{
Console.WriteLine("넷북을 리셋합니다.");
}
}

static void Main(string[] args)
{

Console.WriteLine("================= 노트북 =================");
Notebook aNoteBook = new Notebook();
aNoteBook.Boot();
aNoteBook.Reset();
aNoteBook.Shutdown();
Console.WriteLine("================= 데스크탑 =================");
Desktop aDesktop = new Desktop();
aDesktop.Boot();
aDesktop.Reset();
aDesktop.Shutdown();
Console.WriteLine("================= 넷북 =================");
Netbook aNetbook = new Netbook();
aNetbook.Boot();
aNetbook.Reset();
aNetbook.Shutdown();


}
}
}

->new로 발행해야함

 

º 상속은 기호 : 를 사용한다 (Java는 extends를 사용)

한번만 정의해도 상속받을 수 있다->기능을 다 사용할 수 있게 됨

string타입은 상속을 더는 받지 못하도록 제한되어 있다

 

○형변환

강제로 캐스팅 연산자를 사용해 명시적 형변환->실행오류
연산수행은 뒤에서부터 하는게 유리하기 때문에 뒤집어진 숫자가 나옴

값에 &iNum 넣은 뒤 나오는 값을 디버그-창-메모리에 붙여넣으면 주소가나옴

뒤집어진 숫자(바이트가 뒤집힘)->Little Endian 방식: 연산에 최적화 되어있음(일반컴)

일반 숫자 방식->Big Endian 논리연산, 대소비교에 유리(슈퍼컴)

 

최상위 클래스를 Object class라고 부른다

NoteBook객체는 Desktop과 Netbook을 포함하지 않는다
상위객체인 Computer의 경우 모두를 포괄해 에러가 나지 않는다=암시적 형변환

static void Main(string[] args)
{
Computer[] machines = new Computer[] ->Computer타입의 객체를 만든다

                ->배열객체를 가르키는 참조변수

new NoteBook(),new Desktop(), new Netbook() ->3개 =>Computer타입의 참조배열객체

                                                              ==>NoteBook, Desktop, Netbook 각각 객체를 만듦

                                                              ==>각각 배열번호 [0], [1], [2]를 가짐
};

참고) machines[0].Reset(); ->aNoteBook.Reset();과 같음

 

Computer[] machines;
machines = new Computer[3];
machines[0] = new NoteBook();
machines[1] = new NoteBook();
machines[2] = new NoteBook(); 로 쓸 수도 있음


DeviceManager aDeviceManager = new DeviceManager();
foreach(Computer device in machines)
{
aDeviceManager.TurnOff(device);
}

}

 

○as, is 연산자