프로그래밍 공부하는 ㅈ밥입니다.
C#을 공부하는 와중에 생성자 라는 게 나오는데 이게 구체적으로 무엇인지를 잘 모르겠습니다.
1. ExampleClas 라는 클래스 안에 ExampleClass라는 같은 이름의 메소드? 가 있으면 그걸 생성자라고 하는 건가요?
2. 기본 생성자라고 프러그래머가 명시적으로 생성자를 선언하지 않아도 자동으로 클래스에서 선언된다고 책에 나오던데 기본 생성자는 클래스에서 코드가 보이지 않는 건가요? 코드로 구체적으로 나타나진 않아도 일단 있다고 생각하면 되는 건가요?
3.1 new 연산자는 생성자를 '호출'해서 객체(인스턴스)를 만든다는 것 같은데 일반적인 메소드의 호출과 같이 생성자도 new를 통해서 호출되면 생성자 안의 명령문을 실행하는 건가요?
3.2 new 연산자가 일단 생성자를 호출하는 역할도 있기는 하지만 인스턴스를 만드는 역할도 있잖아요? 그런데
책에 보면 new ExampleClass; 라고만 쓰이는 경우도 있는 것 같은데 이 경우이서 new를 사용해서 만들어진 인스턴스는 어떻게 되나요? 아니면
ExampleClass MyClass = new ExampleClass 이런 식으로 좌항이 준비되어 있지 않으니까 그냥 안 만들어지는 건가요?
3.3 파생 클래스를 배우다 보면
(a생성자 만들어진 A인스턴스) = new (b생성자)
이렇게 되면 A 인스턴스는 어떻게 되나요?
쓰다보니 조금 길어진 것 같네요. 물어볼만한 곳을 몰라서 프갤에다가 질문사항을 적어봤는데 아시는 분이 있으시다면 가르쳐 주셨으면 합니다.
신출내기 ㅈ밥 프로그래머를 도와주세오.
- dc official App
1. ㅇㅇ 2. ㅇㅇ 3. ㅇㅇ 3-2. ㅇㅇ 3-3. C#은 그딴거 신경쓸필요 없음
반말이 답변자분에게도 더 편하리라 생각해 반말로 답글을 남깁니다. 3.2 ㅇㅇ 이라는 건 질문 마지막 부분에 new를 사용해도 호출만 되고 인스턴스는 안 만들어 진다는 거임? 그리고 3.3 에서 C#은 그런 거 신경 안 써도 된다고 했는데 혹시 좀 더 자세한 설명 가능함? - dc App
정확하겐 null이 들어감 c#은 두가지 존재하는데 레퍼형 벨류형 int나 float같은 단순형은 value가 들어가고 class같은 복합형은 refer로 저장된다 refer은 주소값을 참조하는데 new와 같이 명시적으로 할당해주지 않으면 묵시적으로 null값이 할당됨. 3.3은 정확하게 가비지가 생기는데 가비지컬렉션이라는 청소부가 주기적으로 치워줌. c#이 생성자의 반대인 소멸자를 멸시하는 이유중 하나임 좀더 구체적으로 돌아가는 꼴을 공부하려면 c#이 아니라 C/C++을 해라
이해가 되는 거 같으면서도 아직은 좀 어렵네.. 일단 성실히 답변해준 거 고맙고, 일단 좀 더 책도 보고 검색도 하면서 찾아봐야겠네ㅋㅋ 마지막으로 이미 말했지만 답변 고맙고 좋은 하루 보내 - dc App
책부터 완독해라. 근데 좋다 의문형 학생은. 그럼 즐공해라~
new를 쓰든 말든 객체가 만들어 질 때 자동으로 실행되는 것이 생성자임. 생성하는 녀석이 아니라 생성할 때 호출되는 녀석으로 이해하면 편함. 그리고 클래스가 상속이 된 경우, 항상 부모클래스의 생성자가 먼저 호출되고 그다음에 자식클래스의 생성자가 호출됨. - dc App
즉 3.3의 경우 b클래스가 a클래스를 상속받은 경우 a클래스 생성자가 먼저 실행되고, 이후 b클래스의 생성자가 실행됨. - dc App
여기서 중요한건 소멸자인데, 소멸자는 거꾸로 자손클래스 소멸자->부모클래스 소멸자 순으로 호출 됨. 근데 예제의 경우 왼쪽이 a*로 되어 있기 때문에 ~a 소멸자만 호출될 수 있음. 따라서 소멸자는 가상함수로 선언해줘야 함. 그러면 ~b, ~a순으로 잘 됨. - dc App