개발 고수(가 되고 싶은) 블로그
반응형

언어공부/C# 공부 8

변수명 짓는 방법: 코드 가독성을 높이는 핵심 요소

클라, 서버, 백엔드, 프런트엔드 구분 없이 프로그래밍의 가장 큰 난제는 누가 뭐라 해도... 변수명 짓기이다. 변수명이 뭐가 중요하냐! 돌아가는 코드만 잘짜면 되는 게 아니냐! 할 수도 있지만 생각보다 중요하다. 네이밍 규칙을 정의 하고 코드를 짜는 가장 큰 이유는 해당 변수가 어떤 역할을 하는지 한눈에 알도록 하고 협업 시 읽기 편하게 하는 것이다. 마치 소설을 보는데 다른사람이 썼다고 중간에 문체가 바뀌면 이질감이 드는 것처럼 코드도 마찬가지다. 통일하지 않은 코드 규칙은 어떻게 동작하는지 파악하는데 시간이 더 오래걸리기 때문에 전체 생산성과도 관련이 있다. 물론 맞춤법처럼 획일화된 기준은 없다. 그래서 어떤 방식으로 지어도 괜찮지만 일관된 방식이 가장 중요하다. 쓸때 고려하는 형식과 관련된 3가지..

C# 으로 Excel File 가공하기 -1-

데이터를 가공하기 위해서는 python, lua 같이 그런쪽에 특화된 인터프린터 언어가 있긴하지만 처음 접해보면 기존 C / C++ / C# 같은 컴파일러 언어 유저들에게는 쉽지 않다. (나만 그럴수도? 나는.. 너무 불편하다..) 게임 개발에 있어서는 C# 으로 쓰게 되면 아무래도 unity 개발자의 경우는 좀 더 코드 파악이 쉽다는 장점이 있다. 그래서 C#으로 만들어보고 싶었다. 게임 개발 시에 대부분 엑셀을 이용해서 기획자가 데이터를 작업을 해주고 해당 엑셀 파일을 이용해 추가 프로그램으로 yml이나 xml이나 json 같은 형태로 변환한다. 이후 클라이언트에서 저장된 파일을 메모리에 로드해서 사용하게 된다. 혹은 직접 엑셀이 아닌 csv 형태로 저장해서 그대로 사용도 가능하다. 만약 엑셀 파일을..

c# const vs readonly vs init

const const int a; 컴파일시 할당된 상수로 변환된다. 생성자에서 값을 넣어주지 않으면 컴파일 에러가 발생된다. stack 영역에 저장되며 따라서 많은 const 값이 있다면 메모리가 터질지도..? readonly readonly int a; 단 한번만 값을 넣어줄 수 있다. (언제든 단한번) Mono에서 쓸 수 없다. C# 8.0 에서 추가됨 생성자 or 초기화에서만 초기화 가능 —> mono의 경우 awake 밖에 못쓰니까 못쓰는 것 struct 에서 많이 씀 heap 에 할당된다. init int a {get; init;} property 에서 설정해주면 된다. mono 에서 쓸 수 있다. (2021.1 이상에서) 단 한번만 값을 넣어줄 수 있다. C# 9.0 에서 추가됨 immutab..

다양한 C# Switch 문의 세계

나는 예전에 C++ 공부하다가 kotlin 을 찍먹 했을때 가장 놀란 부분 중 하나가 switch 문에서 비교문을 쓰는 것이었다. 그러다 unity 공부를 하면서 c# 으로 넘어갔는데 요것도 상당히 유용한 문법이 많아서 공유하려 한다. 우선 첫번째 누구나 아는 활용 방법 class Test { enum STATE { Idle, Walk, Jump } private STATE CurState; void Play() { switch (CurState) { case STATE.Idle: //Idle(); break; case STATE.Walk: //Walk(); break; case STATE.Jump: //Jump(); break; } } } 모르면 간첩이다. 2번째 내가 가장 애용하는 switch 문 이..

nullable 이란 ? (bool? int? )

말그대로 null 이 가능하다는 의미이다. 즉 int? num = DataTable.GetNumber(key); 이런 문장이 있다? 라는 건 datatable.getnumber 를 했을때 key 에 해당하는 num 이 datatalbe 에 없을 수 도 있는 것 그럴때 해당 num 에 null 값이 들어가게 된다. 물론 대부분은 int 값이 없으면 0이 들어가는데 실제로 num 이 0 일 수 도 있으니까 불명확하게 num == 0 이런식으로 사용하는 것은 좀 애매해진다 나의 경우에는 nullable 을 통해서 체크하는 방법을 선호한다. 자매품으로 이런 것도 선호한다 myClass my; my ??= new myClass(); 왜냐 null 체크가 편하고 ??= 의 경우에는 해당값이 null 일 경우에 이값..

Struct VS Class VS Record

Class Reference Type 복잡한 데이터 구조와 함수를 정의하는 데에 사용 상속, 다형성 지원 생성자, 메서드, 속성, 이벤트 및 필드를 가질 수 있음. 비교 연산자를 정의 할 수 있다. Struct Value Type( stack 에 호출 , c # 의 경우에 Heap 만 GC 를 돈다) 단순데이터 구조를 정의하는데 사용 상속 및 다형성 지원 X 생성자, 메서드, 속성, 필드를 가질 수 있습니다,. 값 기반 동일 성을 갖습니다 Record reference type 간단하고 Immutable 데이터이다 ( immutalbe 이란 주소가 변하지 않음을 의미) 상속 다형성 지원 X 속성 및 필드를 가질 수 있음 (생성자, 메서드 못가짐) 값 기반 비교 연산자 , 해시 코드를 사용( 속성 값에 기..

readonly List 에 관하여

List 에 readonly 가 붙는 케이스를 공부하다가 처음 목격했다. 근데..? add 가 되는것이다.. .내가 아는 readonly 는 최초 1회만 수정이 가능하고 그 이후는 수정이 안되는데 add 라면 길이와 내용이 달라질텐데 어떻게...? readonly List: 리스트가 한번 생성되고 변하지 않음, 아이템은 변경 가능 IReadonlyList: 리스트는 바뀔 수 있음, 아이템은 변경 불가 readonly IReadonlyList: 리스트도, 아이템도 불변 라고 한다.

C# 은 왜 reflection 이 존재하는가..?

사실 private 을 쓰는 이유는 원치 않는곳에서 수정이나 변경을 막고 캡슐화를 위해서는 필요한 기능이다... 근데 왜 c# 은 Reflection 이라는 기능으로 private 이든 internal 이든 지멋대로 가져와서 사용하려 하는가..? 그래서 함 쓸모를 찾아봤다. 다른 곳은 모르겠는데 unity 의 경우에는 editor tool 을 만들때 사용한다던가 ( 값이 바뀌는걸 볼 수 있음 ) 혹은 직렬화 ( 데이터를 직렬화 하여 저장하거나 할때) 에는 유용하게 쓸 수 있을꺼같다. 하지만 오남용시에는 캡슐화를 깰 수 있기 때문에 외부로 보여지는 tool 이나 데이터가 아닌이상 private 의 경우 reflection 을 이용해서 쓰지 말아야 할 듯하다.

반응형