티스토리 뷰

공부할 내용 [수업자료와 순서를 소폭 변경하여 구성하였습니다.]

  • 입출력
  • 반복문
  • 조건문
  • 배열
  • 클래스
    • 상속
    • 추상 클래스
    • 가상 메서드

남은 내용

  • 인터페이스
  • 난수 생성
  • 문자열 처리
  • 참조형 인수 [out / ref]
  • 자료형 확인 및 캐스팅 [is / as]

 

입출력

C#에서 입출력은 Console.ReadLine / Console.WriteLine을 사용한다.

  • string a = Console.ReadLine();
    • 콘솔으로 입력을 받아 string 변수 a에 저장하는 메서드.
    • Int.Parse(Consol.ReadLine) 혹은 Convert.ToInt32(Consol.ReadLine)를 통해서 int 자료형으로 받아올 수도 있다.
      ┗ Int.Parse(string)
         ┗ Null값을 읽어들일 경우 System.ArgumentNullException이 발생한다.
         ┗ char 자료형을 인수로 넣을 경우 에러가 발생한다.
      ┗ Convert.ToInt32(String)
         ┗ Null값을 읽어들일 경우 0을 반환한다.
         ┗ char 자료형을 인수로 넣을 경우 해당 문자의 ASCII코드가 반환된다.
  • Console.WriteLine(string)
    • 콘솔에 string의 내용을 출력하는 메서드.

 

반복문

for문, while문, do - while문을 사용한다.

  • for(int i = a ; [i에 대한 조건]; [i 변경 규칙] )
    • i가 조건을 만족할 때 까지, 매 반복 마다 변경 규칙을 수향하며 반복한다.
    • 반복에 필요한 모든 요소를 한 번에 작성하기에 간단한 조건은 보기 수월하다.
    • 단, 기존 변수의 조건 만족을 기준으로 하고자 할 경우, 직관성이 떨어질 수 있다.
  • while( [반복 조건] )
    • [반복 조건]을 만족하는 동안 계속해서 반복한다. true를 넣을 경우 무한히 반복한다.
    • 반복 조건의 판별은 '반복문을 수행하기 전'에 시행한다. 때문에 처음 부터 조건이 맞지 않는다면 건너뛴다.
    • 내부에서 반복 조건 성립 여부를 변화시킬 수 있는 요인을 추가하거나, break를 통해서 반복을 끝내야 한다.
  • do - while( [반복 조건] )
    • while문과 동일하나,  반복 조건의 판별은 '반복문을 수행한 뒤'에 시행한다.
    • 때문에 처음 부터 조건이 맞지 않아도 일단 1번은 실행한다.

 

조건문

if, else if, else 구조와 switch-case문(강의에는 없다.)을 사용한다.

  • if( [조건] ) - else 구문 [if, else if, else 셋을 이용하는 방식.]
    • [조건]을 만족하는 경우 if문을 수행하고, 만족하지 않는다면 else 문을 수행하는 방식.
      ┗ else if는 if와 else의 사이에 추가로 판정하는 조건 분기다.
    • 앞선 if 및 else if에서 조건이 만족될 경우 그 뒤의 else if 및 else문은 건너뛴다.
  • switch(a) - case b: 구문
    • a가 b일 경우 해당 case를 수행한다. case는 여럿 존재할 수 있다.
    • break로 끊지 않는다면, 해당 case 이후의 내용도 모두 수행한다. [즉, 일종의 Jump 개념이다.]
    • 모든 case가 성립되지 않을 경우 default:를 수행한다.
      ┗ switch - case문에는 default:가 반드시 존재하여야 한다.

 

배열

  • 자료형[] 배열명 방식으로 선언한다. 선언할 때에는 Size를 지정하지 못한다.
    [즉, '배열의 주소'를 선언하는 것에 가깝다.]
  • 이후 배열명 = new 자료형[Size] 로 빈 배열을 할당하는 방식이다.
  • 혹은 배열명 = { 배열에 저장할 자료(이하 '배열 자료') }으로 '내용을 가진 배열'으로 초기화 하는 것도 가능하다.
    ┗ 이 경우, 해당 배열의 Size는 배열 자료의 Size가 된다.
  • 이후 배열의 내용에 접근할 때에는 배열명[Index]를 사용한다.

 

