성장일기

06/02 스마트팩토리 교육 - Object,Array,this,base 본문

프로그래밍언어/C#

06/02 스마트팩토리 교육 - Object,Array,this,base

김몽몽 2020. 6. 2. 18:29

○object


º부모클래스를 명시하지 않는다면 기본적으로 object타입에서 상속받는다고 가정하고 자동코드생성

º모든 클래스는 기본적으로 object를 상속받는다

ºobject 타입은 모든 타입을 포함하고있다

아무것도 만들지 않아도 object때문에 4개의 메서드가 뜸

<object의 대표적 4가지 메서드>

ºToString-문자열로 반환

5+'0'을 하면 53이 나온다-> 아스키코드 0은 48이기 때문

5+'0'을 하면 53이 나온다-> 아스키코드 0은 48이기 때문, 따라서 이것을 문자형으로 바꿔주면 5가 나온다

 

ºGetType

 

ºEquals

값을 비교해 불린형으로 반환한다

같은 수라도 false->같은 객체를 가리키면 true가 된다
aString1,2,3이 모두 같은값을 가리키고 있음

string 클래스는 object안에 있는 equals를 쓰지않음(오버라이딩)

->객체 자체를 비교하지 않고 텍스트비교

 

ºGetHashCode

1:1대응하는것을 hash라고부름

객체의 고유번호를 알아낼때 사용

고유번호를 비교해서 같으면 같은객체, 다르면 다른객체로 인식

hash는 2^32를 넘으면 안된다.

하지만 long형의 경우 2^64이므로 어떤경우에는 동일한 해시코드가 반환될 수 있다

->해시충돌

해시코드가 동일할때는 equals를 통해 확인할 수 있다

 


○Array


 


○this


현재 생성된 객체에서의 '나'

외부에있는 메서드에 접근할 때 this를 사용

메서드의 매개변수와 클래스에 정의된 필드의 이름이 같을 경우 this를 명시

<소스>

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

namespace _20200602_004
{
class Car
{
int iSpeed; // 속도
string sColor; // 색상
string sName; // 이름
string sVender; // 제조사

public void Print()
{
Console.WriteLine("속 도 : {0}", iSpeed);
Console.WriteLine("색 상 : {0}", sColor);
Console.WriteLine("이 름 : {0}", sName);
Console.WriteLine("제조사 : {0}", sVender);
}
public Car() : this(0, "화이트", "미정", "미정")
{
}
public Car(int iSpeed) : this(iSpeed, "화이트", "미정", "미정")
{
}
public Car(string sColor) : this(0, sColor, "미정", "미정")
{
}
public Car(string sColor, string sName) : this(0, sColor, sName, "미정")
{
}
public Car(string sColor, string sName, string sVender) : this(0, sColor, sName, sVender)
{
}
public Car(int iSpeed, string sColor, string sName, string sVender)
{
this.iSpeed = iSpeed;
this.sColor = sColor;
this.sName = sName;
this.sVender = sVender;
}
}
class Program
{
static void Main(string[] args)
{
Car aCar = new Car();
aCar.Print();

aCar = new Car(80);
aCar.Print();

aCar = new Car("빨캉");
aCar.Print();

aCar = new Car("빨캉", "그랑죠");
aCar.Print();

aCar = new Car("빨캉", "그냥죠", "현다이");
aCar.Print();

aCar = new Car(100, "빨캉", "그냥죠", "현다이");
aCar.Print();
}
}
}

this로짧게 쓸 수 있음

this는 객체가 생성되어야 사용가능

static 멤버는 객체없이도 쓸 수 있기 때문에 static멤버에 this를 쓰면 오류가 남

 


○base


this가 클래스 인스턴스자체를 가리키는 것과 달리 base는 '부모클래스'를 명시적으로 가리킨다

 

 


○다형성


객체지향의 4대 특징은 추상화, 캡슐슐화, 상속, 다형성

º메서드 오버로드와 오버라이드

오버라이드=덮어쓴다, 덮지정

부모클래스에 있는 인자를 공유하지만 새로이 만든다