[TIL/2일차] PreStudy

안건우·2025년 9월 2일

sparta_til

목록 보기
2/26

오늘은 기초 학습 과제를 수행했다.

C#에 대한 학습자체는 처음이나 monoBehavior나 so 스크립트 작성은 한참을 해왔기에

자신만만하게 달리기반을 선택..

기초 문법에 그렇게 난이도 있는 내용은 없었으나

ref와 out, as, is정도가 굉장히 생소했다.


1. is - 타입 확인 연산자
핵심: 객체의 타입이 맞는지 확인 후 true/false를 반환한다.
Java와 비교: Java의 instanceof와 100% 동일한 역할을 한다.
주요 특징: C# 7.0부터 타입 확인과 동시에 변수 할당이 가능해져 매우 편리하다.

2. as - 안전한 타입 변환 연산자
핵심: 타입을 변환(캐스팅)하되, 변환 실패 시 Exception을 터뜨리는 대신 null을 반환한다.
Java와 비교: Java의 (String)obj 캐스팅을 try-catch로 감싼 것과 유사한 효과를 낸다.
주요 특징: null 체크가 반드시 뒤따라야 한다. 형변환이 실패할 가능성이 있을 때 방어적으로 코딩하기 좋다.

3. ref - 참조에 의한 전달 (수정용)
핵심: 변수를 메서드에 전달할 때, 값의 복사본이 아닌 '원본' 변수 자체의 참조를 넘긴다. 메서드 안에서의 수정이 원본에 그대로 반영된다.
Java와 비교: Java와 완전히 다르다. Java는 항상 값에 의한 전달(Pass by value)이며, 객체 참조'값'을 복사해서 넘긴다. ref는 원본을 직접 수정할 수 있게 한다.
주요 특징:
메서드에 넘기기 전에 반드시 초기화되어 있어야 한다.
게임 개발 등에서 큰 구조체(Struct)를 복사 없이 전달하여 성능을 최적화할 때 매우 유용하다.

4. out - 참조에 의한 전달 (출력용)
핵심: return 외에 추가적인 '출력' 전용 파라미터를 만드는 기능. 메서드가 여러 개의 값을 반환하는 효과를 낸다.
Java와 비교: MyBatis에서 insert 실행 후 파라미터로 넘긴 DTO 객체의 PK 필드가 채워져서 돌아오는 패턴과 기능적으로 매우 유사하다.
주요 특징:
ref와 달리 넘기기 전에 초기화할 필요가 없다.
메서드 안에서 반드시 값을 할당해줘야 하는 문법적 의무가 있다.


그렇게 거의 10분만에 기본개념 훑어보기는 끝냈으나... 그다음 난관이 나타났다

자바에서 밥먹듯이 사용하던 main 메서드를 C#에서는 자유롭게 사용할수 없었던 것이다

gemini의 요약에 따르면 이렇다고 한다


Java와 C#의 프로젝트 실행 방식 차이 (TIL)

Java 개발자로서 C#을 처음 접했을 때, main 메서드가 있는 .cs 파일을 바로 실행할 수 없어 당황했다. 그 이유는 두 언어/IDE의 '실행 단위'에 대한 철학이 근본적으로 다르기 때문이다.

  1. Java (IntelliJ) 방식: "파일 중심"
    .java 파일 하나가 그 자체로 하나의 독립적인 실행 단위가 될 수 있다.
    IntelliJ는 main 메서드가 포함된 파일이라면, 프로젝트 설정(pom.xml, build.gradle)과 무관하게 알아서 컴파일하고 실행해 준다.
    비유: main이 적힌 '요리법' 하나만 줘도 바로 요리를 시작할 수 있다.

  2. C# (Rider/Visual Studio) 방식: "프로젝트 중심"
    .cs 파일은 단지 프로젝트를 구성하는 '부품'일 뿐, 단독으로 실행될 수 없다.
    실행을 위해서는 반드시 .csproj라는 '설계도' 파일이 필요하다. 이 설계도 파일이 "이 부품들을 모아 콘솔 앱(.exe)을 만들어라" 라고 IDE에 알려준다.
    이 설계도를 따르는 프로젝트는 반드시 단 하나의 시작점(Main 메서드)만을 가져야 한다.
    비유: '조리 순서'(cs 파일)만으로는 부족하고, 전체 요리 과정과 최종 결과물을 정의한 '요리 계획서'(csproj 파일)가 있어야만 요리를 시작할 수 있다.

핵심 요약
Java: 파일이 실행 단위. main만 있으면 어디서든 OK.
C#: 프로젝트가 실행 단위. csproj가 필수이며, Main은 프로젝트당 딱 하나.


실행하는 입장에서 내 언어로 요약을 하자면

자바는 class파일에 main 메서드만 추가하면 okay

but C#에서적인 실행단위 생성은 꼭 앱콘솔 프로젝트 생성이 동행되어야 한다는것이다.

결과적으로 코드작성 없이 이 화면을 만드는데만 1시간이라는 시간이 소요 되었다..

그뒤로는 레포지토리까지 문제없이 생성하고 8가지 퀘스트를 진행했다.
(https://github.com/bswan0113/sprartaPreStudy/tree/main/prestudy)

사실 이미 웹개발 경력이 3년 이상인데 아무리 언어가 바뀌었다고는 해도 기초 학습용 코드를 리뷰한다는건 뭔가 어색하게 느껴진다..

그러므로 퀘스트리뷰는 패스하고 몇년만에 git에 새로운 잔디가 심어지고 있다는 사실에 만족하며 오늘은 마무리.

0개의 댓글