[C#]TIL (21) | 2023.08.22

kjg5370·2023년 8월 22일
0

TIL

목록 보기
21/91
post-thumbnail

들어가기 앞서

개인과제를 하면서 하루가 정말 빠르게 지나갔습니다.
개인과제가 어렵긴 했지만 이것 말고도 할게 많다고 생각하니
점점 무력감이 증가하는 것 같습니다.
뭔가 쉬엄쉬엄 하고 싶기도 하지만 TIL을 매일 쓰는건 잊지 않으려고 합니다.

오늘 배운 것

예외 처리 및 값형과 참조형

  • 예외 처리(Exception Handling) : 프로그램이 예기치 않은 상황에서 예외가 발생했을 때 해당 상황을 처리하는 기술을 의미.
    C#에서 예외 처리를 구현하는 주요 방법은 try-catch 블록을 사용.

    • 구현

      	class Program
      	{
      		static void Main(string[] args)
      		{
          		try
          		{
              		Console.Write("나눌 숫자를 입력하세요: ");
              		int divisor = int.Parse(Console.ReadLine());
      
      	            int result = 10 / divisor; // 예외 발생 가능성 있는 코드
      
          		    Console.WriteLine("결과: " + result);
         			}
          		catch (DivideByZeroException)
          		{
              		Console.WriteLine("0으로 나눌 수 없습니다.");
          		}
          		catch (FormatException)
          		{
              		Console.WriteLine("잘못된 숫자 형식입니다.");
          		}
          		catch (Exception ex)
          		{
              		Console.WriteLine("예외가 발생했습니다: " + ex.Message);
          		}
          		finally
          		{
              		Console.WriteLine("예외 처리 완료");
          		}
      		}
      	}
    • finally 블록
      finally 블록은 예외 발생 여부와 상관없이 항상 실행되는 코드 블록.
      finally 블록은 예외 처리의 마지막 단계로, 예외 발생 시 정리 작업이나 리소스 해제 등의 코드를 포함할 수 있음.
      finally 블록은 try-catch 블록 뒤에 작성되며, 생략할 수도 있음.

    • 예외 처리의 필요성과 장점

      1. 프로그램 안정성 확보: 예외 처리를 사용하여 예기치 못한 상황에 대응할 수 있기 때문에 프로그램이 비정상적으로 종료되지 않고 계속 실행될 수 있음.

      2. 에러 정보 제공: 예외 처리를 통해 발생한 예외에 대한 정보를 기록하거나 출력할 수 있음. 이로써 개발자는 문제를 파악하고 디버깅하는 데 도움을 받음.

      3. 유연한 코드 제어: 예외 처리를 통해 프로그램의 흐름을 제어하여 예외가 발생하면 특정 작업을 수행하거나 대체 로직을 실행하여 예외 상황을 처리할 수 있음.

      4. 확장성 및 호환성: 예외 처리를 제대로 구현하면 새로운 예외 상황이나 변경된 환경에서도 프로그램을 유연하게 조정할 수 있으므로 시스템의 확장성과 호환성을 높일 수 있음.

    • 사용자 정의 예외
      기본적으로 제공되는 예외 클래스 외에도 사용자 정의 예외 클래스를 만들어 특정 상황에 맞는 예외를 정의하고 처리할 수 있음.

      • 사용자 정의 예외 클래스를 만드는 방법

        1.새로운 예외 클래스 정의: Exception 클래스를 상속하여 새로운 예외 클래스를 정의.

        2.생성자 작성: 사용자 정의 예외 클래스의 생성자를 작성하여 해당 예외의 메시지나 추가 정보를 초기화.

        3.필요한 속성 추가: 사용자 정의 예외 클래스에는 예외와 관련된 추가적인 정보를 제공하기 위한 속성을 추가.

        4.예외 메시지 지정: 사용자 정의 예외 클래스의 생성자에서 예외 메시지를 초기화하거나, 기본 생성자를 사용할 때는 base() 호출을 통해 부모 클래스의 생성자에 예외 메시지를 전달.

        5.예외 던지기: 적절한 시점에서 사용자 정의 예외를 throw 문을 사용하여 던짐.

  • 값형과 참조형

    • 값형(Value Type)
      변수에 값을 직접 저장.
      변수가 실제 데이터를 보유하고 있으며, 해당 변수를 다른 변수에 할당하거나 전달할 때는 값이 복사.
      값형 변수의 수정은 해당 변수의 값만 변경하므로 다른 변수에 영향을 주지 않음.
      int, float, double, bool 등.

    • 참조형(Reference Type)
      참조형은 변수가 데이터에 대한 참조(메모리 주소)를 저장.
      변수가 실제 데이터를 가리키는 참조를 갖고 있으며, 해당 변수를 다른 변수에 할당하거나 전달할 때는 주소가 복사.
      참조형 변수의 수정은 동일한 데이터를 가리키고 있는 다른 변수에 영향을 줄 수 있음.
      클래스, 배열, 인터페이스

    • 값형과 참조형의 차이점

    1. 메모리 저장 방식
      값형: 실제 데이터 값을 메모리에 저장.
      참조형: 데이터의 주소(참조)를 메모리에 저장.
    2. 복사 동작
      값형: 값이 복사됨, 독립적인 데이터를 가짐.
      참조형: 참조가 복사됨, 같은 데이터를 가리키는 참조를 공유.
    3. null 값 처리:
      값형: null 값을 가질 수 없음.
      참조형: null 값을 가질 수 있음.
  • 박싱과 언박싱
    박싱(Boxing)과 언박싱(Unboxing)은 값형과 참조형 간의 변환과 관련된 개념.

    • 박싱(Boxing)
      값형 데이터를 참조형의 객체로 감싸는 작업.
      값형 데이터가 힙(heap) 메모리에 박스(객체)로 감싸져 저장.
      값형 변수를 참조형 변수로 할당하거나 값형 데이터를 객체 컬렉션에 저장할 때 발생할 수 있음.
      박싱을 통해 값형은 참조형의 멤버인 메소드나 속성을 사용할 수 있게 됨.

      int intValue = 42;
      object boxedValue = intValue; // 박싱 발생
    • 언박싱(Unboxing)
      박싱된 객체에서 값형 데이터를 추출하는 작업.
      힙에 저장된 객체에서 값형 데이터를 가져와서 값형 변수에 할당.
      참조형 변수에서 값형 데이터를 추출하거나 객체 컬렉션에서 값을 꺼낼 때 발생할 수 있음.
      언박싱을 통해 값형 데이터가 다시 원래의 값형으로 변환.

      object boxedValue = 42;
      int intValue = (int)boxedValue; // 언박싱 발생
    • 주의 사항
      박싱과 언박싱은 메모리 오버헤드와 성능 저하를 유발할 수 있음.

      박싱된 객체는 힙 메모리에 저장되므로 값형 변수의 메모리 효율성이 손상될 수 있음.

      박싱된 객체를 언박싱할 때는 적절한 형변환을 사용하여 원래의 값형 데이터를 가져와야 하는데 데이터 유실이나 형식 불일치를 방지하기 위해 주의해야 함.

기억 할 것 & 진행 사항

  • catch 블록의 우선순위
    • catch 블록은 위에서부터 순서대로 실행되며, 예외 타입에 해당하는 첫 번째 catch 블록이 실행.
    • 예외 타입은 상속 관계에 있는 경우 상위 예외 타입의 catch 블록이 먼저 실행.
  • 다중 catch 블록
    • 여러 개의 catch 블록을 사용하여 다양한 예외 타입을 처리할 수 있음.
    • 다중 catch 블록을 사용하면 각각의 예외 타입에 따라 다른 예외 처리 코드를 작성가능.
  • 예외 객체
    • catch 블록에서는 예외 객체를 사용하여 예외에 대한 정보를 액세스할 수 있음.
    • 예외 객체를 사용하여 예외의 타입, 메시지 등을 확인하고 처리.

현재 진행 사항

  • 체크리스트
    • 개발 환경 설정
    • 기본 코드 구조
    • 변수와 자료형
    • 연산자 문자열 처리
    • 조건문과 반복문
    • 배열과 컬렉션
    • 매서드와 구조체
    • 클래스와 객체
    • 상속과 다형성
    • 고급 문법 및 기능
    • 인터페이스와 열거형
    • 예외 처리 및 값형과 참조형-> 여기까지 정리중
    • 델리게이트, 람다 및 LINQ
    • 고급 자료형 및 기능
    • 알고리즘 기초
    • 정렬 알고리즘
    • 탐색 알고리즘
    • 고급 알고리즘
    • 문제해결 전략과 실전 연습 -> 현재 여기까지 강의 수강

내일 할 일

  • 하루 계획
    • 오전
      • 09:00 ~ 09:30 : 팀원 간 인사 및 하루 계획 작성
      • 09:30 ~ 14:00 : 지급 받은 강의 복습
      • 12시-1시: 점심식사
    • 집중 코딩
      • 14:00 ~ 18:00 : 지급 받은 강의 복습
    • 저녁
      • 6시-7시: 저녁식사
      • 19:00 ~ 20:00 : 지급 받은 강의 복습
      • 20:00 ~ 20:30 : 6조 회의
      • 20:30 ~ 21:00 : TIL,마무리 회고 진행
profile
학생입니다

0개의 댓글