클래스

다수의 속성과 메서드를 포함하는 요소로, 연산의 주체인 '객체'에 해당하는 요소다.

  • class 클래스명으로 선언한다.
  • 내부에서 선언한 속성(변수)와 메서드(함수)는 해당 class 내부에서만 사용할 수 있다.
  • 클래스 안에 다른 클래스를 호출할 수 있다.
    ┗ 이렇게 호출한 클래스 내부의 public으로 선언된 속성과 메서드를 사용할 수 있다.

 

※ 클래스 vs 구조체

강의에서는 클래스의 정의 방법만 간략하게 나오기에 추가로 정리하기 위한 부분.

  •  클래스(class)
    • 객체[함수 수행의 주체]에 해당한다. 때문에 인수로 사용될 때에는 참조형으로 전달된다.
    • 내부에서 변수의 초기화가 가능하다.
      ┗ 이 때문에, 클래스의 생성자는 모든 변수를 초기화할 필요는 없다.
    • Heap에 저장되며 필요할 때에만 메모리로 불러온다. = 속도는 느리나 안정성이 높다.
    • 상속이 가능하다.
  • 구조체(struct)
    • 커스텀 자료형[단순 자료 묶음]에 해당한다. 때문에 인수로 사용될 때에는 내용을 복사하여 전달된다.
    • 내부에서 변수의 초기화가 불가능하며, 반드시 생성자를 통해서 초기화 해야한다.
      ┗ 이 때문에, 구조체의 생성자는 보유 중인 모든 변수를 '반드시' 초기화 해야한다.
    • Stack에 저장되며, 쓰이지 않더라도 메모리에 적재된다. = 속도는 빠르지만 Stack의 Overflow가 발생할 수 있다.
    • 상속이 불가능하다.

   ◇ 개인적인 해석

        대다수의 자료에서 구조체 보다는 클래스를 사용해야 한다고 서술하나, 실제로는 '둘의 용도가 다르다'에 가깝습니다.

              ▶ 단순히 능력치를 모아놓은 '통합 자료형'을 만들고 싶은 경우에는 클래스 보다는 구조체가 적합합니다.

              ▶ 반대로, 능력치를 이용해서 복잡한 연산을 하고자 하는 경우에는 클래스를 쓰는 것이 바람직합니다.

 

상속

※ 상속과 관련된 내용인 abstract 및 virtual도 여기에 포함시킵니다.

  • 부모 클래스의 특성(변수)과 메서드(함수)를 물려받는 구조를 의미한다.
    ┗ C#에서는 죽음의 다이아몬드(동일 명칭 함수 중복 상속) 문제 등의 예방을 위해서 다중 상속을 지원하지 않는다.
  • 부모 클래스로 선언한 변수에 자식 클래스를 할당하는 것도 가능하다.
  • 또한, protected, virtual, abstract 등의 상속을 기반으로 한 구성도 존재한다.
    • protected: 해당 접근 제한자로 선언된 변수 및 메서드는 자식 클래스에서만 사용할 수 있다.
    • virtual 메서드: 가상 메서드로, 자식 클래스에서 override하여 사용하는 것을 허용하는 메서드.
      ┗ 하단의 abstract 메서드와는 달리 override를 하지 않고도 사용할 수 있다.
    • abstract 클래스: 추상 클래스. 클래스의 선언을 불완전하게 하는 구성.
          ▶ abstract 메서드: 추상 메서드. 자식 클래스에서 반드시 override 하여 사용하여야 한다.
      ┗ 이 자체로는 사용할 수 없고 반드시 상속하여 사용하여야 한다.
      ┗ 여러 클래스들이 공통적으로 가져야 할 '특징의 종류'를 선언하는 용도로 쓰인다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함