* 생성자(constructor)
: 객체의 생성과 함께 자동으로 호출되는 것. 클래스와 같은 이름의 특수한 메소드.
- 디폴트 생성자: 생성자를 작성하지 않아 자동으로 준비되는, 인수 없는 생성자.
- 복사 생성자: 같은 클래스의 객체를 인수로 받아 대응하는 필드에 값을 대입하는 생성자. 받은 객체를 복사함.
- 인수가 없는 생성자
class A { public int a, b, c; Public A() { a = 0; b = 0; c = 0; } } class TestA { A a = new A(); } |
A(클래스 이름) 와 A(생성자 이름)가 같다.
전체가 생성자.
new A() 는 객체를 생성함과 동시에 생성자 호출과 같음.
- 인수가 있는 생성자
class B { public int s, t; public B(int a, int b) { s = a; t = b; } } class TestB { B b = new B(3, 4); } |
new B(3, 4) : 객체 생성이자 생성자 호출
3, 4 : 생성자에 전달하는 인수
생성자의 인수를 각각 title과 price로 바꿔봤는데 그러니까 "C 그림책" 이랑 "14000"이 안나오더라?
한 클래스 안에는 같은 이름의 변수를 쓸 수 없는걸까?
book1의 값을 인수로 받은 Book을 복제했기 때문에 book2에 저자를 쓰지 않아도 값이 나타났다.
* 속성
: 객체 안에 있는 필드의 갑을 취득 또는 설정하는 메소드.
필드 값을 반환하는 get 과 필드에 값을 대입하는 set 으로 구성된다.
- set을 명시하지 않으면 읽기 전용 (set=손 이면, 손이 없으니 읽을 수만 있고)
- get을 명시하지 않으면 쓰기 전용 (get=눈 이면, 눈이 없으니 쓸 수만 있고)
(맞는 비유인가...?)
public int prop { get { return a } set { a = value; } } |
int prop : 속성
a : 필드명
value : 속성에 설정된 값은 value라는 변수에 들어간다.
예시가 뭔가 이상한 것 같은데... aroma.itteki를 0.05라고 했으니까 밑에 콘솔창에 쓴 aroma.itteki가 0.05라고 뜨는 건 당연한 거 아닌가? 왜 굳이 한 바퀴 더 돌게 된거지???
내가 우동사리인거냐, 얘가 이상한거냐. 내용을 수정해서 이해해보고 싶어도 뭘 건드려야 할지 모르겠다.
- 값을 가져오거나 설정하기만 하는 속성이라면 다음처럼 써도 된다.
class Aroma { public double itteki { get; set; } } |
값을 저장하는 필드는 C#에서 자동으로 생성한다.
* 인덱서 (indexer)
: 객체 안의 배열에 액세스해 클래스를 배열처럼 취급하게 만드는 구조. get-set 으로 구성된다.
public int this [int i] { get { return a[i]; } set { a[i] = value; } } |
int : 배열 요소의 형
int i : 배열의 첨자와 형
a : 배열명
* Main()
: 프로그램을 실행하면 제일 먼저 호출되는 메소드.
static을 붙여 한 프로그램에 한 개만 작성하기로 약속되었다.
static int Main() { Console.WriteLine("C# 그림책"); return 0 } |
int : 반환값의 형이 들어가는 자리. 그동안 void가 쓰였지만 int로 쓴다면 프로그램이 종료할 때 지정한 값을 반환할 수 있다. 반환값은 시스템에 전달되어 배치 파일 등에 이용할 수 있다.
(일반적으로 정상 종료한 프로그램은 0을 반환)
- Main() 의 인수로 string 클래스의 배열을 지정할 수 있다.
이때 명령 프롬프트에서 입력되는 정보(명령행 인수)는 문자열의 배열로서 Main() 에 전달된다.
>Test apple orange lemon |
Test : 실행 파일명
apple orange lemon : 명령행 인수
(실행 파일은 Visual Studio의 경우, 프로젝트 이름으로 된 폴더 아래, bin\Debug 혹은 bin\Release 어딘가에 있다.)
내가 진짜, 명령 프롬프트가 뭐하는 앤지도 모르지만 일단 켜서 >Test 이하 입력해보기까지 했건만...
p124~125 예제 프로그램
- null
: C언어랑 달이 C#은 null이 false나 0의 의미를 갖고 있지 않다.
참조형에선 null이 저장되어있다면 목적지가 없다는 말이다.
C#의 if 는 논리값만 평가할 수 있다. 때문에 C언어처럼 if(a)나 if(!a) 말고 if(a != null) ~~ 처럼 써야한다.
'메타버스기반게임콘텐츠기획 > 스터디(C#이 보이는 그림책)' 카테고리의 다른 글
5장, 클래스의 상속 (5-1) 상속 / 액세스 수식자 / static / 이름의 은폐 (0) | 2021.11.28 |
---|---|
* 4장, 클래스 (문제) (0) | 2021.11.28 |
4장, 클래스 (4-3) 오버로드 / 선택적 인수 / 액세스 수식자 (0) | 2021.11.26 |
* 4장, 클래스 (4-2) (0) | 2021.11.25 |
4장, 클래스 (4-1) (0) | 2021.11.24 |