다시 오신 걸 환영해요
여긴 새로운 구역이에요
이 섹션은 어바웃파일 입력과 출력 파일에서 작성,
읽기를 다루죠
텍스트 파일을 집중적으로 다루겠지만 바이너리 파일도
약간 다룰 거예요
네 이번 강의에서는 개요만 제공하겠습니다
파일이 무엇인지 영구적인 데이터를 저장하는 데 어떻게 유용한지를요
지금까지 우리 프로그램이 액세스하는 데이터는
메모리를 통하죠
우린 변수, 구조 배열에
익숙해요
프로그래밍에 사용되는 모든 데이터는 메모리에 있어요
메모리에 저장된 이유는 메모리가
아주 빠르기 때문이죠
빠르게 접근해서 계산을 수행할 수 있어요
페치엑스큐트 사이클을 하는 거죠
하지만 제한적이죠 응용 프로그램의
범위와 종류가 다양하니까요 메모리만 사용한다면 다소 제한될 거예요
프로그램이 사라지면 기억도 사라지는 걸 알아요 그래서 아주 제한적일
수 있죠
모든 비즈니스 애플리케이션은 메인 메모리에 들어가는 것보다 더 많은
데이터를 요청하죠
메인 메모리도 아주 적어요
요즘엔 메모리가 많아요 16, 32기가바이트죠
하지만 과거에는 특히나 내장형 장치에는 램이
많지 않았어요
그 결과, 공간과 크기 때문에 사진이 잘
찍히지 않아요
메인 메모리에서는 변수나 그런 것만
왜곡하면 돼요
주된 기억이 사라지기도 하죠
프로그램이 사라지면 재부팅에 걸쳐 영구히 저장되는
데이터는 가질 수 없어요
네 하드 디스크 드라이브 같은 외부 장치에 영구적으로 저장된 데이터를
처리하는 능력에 달려 있습니다 이런 대형 프로그램은
하드 드라이브에 저장할 수 있어야 하죠
약간 느려요 하지만 거기에 많은 데이터를 저장할 수 있어요 큰 프로그램은
많은 데이터를 저장해야 하죠
C는 더헤더 파일에서 많은 기능을 제공해요 h는 외부 장치로 글을 쓰고
읽는 걸 뜻해요
파일을 읽고 쓰는 데 직접 암호를 쓸 필요는 없어요
네 하지만 응용 프로그램이 제공하는
장점은 데이터를 더 오랜 시간 저장할 수 있다는 거죠 장점이 많아요
네 네 디스크 드라이브요
맞아요,
네 하지만 여기서 말씀드릴 헤더 파일 함수는 어떤
외부 저장소 장치에서도 사용할 수 있죠
USB 드라이브에 넣을 수 있어요
데이터나 SSD 드라이브 같은 것을 저장하는
어떤 외부 장치에도 사용할 수 있어요.
네 지금까지의 예와 함께요 사용자가 입력한 데이터는
프로그램이 종료되면 소실됩니다
이건 불안정한 기억이에요
네 불안정한 메모리라는 용어를 들을 때마다 메모리가
지속적이지 않거나 데이터가 지속적이지 않다는 뜻이에요
프로그램 엔드나 머신이 재부팅 되면 사라져요
네 그래서 사용자가 같은 데이터로 프로그램을
실행하려면 매번 다시 입력해야 하죠 그래야 복원되니까요
아주 불편하죠
프로그래밍을 제한하죠
이건 예측불허의 기억이에요
파일에 저장하거나 하드 드라이브에
저장할 때 이건 영구 저장소예요
컴퓨터를 재부팅하거나 프로그램이 실행되지 않을 때도
여전히 존재하죠
불발성 모세균이라고 하죠 몸에 남아 있으니까요
네 파일은 비휘발성 데이터를 저장할 수 있고 보통 디스크에
저장되거나 요즘은 SSD에 저장되는데요 저장소의 명명된 섹션입니다 표준
Iioh는 정보를 담고 있는 파일로 해당 파일을 읽고
쓸 수 있도록 합니다
네 하지만 영구 저장소를 위해 파일에서 데이터를 쓰고
읽는 개념을 사용할 거예요
애플리케이션이 애플리케이션이 훨씬 더 유용하고 강력하며 스케일이
커진다는 걸 알게 될 겁니다 많은 양의 데이터를
저장할 수 있으니까요
네 또한 프로그램이 종료되거나 컴퓨터가 재부팅될 때 데이터가 사라지는
걸 걱정할 필요도 없죠
따라서 파일을 사용하는 건 아주 유심히 살펴봐야 해요
Linux 운영 체제나 Windows 운영 체제에
파일은 특정한 방식으로 저장되죠
하지만 c로 말할 것 같으면 프로그래밍 언어에 있어서는
단지 바이트의 시퀀스일 뿐이고 각각의 바이트는 개별적으로 읽을 수 있죠
네 이건 유닉스의 파일 구조와 일치하지만 텍스트 파일과 윈도우에서만
차이를 만듭니다 크기와 관련해 신경 써야 할 글자가
더 있을 수도 있으니까요 하지만 그냥 바이트 시퀀스일
뿐이죠
그렇군요 텍스트 파일이 있고 바이트가 더 크다면 파일을 읽을 수 있어요
저 바이트가 뭘 나타내는지 이해해야 합니다
네 파일이 어떻게 생겼는지와 C# 프로그래밍 언어를
이용해 어떻게 읽고 작성할 것인지에 대한 내용입니다
오프셋이 다른 바이트일 뿐이에요
파일이 시작되는 시각은 0시예요
네 파일에서 항상 다른 위치를 찾을 수 있어요 4 바이트일 수도
있고 100 바이트일 수도 있죠 그리고 파일의 끝도 있어요
파일의 끝은 보통 eof 혹은 파일의 끝이라는
특수 마커로 표시되죠
파일에 시작 및 끝과 현재 위치가 있어요
현재 위치는 처음부터 여러 바이트로 정의돼요
현재 위치는 파일 작업이 발생할 장소예요
글을 쓰거나 그 자세로 읽어야 해요
그리고 몇 가지 함수에 대해서도
말씀 드릴 텐데요 파일에서 현재 위치를 원하는 곳으로 옮길 수 있습니다
맨 마지막에도요
필기시험을 보든 필기시험을 보든 하세요
파일 유형은 두 가지예요
텍스트 파일과 바이너리 파일이 있어요
텍스트 파일은 데이터 쓰다스예요 글자의 시퀀스로 줄로
구성돼 있죠
선마다 새로운 선이 이어지죠
글자는 글자는 캐릭터를 어떻게 해석하느냐에 따라
시스템에 따라 달라져요
네 예를 들어 Windows와 dos에서 모든 라인에는 캐리지 리턴과
라인 피드가 있어요 백슬래시 r과 백슬래시 n이죠
네 데이터를 읽거나 쓸 때는 이걸
이해해야 해요 형식이 좀 다르거든요
하지만 리눅스에선 백슬래시 r이 없죠
그렇죠 따라서 텍스트 데이터가 어떻게 작성되는지
이해해야 합니다 줄과 일련의 바이트로 나뉘어 있긴 하지만요
바이너리 데이터는 아사 시리즈 바이트로 쓰입니다 메모리에
나타나는 그대로요
havebinary data의 파일 예는 이미지 데이터나
뮤직 인코딩 같은 파일이죠
네 바이너리 파일은 텍스트 편집기에서는 읽을 수
없을 거예요 바이트이기 때문이죠
이 섹션에선 ontext 파일에 집중하죠
하지만 파일에 원하는 건 뭐든 쓸 수 있어요
일련의 바이트로 작성하거나 메모리로
실행할 수도 있죠
네 하지만 파일이 완성되면 일련의 바이트로
구성될 뿐입니다 형식 텍스트로 나타난다 해도요
에디터에서 텍스트 파일을 볼 수 있어 가독성이 높아지죠
파일을 읽으려면 파일 형식을 이해해야 해요
제가 말씀드린 게 이겁니다 dos Windows나 Linux에서
실행 중이라면 거기선 데이터를 쓸 때 창에 추가 글자가 있을 수 있죠
abinary 파일의 12 바이트 시퀀스는 12글자가 될 수도 있죠
12바이트짜리 정수기도 있고 12비트짜리도 있어요
이진법 파일이 특히 까다로운 이유는 메모리에 저장된 대로 저장하기
때문이죠
이진법 모드에서는 모든 파일이 액세스 가능하죠
네 하지만 파일에서 뭔가를 읽으려면 그 안에
뭐가 있는지 데이터와 저장 방법을 이해해야 하죠
네 어떤 시스템에서 실행하느냐에 따라
텍스트냐 바이너리냐에 따라 다를 수 있어요
개울이에요
C 프로그램이 자동으로 파일 3개를 열죠
네 스트림은 파일을 나타내지만 스트림은 좀 더 일반적인 용어로
입력값을 나타내요
네 그래서 키보드를 나타낼 수도 있고 콘솔을 나타낼 수도
있고 파일을 나타낼 수도 있고 소켓을 나타낼 수도 있어요
네트워킹에 익숙하다면 스트림은 좀 더 일반적인 용어죠
그리고 세 개의 스트림이 자동으로 열립니다 C# 프로그래밍
언어로요
하나는 표준 입력값이죠
이게 여러분 시스템의 기본 입력값 장치예요
보통 기본값은 키보드죠
scanf를 할 때는 표준input을 사용했어요.
하지만 scanf를 이용해서 파일을 읽을 수도 있습니다.
입력 스트림을 바꾸면 입력 스트림을 파일로 바꿀 수도 있고요.
표준 출력이에요
보통은 콘솔을 통해 화면에 나타나죠
네 표준 오류도 화면에 뜨는데 보통 리다이렉트를 해야
해요 & 3 같은 걸 사용하려면요 네, 맞아요, 네, 맞아요 근데 보통 리다이렉트를 해야
해요 & 3 같은 거요
하지만 이 세 가지가 결과물이에요
get char와 scanf가 읽는 것이 표준 입력이라고 말씀드렸었죠.
표준 출력은 byput Char를 사용하고 s와 printf를 입력해요
주로 printf를 사용했죠
파일도 리디렉션할 수 있어요 표준 입력 출력으로 인식되도록요
네 네 이게 리다이렉션이에요 데이터를 리다이렉트하고
파일로 결과물을 보내는 운영 체제 개념이죠 예를 들자면요 파일에서 입력을 받는 거예요 표준 아카이브와는
반대죠
여기서 기호보다 작거나 큰 걸 사용할 수 있어요
네 표준 오류 출력의 목적은 오류 메시지를 논리적으로 구별되게
전송할 장소를 제공하기 위해서예요 그래서 분리돼 있죠
액세스하기 위해 화면에 비춰지더라도 특별한
명령을 갖고 있어야 해요
스트림은 데이터를 위한 모든 외부 소스나
목적지의 추상화죠
그래서 파일보다 더 게르네릭하죠
네 키보드 디스플레이의 명령줄 디스크의 파일도요 모두 스트림으로
작업하는 방법의 예입니다
c++를 배우기 시작하면 스트림이 훨씬 더 중요해질 거예요
c 라이브러리는 데이터 스트림에 읽고
쓰기 기능을 제공하죠
네 스트림에 매핑된 외부 장치를 읽고 작성하는
데에 동일한 입력 출력 함수를 사용할 수 있습니다
그래서 Scanf를 이용해 키보드로 읽을 수 있다고 말씀드렸죠
스캔프토 파일로 판독도 가능해요
스트림이 가리키는 입력기에 따라 달라지죠
그래서 함수 arevery는 이 작업에 아주
유용하고 유연하죠
네 이건 파일이 무엇이고 왜 사용해야 하는지에 대한 높은 레벨의
개요입니다 어떻게 지속적인 데이터이고 불안정하지 않은 메모리이고
계속 남아있죠
네 이것을 사용하고 표준 IOHeader 파일을
사용해서 프로그램을 위한 데이터 저장이 필요할 때 읽고 쓸 수 있습니다
우리 프로그램은 훨씬 더 견고하고 훨씬
더 사용성 있고 유연해졌죠
네 다음 강의에서는 표준 IO 헤더의 함수를 이용해 실제
구현에 대해 알아보겠습니다 고마워요