//클래스//
클래스는 어떤 객체의 변수와 메소드의 집합으로 프로그램을 만든다고 볼수 있고 이러한 집합을 객체 지향이라고 하고, 동일한 속성과 행위를 수행하는 객체의 집합이라고 보면된다.
간단하게 예를 들어 어떤 치킨집이 있다고 하면 치킨집에서 치킨을 주문 할때 같이 나오는 것들이 있다. 젓가락, 무, 음료. 치킨 등 각자의 기능을 가진 요소 들이 있다고 하면 이 요소들은 하나의 객체라고 볼 수 있다. 여기서 포괄적으로 볼 경우에 음료와 치킨은 각각의 종류로 나눌수 있다. 예를 들어 음료는 사이다,콜라, 환타 등으로 치킨의 경우에는 양념, 간장, 후라이드로 나눌수 있다. 이런 식으로 '어떤 입력에 대한 작업의 결과를 출력해 주는 것'을 '함수'라고 한다.
그럼 여기서 클래스는 무엇일까? 클래스는 데이터(필드)와 처리(메소드)를 놓은 곳이고 이 둘을 합쳐서 클래스라고 한다. 이러한 클래스는 정의를 하더라도 그 자체에 값을 저장할 수 없지만 여러개의 클래스 객체를 생성할 수 있다.
클래스의 객체는 클래스를 바탕으로 값을 저장할 수있는 변수와 같은 것을 객체라고 한다. 또한 각 객체에는 서로 다른 데이터를 줄 수 있다.
설명하면 치킨집을 예로 들었을때 프렌차이즈와 같은 것이라고 보면된다. 여러 지역이나 장소에서 치킨을 주문 할 수 있지만 본점(클래스)의 맛과는 달라 질 수 있고 다른 가게(프렌차이즈)에서는 포테이토가 추가되서 나온다던가 가게 주인마다 서비스가 추가 되면서 달라질 수 있다. 이 말은 한 클래스에서 여러 객체를 생성하였을 떄, 각 객체(프렌차이즈)에서는 다른 데이터를 넣을 수 있다는 것이다.
<클래스의 정의와 생성>
<객체의 생성>
[인스턴스 메소드 사용법]
클래스명 객체명 = new 클래스명(); - 객체화
(예) Student Jisu = new Student();
객체명.메소드명() - 호출
[지역 메소드 사용법]
클래스명,메소드명();
객체 생성에는 new연산자를 사용한다. 이러한 객체를 생성하는 것을 인스턴스화라고 한다.
//필드//
클래스 안의 변수를 필드라고 한다. 클래스에 필드를 추가하려면
class CN{
public int a = 2; // (형) (필드명) = (필드의 정의); _ 형의 앞에 public을 써준다.
}
*필드의 참조와 대입*
- 같은 객체 내의 필드를 참조하거나 대입하려면 필드명을 그대로 써준다.
a = 9;
b= a+2;
- 다른 객체의 필드를 참조하거나 대입하려면 <" . " 마침표>를 사용한다.
CN.a = 4; //CN클래스의 객체 a를 받아 온다.
b= CN.a +2;
//메소드//
- 프로그램이 준 값을 지시대로 처리하여 결과를 만들어 내는 상자와 같다.
- 처리의 재료가 되는 값을 인수라고 하며 결과인 값을 반환값이라고 한다.
- 필요한 곳에서 호출하여 사용가능하고 반복되는 코드를 줄일수 있음.
*인자값(인수값)*
- 메소드를 호출 할 시 그 메소드에 넘겨주는 값, 인자값과 매개변수의 데이터 형은 같아야한다.
*매개변수*
- 외부에서 들어오는 인자 값을 메소드 안으로 넣어주는 역할, 인자갑과 매개변수의 테이터 형이 같아야한다.
*return 값*
- 메소드가 반환하는 값을 말한다. 상수/변수/연산식/객체를 반환 할 수 있고, 메소드가 반환하는 리턴값과 메소드의 반환형은 데이터 형이 같이야함
<메소드 정의>
class C{
public int add(int a, int b){
int x;
x= a+b;
return x;
}
}
<메소드의 4가지 형태>
1. 반환 값이 없는 메소드
: 매개변수에 들어오는 값에 따라서 하는 일이 달라지고, 매개변수에 들어오는 값을 메소드 안으로 넣어준다.
void diap( int a){ //인수의 정수값을 표시하는 메소드
Console.WriteLine("인수의 값은 " + a);
return; //반환값이 없는 경우, 생략 가능
}
2. 인수가 없고 반환 값이 있는 메소드
: 고정값으로 사용되는 경우에 사용된다.
double half(){ //같은 객체 내의 필드 a의 값을 2.0으로 나눈 값을 구하는 메소드
b=a/2.0;
return b;
}
3. 인수도 반환 값도 없는 메소드 //Hello라고 표시하는 메소드
: 메소드 내에서 정의된 정해진 일 한가지만 부를 때마다 호출
void print(){
Console.WriteLine("Hello");
}
4. 인수도 반환 값도 있는 메소드
: 매개변수로 들어오는 값에 따라 결과 값이 달라지고, 메소드 호출시 입력한 인자 값을 받아서 메소드 안으로 넣어준다.
int sum( int a, int b){
return a+b;
}
//지역 변수//
메소드 안에 선언한 변수를 지역 변수라고 한다.
필드와 지역 변수는 같은 이름으로 지정할 수 있기 때문에 메소드 안에서 지역변수와 같은 이름의 필드를 참조할 경우에는 앞에 <this>를 사용하여 지역변수와 필드의 변수를 구별한다.
(예)
//오버로드//
한 클래스 안에 같은 이름이지만 인수의 수나 형이 서로 다른 메소드를 여러개 정의 하는 것
->이름이 같고 반환 값이 다른 메소드는 오류가 된다. 또 같은 이름의 메소드라도 인수의 수나 형이 다르다.
//접근 지정자//
외부의 객체에서 데이터를 자유롭게 가져오거나, 반대로 외부에서 볼수 없도록 데이터의 접근을 제어하는 역할
//생성자//
객체를 생성할때 함께 자동으로 호출되는 것, 클래스와 같은 이름을 갖는 함수
- 반환 값이 없고, 필드의 초기화 등에 이용한다.
* 디폴트 생성자 : 명시적으로 생성자를 선언하지 않아도 컴파일러가 암시적으로 기본생성자를 생성한다.
* 복사 생성자 : 같은 클래스의 객체를 인수로 받아 대응하는 필드에 값을 대입하는 생성자 -> 받은 객체를 복제한다.
//속성(=프로퍼티)//
객체 안에 있는 필드의 값을 <취득> 또는 <설정>하는 메소드 이다.
속성은 필드의 값을 반환하는 <get>액세서와 필드의 값을 대입하는 <set>액세서로 구성된다.
* 정보은닉을 위해서 private를 사용하여 변수를 선언하면, 선언된 변수를 사용하기 위해서 get,set메소드를 구현해야했고 필요할때마다 메소드를 불러와야하는 번거로움이 있었다. 하지만 프로퍼티를 이용하면 private로 정보은닉이 되어있는 변수를 public 변수처럼 접근할수있게하는 특수 메소드 이다.
1. <get>엑세서를 명시하지 않으면 쓰기 전용이 되고, <set>액세서를 명시 하지 않으면 읽기 전용이 된다.
2. <set>엑세서의 <value>키워드는 <set>엑세스가 할당하는 값을 정의하는데 사용한다.
3.<get> 엑세서는 속성 값을 반환하고, <set>엑세서의 새 값을 할당하는데 사용한다.
(예) 프로퍼티를 이용하여 값 출력하기
//인덱서//
객체 안의 배열에 액세스하여 클래스를 배열처럼 취급 할 수 있도록 하는 구조
인덱서의 사용법은 속성과 동일하다.
<선언>
public int this[int i]
{
get
{
return drop[i];
}
set
{
drop[i] = value;
}
}
(예)입력 받은 값을 순서대로 출력하기
//Main()메소드//
static void Main(string[] args)
{
}
프로그램을 실행하면 맨 처음 호출되는 메소드이고, 함수의 호출이 완료되거나 반환 될때 종료된다.
static을 붙여 한 프로그램에 한개만 작성하기로 약속되어있다.
프로그램의 반환값을 void에서 int로 바꾸면 프로그램이 종료할때 지정한 값을 반환하게 할수 있다.
->int형으로 정의할 경우, 자신의 상태 정보를 전달할 수 있다는 장점이 있다.
main()의 매개변수로 string 배열이 정의되어 있다. ->프로그램을 시작 할 때 전달 할 값이 있을 경우 사용되는 매개 변수이다.
매개 변수가 필요하지 않을경우, static void Main() 로 선언해도 무관하다.
이미지 출처 ; https://thrillfighter.tistory.com/
'PROGRAMING📚 > C#📑' 카테고리의 다른 글
C#_기본 문법 (0) | 2019.03.07 |
---|---|
C#_클래스의 응용 (0) | 2019.02.23 |
C#_ 제어문 (0) | 2019.02.21 |
C#_데이터형 (0) | 2019.02.14 |
C#_연산자 (0) | 2019.02.14 |
댓글