생성자는 클래스안에 정의된 특수한 메서드 반환 타입이 없으며 이름이 클래스명과 동일한 메서드 인스턴스가 생성된 후 자동으로 호출 매개변수가 있는 생성자도 있다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Step31
{
internal class Car
{
public string name; //맴버 변수
//생성자 메서드는 클래스의 이름과 동일
//외부로부터 전달된 인수(문자열값은) 매개변수
//carName에 할당된다.
public Car(string carName)
{
//생성자에 반환 타입을 작성해서는 안된다.
Console.WriteLine("생성자가 호출 됨");
//매개변수 출력
Console.WriteLine("매개변수 : {0}", carName);
//맴버변수 출력
Console.WriteLine("맴버변수 : {0}", name);
//생성자 메서드 호출이 완료되면
//매개변수의 값이 사라지므로
//매개변수의 값을 맴버변수에 할당
name = carName;
Console.WriteLine("맴버변수 : {0}", name);
//이렇게 할당된 맴버 변수는
//해당 객체의 수명동안 사라지지 않는다
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Step31
{
internal class Program
{
static void Main(string[] args)
{
//인스턴스가 호출 된후
//인스턴의 생성자가 호출된다
//매개 변수가 있는 생성자일 경우 반드시 인수를 전달해야 한다
//new Car("싼타페");
//변수에 Car인스턴스 할당
Car car = new Car("싼타페");
//car변수의 속성 name 출력
Console.WriteLine(car.name);
}
}
}
클래스는 사용자 정의 형식 객체를 만들고 싶다면 new 키워드 사용 생성된 객체는 값이다 이 값을 인스턴스라고 부른다.
맴버 => 맴버 변수 + 맴버 메서드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Step30
{
internal class Car
{
public string name; //속성, 필드, 맴버 변수
public void MoveForward() //맴버 메서드
{
Console.WriteLine("{0}가 전진합니다.", name);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Step30
{
internal class Program
{
static void Main(string[] args)
{
//Car 인스턴스를 담는 변수 선언
//변수타입 변수명
//자동차 (Car)인스턴스를 할당할 예정이므로
//변수 타입은 Car
//변수 선언
Car car;
//변수에 값 (Car 클래스의 객체(인스턴스)) 할당
// = 는 같다라는 뜻이 아니라 오른쪽 값을 왼쪽 변수에 할당하는 연산자
car = new Car();
//car변수의 name 속성(맴버 변수)에 값 할당
//자동차 이름 설정하기
//car 변수 이름을 적고 속성명(name)을 적기
//다음과 같이 에러 메시지가 보이면 읽기
//보호 수준 때문에 엑세스 할 수 없다
//name 속성은 현재 private이기 때문
//name 속성의 접근 제한자를 public으로 변경하고
// 값을 할당
//문자열 값을 할당
car.name = "싼타페";
//car 변수에 .을 찍고 클래스에 정의되어 있는
//메서드 호출
//보호수준 때문에 엑세스 할 수 없다는 에러 메시지
//메서드의 접근제한자를 private => public으로 변경
car.MoveForward();
//컨트롤 + f5를 눌러 실행
//새로운 Car객체를 생성하고
//새 변수에 할당
Car car2 = new Car();
//속성을 설정
car2.name = "쏘렌토";
//메서드 호출
car2.MoveForward();
//실행
//클래스로부터 생성된 인스턴스는 독립적
}
}
}