다시 오신 걸 환영해요
네 이번 강의에서는 C# 프로그래밍 언어와 관련된 몇 가지
특징에 관해 얘기해 볼게요
C의 이점은 다 알죠
그 얘기는 지겹도록 했어요
C는 작고 효율적인 프로그램을 만들죠 중요한 언어 기능이에요
가장 중요한 언어 중 하나고 앞으로도 그럴
거예요 다 아는 얘기잖아요
다시 한 번 말씀드리죠
네 하지만 C# 언어의 주요 특징은 효율적이고
휴대 가능하며 강력하고 유연하며 프로그래머 지향적이란 거죠
이게 무슨 의미인지 좀 더 자세히 살펴볼게요
하지만 이건 c의 중요한 전제예요
이 언어로 코드를 작성하는 방법을 이해하려면
그들을 다시 이해해야 해요
효율성과 휴대성은 무슨 뜻일까요?
c는 효율적인 언어예요
현재 컴퓨터의 최대치를 활용할 수 있어요
컴팩트프로그램이고 C로 쓰여 있어요
아주 빠르고 조밀해요
네 앞서 말씀드린 것처럼 어떤 언어의 설명에 대한 c 문의 매핑은 아주
효율적이에요
이 차는 정말 빨라요
예전에 자바에 대한 불만이 있었어요 자바는
너무 느리다고요
당신은 이런 문제 없잖아요
프로그래밍 주식회사를 만들면 아주 빠르게 돌아가죠
그게 언어 기능이에요
그게 효율성이죠
네 프로그래머들은 프로그램을 미세 조정하여 효율성을
높일 수 있습니다 매우 낮은 수준이기 때문이죠
메모리를 더 효율적으로 사용할 수 있죠
자바에서는 이런 거 못 해요
자바에는 자체 쓰레기 집적기가 있고 메모리를 조작해서 효율성을
높일 순 없어요
c는 효율적이고 휴대할 수 있는 언어예요
네 이 부분은 이전 강의에서 간단히 다뤘는데요 중요한
내용입니다 어떤 운영 체제에서 C# 프로그램을
작성하면 수정 없이 다른 운영 체제에서 실행할 수
있죠
네 네 오늘날 코드를 작성할 때 문제점 중 하나는 다수의 언어로 쓰거나
광범위하게 수정하지 않으면 제대로 되지 않을
수도 있다는 겁니다
네 그래서 예를 들어 안드로이드 폰에 대해 안드로이드 응용 프로그램을 쓰는
경우 iOS 폰에서는 작동하지 않아요
C에 대한 그런 편견은 없어요
C#을 쓰면 온갖 종류의 하드웨어와 온갖 종류의 운영
체제에서 작동하죠
사실 c는 리더 이동성입니다 이 기능과 컴파일러는 쉽게
사용 가능하고요
컴파일러 온윈도우즈, 리눅스 다 구할 수 있어요
네 네 Linux/Unix 시스템은 보통 C 컴파일러가 있어서 Linux/Unix에선
다운로드할 필요가 없죠 매킨토시도 마찬가지입니다
C 프로그램을 직접 작성하세요 외부 다운로드 없이요
윈도우에서도 사용할 수 있어요.
하지만 Windows에선 컴파일러를 다운로드 받아야 하죠
필요한 소프트웨어를 다운로드할 때 그걸 할 거예요
그래서 여러분이 사용하는 장치마다 C 컴파일러가
있을 수 있어요
C 컴파일러도 Android 장치나
iOS 장치에 쓸 수 있고요 프로세서나 자동차 같은 초소형 컴퓨터도
있어요
아주 유연하기도 해요 중요하지만 아주 강력하기도 하죠
유닉스 리눅스 커널은 C에서 쓰였는데요
커널이 뭐죠?
Unix와 Linuxis는 운영 체제죠
네 운영 체제가 있으면 사용자가 컴퓨터를 더 효율적으로
사용할 수 있고 하드웨어와 상호 작용하는 많은 양상을
제어할 수 있습니다
커널은 운영 체제의 뇌예요
네 CPU가 컴퓨터의 뇌인 것처럼 커널은 운영 체제에
대한 모든 뇌와 지식이 가는 곳이죠 인터페이스와 하드웨어, 커널을
포함하고 있습니다 메모리를 관리합니다 여러 가지
일을 하죠
전부 C로 쓰여 있어요
언어의 힘 있는 면을 알 수 있죠
운영 시스템의 핵심이 그 언어로 쓰여 있다면 그
언어는 강력해요
많은 컴파일러와 통역가들이 다른 언어들은
C에 기반했거나 C로 쓰여져 있어요
이렇게 해도 그 강력한 언어의 본질을 전달하지 못한다면 대체 뭘로
전달해야 할지 모르겠어요
하지만 포트란 펄 비단뱀이죠 그런 유형의 언어에 쓰인 컴파일러는
C#으로 쓰였죠
네 네 C 프로그램은 물리적인 문제나 공학적인 문제를
해결하는 데 사용되었고 심지어 영화 특수 효과를 만들 때도 다양한 용도로
사용되었습니다
유연성도 중요합니다 특히 개발자가 코드를
작성한다면요
다양한 방식으로 할 수 있어야 해요
여러 가지 방법으로 문제를 해결하고 싶죠
유연성이 많을수록 좋죠
하지만 유연성과 성능의 장단점이 있어요
네 언어를 설계할 때 귀에 쏙 들어오기도 하지만 c는 융통성 있게
설계됐고 실제로도 아주 융통성 있죠
C 프로그램에서는 뭐든 할 수 있어요
다양한 어플리케이션 형식을 쓸 수 있어요
메모리도 관리할 수 있고 많은 다른 언어가 제한하는 다른 것들도
할 수 있어요
네 거래가 있습니다 유연성이 더 많은 버그를 초래하거나
개발자가 특정 개념을 완전히 이해 못 하는 경우가 있습니다 더 복잡할 수 있기
때문입니다
네 하지만 궁극적으로 유연성은 좋은 겁니다
특히 언어를 잘 이해하는 개발자라면요
또한 c++와 같은 여러 언어의 기반이기도
합니다 앞서 언급했죠
오브젝티브-C 형식의 모바일폰앱 개발에 사용되죠
오브젝티브 C는 애플의 독자적 언어예요
기본적으로 C#에 개체 정의 c++ 같은 거죠 하지만 그들만의 언어를
쓰기로 한 거예요
하지만 하지만 iOS에선 점점 덜 사용되죠 Swift가 인기가
더 많아서요 하지만 작아서 배우기도 쉬워요
프로그래머가 되고 싶다면 이상적인 첫 언어 교육이죠
이 정도면 충분한 것 같아요
네 실용적 응용 프로그램 개발을 위해
충분한 지식을 얻게 되는 거죠 아주 빠르고 쉽게요
그래서 제일 먼저 배우는 거예요
네 그게 이 클래스에서 여러분이 보시게 될 겁니다
와 이제 C#을 배웠으니 와 jva를 배우기가 훨씬 쉬워졌어요
PHP도 배우기 쉬워졌고요 다른 언어도 배우기 훨씬 쉬워졌죠 그 언어들이
가진 모든 걸 갖췄으니까요 배우기도 아주 쉬워요
프로그래머 지향적이죠
언어 기능이죠
프로그래머들의 요구를 충족시키죠
네 네 데니스 리치가 언어를 만들 때 개발자에 좀 더 초점을
맞추기 위해 어떻게 했는지 말씀드렸죠 그렇게 했어요
그 목표를 달성했죠
네 하드웨어에 직접 접근하고 메모리에 직접 접근하고 자신의
메모리를 관리할 수 있죠
그래서 프로그래머 지향일 때 유연성이
활성화되죠
자바에서는 메모리 같은 것들을 관리할 수 없어요
C는 융통성을 제공하는 다른 기능도 많아요
다용도로 프로그래머 지향성을 높일 수 있습니다 프로그래머들이 좋아하니까요
그런 유연성을 좋아하죠 누가 이래라저래라 하는 걸 싫어해요
다양한 연산자가 포함돼 있어 간결하게
표현할 수 있죠
오퍼레이터가 누군지는 아직 몰라요
네 하지만 연산자는 수학 연산자를 더하고 빼거나 할당
연산자가 될 수 있습니다 데이터를 메모리에 할당하는 거죠
더 많은 오퍼레이터들이 코드로 자신을 더 잘 표현할
수 있게 해주죠
네 보다 프로그래머 지향적인 언어 기능은 이 운영자 목록입니다
보다 상세히 얘기하도록 하죠
할 수 있는 언어를 경시하는 대부분의 경우보다 덜 엄격하죠
이미 얘기했지만요
유연성과 엄격성의 타협점을 언급했는데요
다양한 방식으로 할 수 있다는 장점이 있죠
네 하지만 오류 프로그래머들이 많아서 위험할
수 있어요 특히 포인터 같은 경우에는요
네 C#에서 여러분의 메모리를 관리할 수 있다는 건 아주 유연하지만 때로는
아주 복잡하기도 해요
그 결과, 많은 프로그래머들이 오류를 프로그램에 입력했죠
자바에서는 기억을 관리할 수 없어요
하지만 유연성도 떨어집니다 프로그램 내의 버그도
감소시키죠
일종의 거래죠
복잡하지 않게 해서 융통성을 유지하고
싶은 거죠
C는 더 많은 자유를 주지만 개발자에게 더 많은 책임을 부여합니다
그래서 프로그램 지향적인 거죠
C를 구현하면 유용한 C 기능을 많이 사용할 수 있죠
뭔가를 하고 싶다면 모든 걸 C로 쓸 필요가 없어요
네 프로그래밍 언어는 다른 프로그램 기능을 포함하고 있어요 언어와
함께 오는 기능이죠
네 그래서 예를 들어 사용자의 입력을 읽고 싶다면 하위
수준의 C 코드를 쓰고 싶지 않죠
c에 있는 코드가 대신 해줄 테니 여러분은 그
코드를 재사용하세요
라이브러리라는 것을 캡슐화하죠
C#에는 키보드로 데이터를 읽을 수 있는
라이브러리 기능이 있고 파일로 데이터를 쓸 수도 있고 다양한 프로세스와 위협으로 멋진 것들을 만들
수 있어요
좋은 건 다 있어요
네 사실 많은 구현이 언어와 함께 옵니다 여러분이
직접 구현할 필요가 없어요 라이브러리 사용법을 배우기만
하면 되죠 아주 이점적이고 프로그래머 지향적이에요
네 네 ⇲ 하위 레벨 이미
얘기했잖아
하지만 가장 좋은 예는 메모리 관리입니다 메모리에 직접 접근하는 거죠
프로그램은 비트로 조작할 수 있어요
그게 저급이 아니면 뭐가 저급인지 모르겠네요 약간의 수준에서 메모리
처리 기능을 관리하는 능력이죠
네 비트나 바이트는 컴퓨터에 데이터를 저장하는 방법이죠 다양한
비트 조작 오퍼레이터를 제공합니다
이 부분도 언어의 일부인데 나중에 자세히 설명하죠
포인터는 C에서 큰 역할을 하죠
네 이 개념은 들어보셨을 거예요 못 들어보셨겠지만
메모리 관리와 관련 있어요
포인터에 찔린 환자가 많을 거예요 하지만 이건 C#의 아주
중요한 기능으로 여러분이 높은 수준에서
익숙해져야 해요
C 메모리 관리, C 포인터요 C# 프로그래밍 언어를 생각하면
가장 먼저 떠오르는 건 포인터예요
이 모든 게 directaccess로 메모리로 가는 거죠
c의 단점은 유연성의 교환이죠 유연성
대 자유요
책임감도 필요하고요
혹자는 불리하다고 보고 혹자는 포인터를 남용한다고 보죠
그 결과 많은 사람이 형편없는 C 프로그램을 써요
그렇군요 네 만약 누군가에게 뭔가를 할 도구를 주면
일을 잘못하죠 누구 잘못일까?
네 한도 초과된 도구로 제한하는 것이냐
유연성을 허용하는 것이냐의 문제입니다
네 그래서 융통성을 발휘할 순 있지만 오류를 더 낼 위험이 있어요 대개의
경우 이런 오류는 찾아내 추적하기가 아주 어렵죠 특히 메모리와
관련된 거라면요
문제가 될 수 있어요
다른 것들도요 많은 오퍼레이터와 간결함 때문에
언어를 읽고 따라가기가 힘들 때도 있어요
대부분의 경우 c는 쉽게 읽을 수 있어요
하지만 이런 분산 연산자를 많이 사용하면 더 복잡해질
수 있죠
네 애매한 코드를 작성할 기회가 있죠 네 어떤 언어든
엉망으로 쓰일 수 있어요
영어로 말하면 문법이 틀릴
수 있어요
프로그래밍 언어를 쓸 때도 다르지 않아요
하지만 어떤 이들은 C#이 이런 운영자들 때문에 불리하다고 하죠
잘못 사용하면 코드를 따라가는 게 더 어려울 수 있어요
요약해 보죠
웹에서 찾은 멋진 일러스트레이션인데
보여 드리고 싶어요
C 언어의 핵심 특징은 빠르고 효율적이라는 거죠 휴대 가능하고요 코드를
재사용할 수 있는 좋은 라이브러리가 많아요
혼자 할 필요가 없죠
모듈성 아까도 얘기했지만 함수와 확장성을
둘러싼 코드 조직화에
관한 겁니다 여러분이 작업할 수 있도록 해주는 강력한 연산자도요
멋진 특징이 많아요
그리고 방금 말씀드린 기능 대부분은 많은 현대 언어에서
나왔어요 C로 만들어졌기 때문이죠