본문 바로가기
반응형

유니티 공부/C# 문법50

C# - Try패턴(TryLoad,TryParse등)에서 out 사용시 null을 조심하자! 분명히 모든 변수를 초기화를 했는데 계속 NullReferenceException가 떴다. 원인을 찾아보자 하다가 TryLoad때문이라는 것을 알게되었다. Try 사용시 null 조심!아래와 같이 inventory리스트를 먼저 초기화했다고 가정해보자void Main(){ List inventory = new List(); if (TryLoad(out SaveData saveData, out List list)) { inventory = list; }}inventory도 미리 new List()으로 초기화했으니까 null 에러가 날 일이 없다고 생각하겠지만 실제로는 TryLoad() 함수 내부에서 이 값을 null로 덮어씌워졌기 때문에 이후 코드에서 inventory를 .. 2025. 4. 24.
C# - 정수 입력 받을때 Parse보다는 TryParse를 사용해서 예외처리까지 확실히! 보통 정수를 받아온다하면 아래와 같이 int.Parse를 많이 사용한다. int number = int.Parse(Console.ReadLine()); 하지만 만약에 숫자를 입력한 것이 아니라 문자열이 들어오면 바로 예외가 발생하게 됩니다. 그래서 애초에 예외가 발생하지 않도록 처리할 수 있는 TryParse를 사용하는 것이 더 안전합니다. TryParse이란?변환을 시도하고 성공 여부를 bool로 반환하는 메서드입니다. 변환에 성공하면 해당 값을 out 변수에 저장합니다. 실패시 기본값(string인 경우 "", int인 경우 0, bool인 경우 false)이 들어가게 됩니다.bool isSuccess = int.TryParse("123", out int number);예시string input = .. 2025. 4. 24.
C# - 상태 패턴(State Pattern) 상태 패턴이란?객체 자신의 내부 상태에 따라 행위를 변경하도록 하는 패턴이다. 즉 객체의 특정 상태를 클래스로 선언하고 해당 상태에서 할 수 있는 행위들을 메소드로 정의한다. 그리고 이러한 상태클래스를 인터페이스로 캡슐화하여 클라이언트에서 인터페이스로 호출하는 방식으로 사용한다. 상태 패턴 구조 State인터페이스 : 상태를 추상화한 고수준 모듈ConcreteState : 구체적인 각각의 상태를 클래스로 표현Context : State를 이용하는 시스템, 시스템 상태를 나타내는 State 객체를 합성하여 가지고 있다. 클라이언트로부터 요청받으면 State객체에 행위 실행을 위임한다.코드 예시상태 패턴을 사용하는 경우using System;// 상태 인터페이스public interface IState{ .. 2024. 5. 7.
C# - 전략 패턴(Strategy Pattern) 디자인 패턴이란?(소프트웨어)디자인 + (공통적으로 마주치는 문제를 해결하는 방법의)패턴이다. 전략이란?특정한 목표를 수행하기 위한 행동계획이다. 예를 들어 로봇을 만든다고 해보자로봇에는 다양한 전략 기능을 넣을 수 있다. 1) 이동 전략(걷기,뛰기, 날기) 2) 온도 전략(차갑게,뜨겁게,미지근하게) 전략 패턴이란?디자인 패턴 중 하나로, 객체가 할 수 있는 행위들 각각을 전략으로 만들어 놓고 사용하며, 동적으로 전략 수정이 가능한 패턴이다.  전략 패턴 구조전략 : 모든 전략 구현체제에 대한 공용 인터페이스구체적인 전략(전략 인터페이스) : 알고리즘, 행위, 동작을 객체로 정의한 구현컨텍스트 : 알고리즘을 실행해야 할 때마다 해당 알고리즘과 연결된 전략 객체의 메소드를 호출클라이언트 : 특정 전략 객체.. 2024. 5. 7.
C# - SOLID 원칙 1. 단일 책임 원칙(Single Response Principle)이름 그대로 하나의 클래스는 하나의 책임만 갖는 원칙이다.예를 들어 플레이어와 관련된 스크립트가 있다고 해보자 그러면 플레이어의 입력, 이동 관련, 각종 사운드 관련 기능 등이 있을때 아래와 같이 별도의 스크립트로 분리해야한다. 왜 이렇게 해야할까?만약 플레이어의 움직임만 수정하고 싶을 때 단일 책임 원칙을 지키고 있다면 Movement스크립트만 수정하면 되지만 원칙을 지키지 않는 경우 모든 클래스를 수정해야한다. 01 가독성스크립트에 단일 기능만 적혀있으니 많은 기능들이 포함된 경우보다 스크립트의 길이가 짧아질 것이다. 그러므로 가독성이 좋다.02 확장성하나의 기능으로만 이루어져있기 때문에 이 클래스를 상속받아 확장하기에 용이하다.03.. 2024. 5. 6.
C# - const와 readonly const const 값은 변수가 선언될 때 초기화 되며 이후에는 변경할 수 없다. 또한 자동으로 static의 특성을 갖는다. 마지막으로 const는 선언과 동시에 초기화 되어야한다. 만약에 안될 경우 컴파일 에러가 뜬다. const int pi = 3.14; readonly 초기화 이후에는 변경할 수 없지만 선언할 때 또는 클래스의 생성자에서 값을 할당할 수 있다. 자동으로 static되지 않는다. 마지막으로 변수는 선언시 초기화할 필요가 없이 생성자에서 초기화 할 수 있다. 이 변수는 런타임시 할당된다. public class Piggy { public readonly static int piggy_age; public readonly int piggy_weight; static Piggy() { .. 2024. 4. 9.
반응형