■ 학습 개요
○ 오늘 계획
- 1, 2, 3 주차 강의 정리 복습
- 튜터님께 질문 드리기
- 4주차 강의 듣기
(인터페이스, 열거형, 예외처리, 값형참조형, 델리게이트, 람다, LINQ, 고급자료형)
- 강의 내용 정리하여 벨로그에 업로드
- TEXT RPG 과제 프로젝트 시작
○ 학습 회고
-
지난 주에 C#을 처음 배우기 시작했을 때는 C#과의 차이 때문에 이해가 어려웠다. 주말동안 C# 학습 내용을 복습하며 진도 범위까지 C++과의 차이 비교도 같이 정리했다.
덕분에 C# 이해가 안되던 부분들을 제대로 학습 할 수 있었다. 또한, 비교하며 공부하다 보니 C++도 더욱 상세히 알게 되었다.
-
벨로그에 지난주 학습본을 정리해서 오전 시간동안 복습하기 수월했다. 직접 적고 추가 설명을 검색해서 덧붙이다 보니 시간은 오래 걸렸지만, 들인 노력만큼 학습효과가 좋다.
-
오늘도 강의 수강 전 강의자료를 바탕으로 벨로그를 작성하고, 강의를 수강하며 강사님이 강조하신 내용이나 내가 좀 더 알고 싶은 내용을 검색하여 추가 작성했다.
-
저번주 까지는 C#에 적응하느라 정신 없었지만, 오늘은 어느정도 익숙해져서 C#의 장점들이 보이기 시작했다.
코드 간결함과 구조적 단순함, 또한 사용자를 위해 이미 많은 기능이 구현되어 있어 편리하다.
-
정리한 내용들은 완벽히 이해될 때까지 매일 오전시간에 복습할 예정이다.
○ TIL 작성계획
- 학습 내용을 상세 정리한 벨로그글은 링크로 첨부하고, 어려웠던 점이나 중요하다고 생각하는 내용을 간략히 적을 예정이다.
- 본인이 중요하게👍 생각하거나 헛갈리는 부분😥을 집중 작성할 계획
■ 질문 답변 정리
Q1. 인터페이스 상속 활용
= 새 기능이 추가될 때 인터페이스가 추가 상속 됨
= 확장은 클래스 사용 권장
= 단순히 기능을 추가한다면 인터페이스 사용 권장
Q2. 제네릭 꺽쇠 안에 꼭 T가 들어가야하는지 다른 단어는 안되는지 궁금
= T 는 예약어이기 때문에 변경 불가능
Q3. C#은 꼭 프로퍼티를 통해 필드를 관리하는지 궁금
= MS가 프로퍼티 사용을 권장함
= [클래스.변수] 형태 처럼 변수에 직접적으로 접근할 때는 프로퍼티 사용
= 예외처리가 길어지면 가독성이 안좋아 함수를 사용하는 것도 좋음
= 클래스나 인터페이스를 통해 기능적으로 변수에 접근할 때는 함수 사용도 좋음
Q4. out과 ref 참조 차이 궁금
= 방향성 차이
= out은 메서드 안에서 매개변수를 연산하고 연산된 값을 뱉어냄
= ref는 바깥에서 변수를 먼저 선언 해야함. 매개변수를 통해 전달 받고 연산함
■ C#학습 내용 정리
C# 기초 정리 6 - 인터페이스와 열거형
- 노트정리 링크
- 인터페이스와 추상 클래스 둘다 빈 서식(메소드, 기능)을 만들고 상속 받은 클래스 내에서 필수적으로 구현 해야한다는 것이 비슷하다
- 단, 추상 클래스는 상속을 통해 기본적인 동작을 공유하면서 구체적인 동작을 자식 클래스에 맡기고자 할 때 유용하며, 인터페이스는 여러 클래스가 동일한 계약을 따라야 할 때, 특히 다중 상속이 필요한 경우에 유용하다
C# 기초 정리 7 - 예외 처리 및 값형과 참조형
- 노트정리 링크
- catch 블록은 위에서부터 순서대로 실행되며, 예외 타입에 해당하는 첫 번째 catch 블록이 실행된다
- 예외가 발생한 경우 해당 예외와 일치하는 catch 블록이 실행되고, 나머지 블록은 무시된다
- 예외 처리는 프로그램의 안정성을 높이고 디버깅을 용이하게 한다
기초 정리 8 - 델리게이트, 람다 및 LINQ
- 노트정리 링크
- C++에서도 델리게이트, 람다를 사용해보아서 반가웠다. C++보다 훨씬 간결하고 편리했다. 과제가 끝나면 이것도 C++과 C#의 차이점을 정리할 예정이다
- LINQ는 C#에서 처음 보았는데, 나중에 시간이 나며 실례를 찾아서 연습해봐야지 이해가 될 것 같다
기초 정리 9 - 고급 자료형 및 기능
- 노트정리 링크
- Nullable 또란 실례를 바탕으로한 추가 연습이 필요하다
- StringBuilder, C++과 다르게 C#은 문자열에 작업을 할때마다 새로운 문자열이 생성되어 메모리 낭비가 된다고 배웠다.
스트링빌더를 이용한다면 내부 버퍼를 사용하여 크기를 동적으로 조정할수 있다.
반복적인 문자열 조작 작업이 발생해도 스트링빌더를 이용하면 메모리 할당 및 해제 오버헤드가 크게 감소한다