안녕하세요, 저는 여러분의 CodeMakie입니다. 최근 Microsoft에서 C# 15에 대한 새로운 기능들을 발표했습니다. 이 버전은 곧 출시될 예정이며 상당히 많은 내용들이 포함되어 있습니다. 언어가 지속적으로 개발되고 매년 개선된다는 점을 보니 정말 좋은 일이라고 생각합니다.
하지만 동시에, 이런 일이 있을 때마다 초보자들로부터 '제 C# 지식이 갑자기 쓸모없게 되나요?', '이 새로운 버전은 제가 처음부터 다시 시작해야 한다는 의미인가요?', '이 새로운 버전은 기존 튜토리얼들이 모두 무용지물이라는 뜻인가요?'와 같은 질문들을 받곤 합니다. 이것은 매우 무섭고, 매우 두려운 생각이지만 다행히도 답은 '아닙니다'입니다. 전혀 그렇지 않습니다.
근본적으로 C#는 새 버전을 얻고 있는 것이지, 제가 생각하기에 2년마다 새로운 버전이 나온 것처럼 말이죠. 하지만 중요한 것은 새로운 버전이라고 해서 완전히 새로운 언어가 되는 것은 아니라는 점입니다. 따라서 C#는 끊임없이 진화하고 있으며, 자신에게 새로운 것들을 계속 추가할 뿐, 초기화되거나 갑자기 완전히 다른 프로그래밍 언어로 바뀌지는 않습니다.
기본적인 토대들은 여전히 항상 존재합니다. 예를 들어 메서드(methods), 클래스(classes), 루프(loops), 조건문(conditions), 변수(variables) 같은 것들이 있습니다. 그리고 C# 버전 1.0 이후에 추가된 인터페이스(interfaces), 이벤트(events), 제네릭(generics) 같은 것도 있고요. 그리고 가장 최신 부분에는 매번 새로운 버전에 추가되는 작은 신규 기능들이 있습니다.
하지만 중요한 것은, 이러한 새로운 기능들이 나머지 부분을 쓸모없게 만들지 않는다는 것입니다. 클래스는 여전히 존재합니다. 15년 전처럼 지금도 클래스를 사용할 수 있고, 함수(functions)는 여전히 존재하며, 변수(variables) 역시 여전히 존재합니다. 이 모든 것들 말입니다. 그러니 새로운 버전이 무조건 완전히 새로운 언어를 의미하는 것은 아닙니다.
예를 들어, 매우 실용적인 예시가 있습니다. 정수(int) 리스트를 생각해 보세요. 리스트가 처음 구현되었을 때의 구문은 이랬습니다. new List<T>()와 같이 타입을 지정하고 제네릭을 사용한 다음, 몇 가지 요소를 채워 넣는 식이었죠. 그러다가 C# 9에서는 작은 단축 문법(shorthand)이 추가되어, 단순히 new()만 하면 됩니다. 기본적으로 컴파일러가 해당 리스트의 타입을 추론합니다.
그리고 지금 C# 12에서는 갑자기 이 방식이 생겼습니다. 심지어 new조차 할 필요가 없습니다. 컴파일러가 사용자가 새로운 객체를 만들고 싶다는 것을 알아서 인식합니다. 버전별로 이러한 미묘한 변화들을 볼 수 있지만, 이전의 기능을 망가뜨리지 않는다는 것을 알 수 있습니다.
그래서 요즘 C# 12 이상을 사용하더라도 여전히 클래식 표준 구문을 사용할 수 있습니다. 개인적으로 저는 이 방식을 계속 사용합니다. 제 코드가 매우 명시적(explicit)인 것을 좋아하기 때문입니다. 따라서 개인적으로 컴파일러가 모든 종류의 것을 추론하도록 하는 것은 별로 선호하지 않습니다. 저는 정말로 매우 명시적이기를 좋아합니다.
그래서 그 때문에 저는 여전히 리스트를 정의하는 클래식 방식을 많이 사용합니다. 하지만 그렇지 않아도 괜찮습니다. 원한다면 이 새로운 구문을 사용할 수 있습니다. 이것은 조금 더 짧고, 조금 더 빠릅니다. 따라서 그것을 선호한다면 그것을 사용해도 됩니다. 하지만 이것이 존재한다는 것을 몰라도, 클래식 방식은 여전히 아주 잘 작동합니다.
대부분의 경우, 새로운 버전이 나올 때마다 호환성(compatibility)은 매우 중요한 우선순위입니다. 그래서 10년 이상 전에 작성된 코드 중 상당 부분이 오늘날에도 여전히 작동합니다. 이는 튜토리얼에 있어서도 마찬가지라는 의미인데, 대부분 몇 년 전에 만들어진 것들조차도 여전히 90% 정도 최신 상태를 유지하고 있다는 것입니다.
예를 들어, 제가 2023년에 만든 'Kitchen Chaos' 강좌가 있습니다. 따라서 기술적으로는 현재 세 살이 된 것입니다. 그럼에도 불구하고 오늘날에도 여전히 이 과정을 진행할 수 있습니다. 그리고 기본적으로 여기서 얻게 되는 지식의 95%는 오늘날에도 여전히 적용 가능합니다.
그것은 그 과정이나 튜토리얼이 인터페이스(interfaces), 이벤트(events), 상태 기계(state machines), 스크립터블 오브젝트(scriptable objects)와 같은 것들을 가르치기 때문입니다. 그리고 이 모든 것은 오늘날에도 이전처럼 여전히 작동합니다. 다시 말해, 언어가 새 버전을 얻을 때, 대부분은 더 이상 작동하지 않는 것을 제거하기보다는 새로운 것을 추가하는 방식입니다.
이 예시로 돌아가면, 오늘날에는 리스트를 생성하는 더 새로운 버전이 있지만, 이전 버전도 여전히 100% 잘 작동합니다. 따라서 실제로 구식이 되는 것은, 특히 유니티(Unity)의 경우, 엔진의 핵심 구성 요소와 언어의 핵심 구성 요소를 말합니다.
C# 자체는 제가 말했듯이 지난 10년 동안 크게 변하지 않았습니다. 변수(variables), 조건문(conditions), 반복문(loops), 클래스(class) 등 이러한 모든 것들은 10년 전과 정확히 같은 방식으로 작동합니다. 유니티 관점에서 C#도 마찬가지입니다. 여전히 Minor Behavior가 있고, Update 함수도 있습니다. 모든 표준적인 것들이 그대로입니다. 게임 오브젝트(Game objects)는 여전히 게임 오브젝트이며, 트랜스폼(Transforms)은 여전히 트랜스폼입니다.
심지어 내년 유니티가 Unity 7을 출시할 때도, 그것이 상당히 큰 업그레이드가 될 것이더라도 다시 한번 같은 이야기입니다. 트랜스폼은 여전히 트랜스폼이고, 게임 오브젝트는 여전히 게임 오브젝트입니다. 따라서 핵심 구성 요소들은 실제로 변하지 않습니다. 변화하는 것은 특정 패키지 같은 것들입니다. 예를 들어 Cinemachine이 있습니다. 이전에 버전 2가 있었고, 이제는 버전 3이 있습니다. 이것은 상당히 큰 차이이며, 버전 2는 더 이상 사용되지 않게(deprecated) 되고 있습니다.
따라서 이전에 버전 2를 사용했던 모든 프로젝트는 Unity 7 이상에서 작동하려면 버전 3으로 업그레이드해야 합니다. 메뉴나 컨텍스트 메뉴(context menus) 같은 것도 마찬가지입니다. 다른 유니티 버전에서는 해당 메뉴가 약간 다른 위치에 나타나거나, 구성이 조금 다르게 정리될 수 있습니다.
따라서 실제로 변화하는 것은 패키지 같은 것들이며, 기본적으로 메뉴가 다른 위치에 있다는 점입니다.
따라서 저는 여전히 누군가 제 강좌를 수강하고 싶어 한다면, 혼란을 피하고 실제 학습에 집중할 수 있도록 제가 사용했던 것과 동일한 Unity 버전을 사용하여 학습하는 것을 추천합니다. 그리고 나중에 최종적으로 최신 버전으로 업그레이드하면 어떤 것들이 이제 구식(obsolete)이 되었는지 확인할 수 있고, 여러분이 배운 내용의 99%는 정확히 똑같다는 것, 단지 아주 작은 비율, 즉 몇 가지 사소한 것들만 약간 변경되었다는 것을 알게 될 것입니다. 그러니 그 부분들만 배우면 갑자기 모든 지식을 갖게 되는 거죠. 본질적으로 감사하게도 C#이 바뀌거나, Unity가 바뀌거나, 완전히 새로운 기능을 추가하더라도 여러분의 모든 지식이 쓸모없어지지는 않습니다. 따라서 학습을 처음부터 다시 시작할 필요가 없습니다. 이미 알고 있던 것을 가져와서 지속적으로 쌓아 올리기만 하면 됩니다. 그래서 제가 항상 초보자들이 가질 수 있는 두려움, 즉 새 버전이 나왔기 때문에 자신의 지식이 이제 구식(obsolete)이 아닐까 궁금해하는 것에 대해 말씀드리자면, 다시 한번 말하지만 감사하게도 답은 '아니다'입니다. 새로운 버전들은 그저 무언가를 추가할 뿐입니다. 따라서 여러분이 배운 내용은 여전히 유효합니다. 이것이 제가 기본 원리(fundamentals)를 배우는 데 정말 집중하라고 말씀드리는 이유입니다. 왜냐하면 그것들을 알면, 새 버전들은 단지 아주 작은 것들만 덧붙이는 것이기 때문입니다. 그리고 이 기본 원리를 학습하려면 제 C# 강좌를 확인해 보세요. 여기 YouTube에 무료 버전이 있고, 경제적으로 여유가 있다면 유료 버전도 있습니다. 이 과정에는 빈번한 목록 질문(list questions), 퀴즈, 그리고 가장 중요하게는 각 강의마다 상호작용형 연습(interactive exercise)을 포함하는 보조 프로젝트가 들어 있습니다. 이러한 상호작용형 연습은 실제로 코드를 작성하도록 요구합니다. 이것이 여러분이 정말로 학습하고 있는지 확인하는 가장 좋은 방법 중 하나입니다. 이 강좌는 언어 전반에 걸쳐 초급부터 중급, 고급까지 모든 것을 다룹니다. 그리고 이 영상에서 말씀드린 것처럼, 모든 내용은 여전히 최신 상태를 유지하고 있습니다.
설명란의 링크에서 무료 버전과 프리미엄 버전을 모두 확인해 보세요. 자, 시청해 주셔서 감사합니다. 다음 시간에 뵙겠습니다. 네, 정말 감사합니다.