다시 오신 걸 환영해요
정부 프로그램 얘기를 해 보죠
네 이건 초보 프로그래밍 수업이기 때문에 구체적으로
C#에 관해 얘기할 거예요 프로그래밍 언어를 이해하기
전에 먼저 프로그램이 뭔지 알아야 합니다
네 C#을 상세히 알아보기 전에 기본적인
개념을 설명할게요
컴퓨터는 아주 멍청한 기계죠
네 여러분은 분명히 컴퓨터가 뭘 할 수 있고 뭘
하는지 모르는 정도가 아닐 거예요
네 구체적으로 하지만 브라우저를 클릭할 때 어떤 일이
벌어지는지 다양한 응용 프로그램을 클릭할 때 어떤 일이 벌어지는지에
관해서요 어떤 프로그램이 실행 중이고 그 프로그램이
컴퓨터에 할 일을 지시하고 있어요
컴퓨터는 정말 멍청해요
시키는 대로만 하죠
컴퓨터의 기본 작동 방식은 컴퓨터 설명서 세트로
알려져 있죠
잘 생각해보면 지침 세트예요 어떤 작업을 어떻게 하는지에
대한 거죠 그래서 이 컴퓨터쇼에
할 일을 알려줘야 해요
우린 훨씬 더 낮은 수준의 영상 형식으로 작업하죠
컴퓨터마다 사용 설명서 세트가 있어요
명령 세트란 기본적으로 CPU의 명령으로 컴퓨터의
프로세서죠
네 컴퓨터에서 할 일을 알려줘서 문제를 해결하려면 다음
지시 사항을 설명서 세트로 보내서 해결하면 돼요
네 컴퓨터 프로그램을 쓸 때
일어나는 일이죠 특정 문제를 해결하라는 지시를 CPU,
프로세서에 보내는 거예요
이 문제를 해결하기 위해 사용된 접근법이나 방법은 알고리즘이라고
하죠
문제를 이해하시는 분들은 알고리즘으로 문제를 해결하세요
네 그래서 예를 들어 여러분이 전체 프로그램을 만들고 사용자가
홀수나 짝수를 입력하는지 테스트만 하는 경우에요
네 알고리즘 그 자체는 숫자가 짝수인지 홀수인지 테스트하는
거예요 그게 알고리즘이에요
모든 문제를 해결하는 발언들이 프로그램이 되는 거죠
이 수용체와 알고리즘에 관해 얘기해 보죠
알고리즘은 심지어 모듈 프로그래밍과 관련 있는 것일 수도
있어요
웨털크 사에서 더 자세히 살펴볼 텐데요
하지만 여러분이 코드를 작성할 때 뭘 하는지 이해시켜드리고
싶어요
가장 낮은 층에서 무슨 일이 일어나는지를요
프로그램 안에 포함된
알고리즘을 쓰는 거죠
네 프로그램을 만들려면 알고리즘을 구현하기
위한 설명서를 제대로 작성해야 합니다
네 이 지시는 특정 프로그래밍 언어의 어떤 구문에서도
표현할 수 있어요
네 이 시간에는 C#에 집중할 겁니다 하지만 다른 프로그래밍 언어에
대해 들어보셨을 거예요, Java나 c++ 오브젝티브 c는 iOS
응용 프로그램에서 사용되죠 하지만 지금은 Swift가 더 많이 사용되고 있어요
하지만 여러분이 배울 수 있는 프로그래밍
언어들이 있어요 알고리즘과 구문의 형태로 CPU에 지시를
보낼 수 있도록 해주는 거죠
또한 몇몇 배저식 용어에 대해 이야기하고 싶습니다 CPU, 중앙
처리 장치라고도 하죠
이게 컴퓨터의 두뇌예요
여기서 대부분의 작업이 이뤄져요
체제가 집행되는 곳이죠
기억, 기억이라는 용어를 자주 들으시는데요
학생들은 종종 기억 조작과 하드 드라이브를 혼동하죠
메모리는 하드 드라이브가 아니에요
메모리는 종종 아스람으로 불립니다 임의 접근 메모리죠
메모리에 저장된 모든 데이터는 분리된
하드웨어 구성 요소죠
실제 디스크 드라이브가 아니에요
프로그램의 모든 데이터는 메모리에 저장됩니다 개별 하드웨어
구성 요소죠
실행 중에 데이터를 저장하는 거죠
aboutvariable과 그 의미에 관해 얘기할 거예요
하지만 알고리즘을 실행하려면 프로그램은
datain이 있어야 하죠
그 데이터는 램, 메모리에서 최적화되죠
네 하드 드라이브에 저장하는 대신 메모리에 저장하는 이유는
메모리가 훨씬 빠르기 때문입니다 프로그램이 훨씬 더 빠르게
실행되도록 해줍니다
하지만 재부팅에서 영구적인 메모리는 아닙니다 또 다른
명확성이죠
하지만 RAM이라는 용어를 받아들여야 해요
기억이라는 뜻이에요
변수와 데이터 프로그램이 저장된 곳이죠
하드웨어 컴포넌트와 하드 드라이브가 분리되죠
하드웨어 드라이브는 컴퓨터... 영구
저장소예요
보통은 정말 큰데요 기가바이트, 테라바이트 데이터죠
프로그램 리소스 같은 파일들을 저장하죠
컴퓨터 전원을 껐다가 다시 켜도 그 파일들은 여전히
거기 있어요
네 프로그램을 위해 컴퓨터를 껐다 켜면 프로그램이
실행을 멈추고 RAM에 아무것도 없어요
램과 하드 드라이브의 차이점을 이해하세요
중요한 개념이에요
네 다시 말씀드리면 RAM은 프로그램과 관련이 있고 하드드라이브는
영구 저장소와 관련 있다고
보시면 됩니다 보통 거기에 리소스를 놓죠
운영 체제 파일도 있고 다양한 프로그램 리소스도 있죠
네 운영 체제는 여러분이 컴퓨터를 사용하고 싶을 때 편하게 해주기 위해
개발됐죠
그렇죠 왜냐하면 아주 낮은 수준에서 컴퓨터는 명령받은
대로 할 뿐이거든요 명령 세트를 이용한 지시 사항일 뿐이죠
이 모든 지시 사항을 이해하려면 사용하기가
아주 힘들 거예요
네 사용자가 컴퓨터를 더 쉽게 사용할 수 있도록
운영 체제라는 프로그램이 있어요
네 컴퓨터의 모든 작동을 제어하고 하드웨어를 통해 입력과 출력을
처리합니다 그래서 키보드나 마우스 모니터와 어떻게
상호 작용하는지도 이해하죠
컴퓨터 Sresources도 관리하고 다양한 응용 프로그램
실행도 처리하죠
운영 체제는 완전히 분리된 클래스예요
inan 운영 체제에 많은 것이 들어가지만
기본은 이해하세요
여러분의 컴퓨터를 더 쉽게 사용할 수 있게 하는 거죠
매우코몬 운영체제의 예는 Windows
같은 거죠
모두가 Windows를 사용하죠
Windows 10, Windows
XP 그게 뭐든 간에요
Linux, UNIX C#의 역사에 대해
얘기할 때 더 다룰 텐데요
Android는 모바일 장치 iOS를 위한 운영 체제죠
네 이 프로그램은 규모가 아주 크고 상호 작용하는 다양한 프로그램을
포함하고 있어요 컴퓨터와의 상호 작용이 훨씬 쉬워집니다
사형 집행 사이클이죠
이게 라이프사이클 CPU예요
제가 이걸 언급하는 건 기본적인 용어를
설명하기 위해서예요
네 이게 바로 컴퓨터나 CPU에 지시를 보낼 때 실제로 일어나는
일은 메모리에서 지시를 가져오는 거죠 그게
프로그램이니까요
네 그런 다음 CPU에서 그걸 실행하면 이런 루프가
되죠 계속 반복하고 있어요
반복하고 있잖아요
네 기가헤르츠라는 용어를 들어보셨는지 모르겠지만 CPU는
초당 10억 번 10억 개의 지시를 수행할 수 있어요
네 페치 실행 수명 주기와 함께 컴퓨터를
실행할 때 어떤 일이 벌어지는지 상상할 수 있죠
네 이건 인터넷에서 찾은 삽화인데요 효과가
좀 더 명확하게 실행되는 걸 보실 수 있습니다
CPU나 이런 지시 사항과 상호 작용할
때 무슨 일이 벌어지는지를요
지금 램을 집고 있는 거예요
램에는 프로그램 데이터가 들어 있어요
데이터를 가져와서 지시를 받는 거죠
네 여러분은 지속적으로 등록기와 램에 저장된 데이터를 디코딩하고
CPU의 다른 부분에서 실행합니다 컨트롤 유닛이나
ALU에서요
저건 루프예요
계속 반복되고 있어요
요즘 CPU는 초당 수십억 달러죠
네 C# 프로그램과 C# 프로그램을 아주 낮은 수준에서 작성한다고
할 때 그 모든 것의 기저에는 고도의 프로그래밍 언어를 통해 CPU와 상호
작용하는 것뿐이죠
더 높은 수준의 세뇌 언어로요
고급 프로그래밍 언어는 프로그램 작성하기가 더 쉬워요
네 이제 CPU에 있는 이 모든 지시를 다시
이해해야 한다면 작성하기가 아주 힘들 거예요
모든 설명을 이해하려면 어셈블리 언어를 사용해야
해요
네 어셈블리 언어라는 용어를 들어보셨다면 아주 낮은
수준의 프로그램을 만든다는 뜻입니다 아주 낮은 수준이라 설명서를
이해할 수 있죠
상상해 보세요 이 모든 지침으로 모든 프로그램을
만든다면 아주 비효율적이고 어려운 프로그램이
되겠죠
고급 프로그래밍 언어는 어셈블리 언어와는
반대예요
훨씬 더 높은 수준이죠
C를 예로 들게요
C는 더 수준 높은 세뇌 언어예요
프로그램이 실행하는 작업을 훨씬 추상적으로
묘사하고 있어요
CPU 설명서를 외울 필요는 없어요
언어 자체만 이해하고 이 알고리즘으로 문제를 해결하는
거죠
영어에 더 가까워요
훨씬 이해하기 쉽죠
네 어셈블리 언어를 보면 이동
커맨드에는 등록기, 숫자가 있고 기본적으로 숫자
문자가 있어요
c처럼 더 높은 수준의 언어를 사용하면 이런 걸 걱정할
필요가 없어요
설명서는 걱정 안 해도 돼요
조립식 언어 구절은 걱정 안 해도 돼요
훨씬 효율적이고 문제를 해결하기도
쉽죠
네 그래서 고급 프로그래밍 언어로 C#을 공부할
거예요 또 다른 예는 jva와 오브젝티브 c입니다 제가 언급한 것들이죠
이건 고급 프로그래밍 언어예요 여러분의 삶을 훨씬 쉽고
효율적으로 만들어 주죠
네 고급 프로그래밍 언어 외에도 좀 더 추상적인
언어가 있다면 그 언어를 CPU에서
실행할 수 있어야 해요
CPU가 이해할 수 있는 구조로 변환해야 하죠
여기서 아컴필러가 등장해요
네 맞습니다 프로그래밍에서 코드를 작성할 때 컴파일러를
이용해서 높은 레벨의 언어 소스 코드를 기계 언어
설명서로 번역할 수 있습니다 조립 언어라고 할 수 있죠
고차원적이고 추상적인 사고를 할 수
있는 직관적 사고를 작성하는 거죠
네 컴파일러가 명령 세트의 CPU로
가는 수백만 개의 지시를 생성하면
그래서 컴파일러를 이용해 정확히 이 작업을 할 거예요
소스 코드를 작성할 거예요 ina는 훨씬 더 높은 수준의 추상적인 형태죠
네 컴파일러라는 프로그램을 실행하여
CPU가 이해하는 무언가로 코드를 변환할 것입니다
네 이제 컴파일러에 관한 다른 점을 살펴보죠 여러분의 프로그램이 유효한
구문을 갖고 있는지 아닌지도 확인하나요?
코드를 작성할 때는 언어의 규칙을
따라야 해요
네 네 언어의 규칙은 기본적으로 구문입니다
문장 끝에 세미콜론을 쓰느냐 안 쓰느냐 특정
키워드 쓰느냐
이런 걸 정정당당하게 하면 프로그램을
실행할 수 없어요
네 컴파일러가 오류를 찾으면 그걸 알려주고
여러분에게 다시 보고합니다 이봐 코드를
제대로 안 썼잖아 수정해야 합니다
CPU의 명령 세트로 변환하기 전에 수정해야 합니다
컴파일러에 대해 일반적인 의미에서 알아보죠
컴파일러를 어떻게 사용하고 어떻게 이해하는지 말이에요
고급 언어는 배울 게 아주 많습니다 기계 언어보다 프로그램
하기가 훨씬 쉽죠
네 지금 이 슬라이드의 요점은 C# 같은 언어를 사용하면 훨씬
효율적이고 쉬워진다는 거죠
프로그램을 작성하면 여러 단계를 실행할
수 있어요
이 그림은 계단을 정말 잘 묘사하고
있어요
책에서 본 거예요
어떤 종류의 프로그램을 만들든 기본 단계 세트죠
프로그램의 목적을 정의하는 첫 단계부터 프로그램을 유지하고
수정하기 위한 요구 사항을 이해하기까지 말이죠
네 이 단계들을 빠르게 살펴보도록 하겠습니다
여러분이 이 클래스에서 하게 될 것을 알 수 있습니다
이정표를 쓸 때는 이 모든 단계를
거쳐야 해요
첫 단계는 프로그램의 목표를 재정립하는 거죠
요구 사항을 잘못 이해한 거예요
뭘 해야 하는지 모르면 코드를 쓸 수 없어요
이 단계에서 뭘 성취하고 싶은지
명확히 알아야 해요
therequirement를 이해하고 나면
코드를 디자인할 수 있어요
코드를 디자인할 때 코드는 이렇게 요구 사항을
충족시키죠
만약 요구된다면 사용자 인터페이스는 어떻게 보일까요?
네 네 프로그램을 어떻게 구성할 거죠?
다른 함수를 생성하고 다른 알고리즘을 생성할 건가요?
그런 다음 코드를 구현할 거예요
네 여기서 코드를 작성해 통합된 개발 환경에 있는
에디터에 넣는 거죠
그 디자인을 프로그래밍 언어의 구문에 맞춰 변환하는 거죠
c는 c 언어의 규칙을 이해하고 있습니다
어떤 텍스트 편집기도 쓸 수 있어요
콜드블록이라고 부르는 사용법을 쓸 거예요
네 텍스트 편집기보다 더 많은 걸 사용해야죠 IDE라는
거요 나중에 얘기할 거예요
네 코드가 완성되면 컴파일해야 합니다
소스 코드를 하위 레벨 언어로 변환해야 하니까요
이미 말씀드렸죠 이건 아주 기본적인 단계예요
그런 다음 프로그램을 실행하죠 프로그램을 실행하는 건
그걸 사용하는 거예요
그게 다섯 번째 단계예요
네 프로그램을 실행한 후에도 끝난 게 아니에요
왜냐하면 코드를 작성했고 언어의 요구 사항을 충족했다고 해도 의도한
작업을 안 할 수도 있거든요
테스트하고 오류를 찾고 고쳐야 합니다
프로그램이 이스러닝한다고 꼭 성공하는 건 아니죠
많은 학생이 이제 끝이라는 말을 해요 아뇨
네 실행할 때 요구 사항을 충족하는지
확인해야 해요 예상한 대로 되는지요
그래서 계속 테스트해야 해요
여섯 번째 스텝을 반복하고 또 반복해야
해요 네 여러분은 코드 테스팅을
작성하게 될 거예요 코드 테스팅 작성하기요 코드 테스트 작성하기
보통은 아주 작은 덩어리로 하는 게 좋아요
코드 두 줄을 쓰려면 테스트하세요 코드 두 줄이 더 있어요
테스트 등등
테스트하고 디버그해야 해요
디버깅은 또 다른 개념이죠
네 네 디버깅에 관한 강의는 많지만 이건 프로그래밍 오류를
찾아 고치는 거예요
네 할 수 있는 기술이 있어요 사용할 수 있는 도구도 있고요 오류를 찾는
데 도움이 되죠
테스트와 디버깅을 통해 많은 걸 배우게 될 겁니다 늘 실수를
하면서 엄청난 양의 정보를 배울 수 있으니까요
그게 정상이죠
네 네 컴파일해도 프로그램은
당신이 말한 걸 하지 않아요 거기서 배우게 되죠
이 수업에서는 그걸 할 거예요
올바른 방법을 가르쳐 주기만 하는 게 아니에요
네 제가 잘못된 방법을 보여드리면 왜 이게 잘못됐는지
아실 거예요
마지막은 유지 보수예요
프로그램이 출시되고 많은 사람이 사용하지만
아직 버그가 있을 수 있죠
네 그래서 예를 들어 Windows 10이 출시됐을 때 여전히 버그나
충돌이 있는 걸 알 수 있어요
그래서 끊임없이 업데이트가 되죠
그런 업데이트를 받는 걸 프로그램 유지 관리라고 하죠
네 코드를 작성해 대중에 공개했다고
해서 유지가 끝났다는 뜻은 아니죠
네 그렇죠 유지 보수가 가장 중요한 단계일 때가 많습니다 가장 광범위한
단계죠 프로그램을 출시하면 5년, 10년 동안 지속될
수도 있거든요
이 벌레를 고쳐야 고객들이 만족할 거예요
시장에서 최신 기능을 유지하기 위해 새로운 기능을 추가할 수도 있죠
유지 관리도 아주 중요하죠
제품을 고객에게 납품할 때 유지 보수를 해요
네 이 모든 단계를 위해 이리저리 뛰어다니며 어떤 프로그래밍
방법론에 따라 다른 순서로 단계를 실행할 수도 있죠 또 다른
강의가 있어요
네 네 항상 폭포식 접근으로 이 스텝을 밟는 건 아니에요 처음 시작할
때 시작해서 마지막 스텝에서 끝내는 거죠
그렇죠 디자인을 한 다음 돌아가서 테스트를 하고 다시 돌아가서
재디자인하는 그런 식이죠
그러니 가장 실용적인 것에 따라 이리저리
옮겨 다녀야 해요
네 제 경험상 유데미 강의에 있는 많은
새 프로그래머들이 1, 2단계를 무시하고 바로 코드를 작성하고
있어요
네 코드를 작성하는 법은 보여주지만 코드를 작성하는
이유는 보여주지 않아요
이건 큰 실수예요
네 코드를 작성할 땐 개념을 이해하고 요구 사항을
이해해야 해요
네 아주 작은 프로그램에선 가능하겠지만
더 큰 프로그램에선 디자인에 온전히 집중해야 해요
프로그램이 크고 복잡할수록 계획도
더 많이 필요하죠
코딩하기 전에 계획하는 습관을 길러야 해요
네 무작정 뛰어들면 안 돼요 강의에서 보시겠지만
전 계획을 많이 세워요
네 여러분이 코드를 작성하기 시작할 때 제가 알려드리고 싶은 것은
어떤 것을 해야 하고 어떻게 디자인해야 하는가 예요
네 코드를 구현하는 게 더 쉬워질 테니까요
그게 3단계죠
종이에 뭔가를 적어서 심을 수도 있다는 걸
명심하세요
온갖 종류의 nicedocumentation이 있어요 여러분이 사용할 수 있는
언어를 디자인하고 있죠
하지만 항상 효율적으로 계획해야 해요
그리고 여러분이 코딩을 할 때 아까도 말씀드렸지만
이건 또다른 아주 중요한 개념이에요 여러분은 항상 분할 정복처럼
작은 단계를 밟아야 하죠 끊임없이 테스트해야 합니다
100줄의 코드를 작성했는데 다 됐으니 테스트하러
가자고 해선 안 되죠
왜냐하면 100줄이 안 되면 어떤 코드든 오류가
날 수 있거든요
문제를 해결하는 게 더 어려워질 거예요
하지만 5줄 정도의 짧은 코드로 코드를 작성한다면 테스트하세요
코드 다섯 줄을 더 작성하고 테스트합니다 오류를 찾아
고치는 게 훨씬 쉬워지죠
그럼 이 수업에서 코드를 작성할 때 분할하고 정복하는 것에 집중하죠
도움이 됐으면 좋겠네요
이건 기본에 불과해요
기본적인 용어를 알려드리고 싶었어요
많은 분들이 이 정보를 이미 알고 계실 거예요
하지만 언어를 배울 때는 이 기본을
이해해야 해요
고마워요