이미지 파일 및 설정 파일 삭제, 새로운 CLI 및 문서 추가

This commit is contained in:
2025-03-04 12:19:53 +09:00
parent fb66b69644
commit 2c0a2d738c
33 changed files with 3149 additions and 54 deletions

View File

@@ -0,0 +1,202 @@
# **Ruby에서 파일 처리 및 입출력(IO) 다루기**
프로그램을 작성하다 보면 데이터를 파일에 저장하거나, 파일에서 데이터를 읽어와야 할 때가 많다. Ruby에서는 파일을 간편하게 읽고 쓸 수 있는 다양한 기능을 제공한다. 이번 글에서는 **파일 읽기/쓰기, 표준 입출력(STDIN, STDOUT, STDERR), 디렉터리 작업** 등을 다룬다.
---
## **1. 파일 읽고 쓰기 (File 클래스)**
Ruby에서 파일을 다룰 때는 `File` 클래스를 사용한다. 파일을 열 때는 `File.open`을 사용하며, 읽기 모드, 쓰기 모드 등을 지정할 수 있다.
### **1.1. 파일 쓰기 (`w`, `a`, `w+`, `a+`)**
#### **파일 새로 쓰기 (`w` 모드)**
파일을 새로 생성하고 데이터를 저장한다. **기존 파일이 있으면 덮어쓴다.**
```ruby
File.open("example.txt", "w") do |file|
file.puts "Hello, Ruby!"
file.puts "파일 쓰기 예제입니다."
end
```
- `puts` → 문자열을 출력하고 자동으로 개행(`\n`) 추가
- `write` → 개행 없이 그대로 출력
```ruby
File.open("example.txt", "w") do |file|
file.write "Hello, Ruby!"
file.write "이건 개행이 없습니다."
end
```
출력 결과 (`example.txt`):
```
Hello, Ruby!이건 개행이 없습니다.
```
#### **파일 이어 쓰기 (`a` 모드)**
기존 파일이 있으면 내용을 유지하면서 **새로운 내용을 추가**한다.
```ruby
File.open("example.txt", "a") do |file|
file.puts "새로운 줄이 추가됩니다."
end
```
#### **읽기와 쓰기 (`w+`, `a+` 모드)**
- `w+` → 읽기 + 쓰기 가능, **기존 파일 삭제 후 새로 생성**
- `a+` → 읽기 + 쓰기 가능, **기존 내용 유지하며 추가 가능**
---
### **1.2. 파일 읽기 (`r`, `r+`)**
#### **한 줄씩 읽기 (`gets`)**
```ruby
File.open("example.txt", "r") do |file|
puts file.gets # 첫 번째 줄 읽기
end
```
#### **모든 줄 읽기 (`readlines`)**
파일의 모든 줄을 배열로 읽어온다.
```ruby
File.open("example.txt", "r") do |file|
file.readlines.each do |line|
puts line
end
end
```
#### **파일 전체 읽기 (`read`)**
파일 내용을 한 번에 읽어 문자열로 반환한다.
```ruby
content = File.read("example.txt")
puts content
```
#### **파일 존재 여부 확인**
```ruby
if File.exist?("example.txt")
puts "파일이 존재합니다!"
else
puts "파일이 없습니다."
end
```
---
## **2. 파일 삭제 및 기타 기능**
### **2.1. 파일 삭제**
```ruby
File.delete("example.txt") if File.exist?("example.txt")
```
### **2.2. 파일 이름 변경**
```ruby
File.rename("old_name.txt", "new_name.txt")
```
### **2.3. 파일 크기 확인**
```ruby
puts File.size("example.txt") # 바이트 단위 크기 반환
```
---
## **3. 표준 입출력 (STDIN, STDOUT, STDERR)**
### **3.1. 콘솔 입력 (STDIN)**
사용자로부터 입력을 받을 때는 `gets`를 사용한다.
```ruby
puts "이름을 입력하세요:"
name = gets.chomp # 개행 문자 제거
puts "안녕하세요, #{name}님!"
```
---
### **3.2. 표준 출력 (STDOUT)**
`puts`, `print`, `p`를 이용해 출력할 수 있다.
```ruby
puts "Hello, Ruby!" # 개행 포함
print "Hello, " # 개행 없음
print "World!\n"
p [1, 2, 3] # 디버깅용 출력
```
출력 결과:
```
Hello, Ruby!
Hello, World!
[1, 2, 3]
```
---
### **3.3. 오류 출력 (STDERR)**
오류 메시지는 `STDERR.puts`를 사용해 출력할 수 있다.
```ruby
STDERR.puts "이건 오류 메시지입니다!"
```
---
## **4. 디렉터리 작업 (Dir 클래스)**
### **4.1. 디렉터리 생성 및 삭제**
```ruby
Dir.mkdir("my_folder") unless Dir.exist?("my_folder") # 폴더 생성
Dir.rmdir("my_folder") # 폴더 삭제 (비어있을 때만 가능)
```
### **4.2. 디렉터리 내 파일 목록 조회**
```ruby
puts Dir.entries(".") # 현재 디렉터리의 파일 및 폴더 목록 출력
```
---
## **5. 실전 예제: 로그 파일 기록기**
```ruby
class Logger
LOG_FILE = "log.txt"
def self.log(message)
File.open(LOG_FILE, "a") do |file|
file.puts("[#{Time.now}] #{message}")
end
end
end
Logger.log("프로그램이 실행되었습니다.")
Logger.log("사용자가 로그인했습니다.")
```
출력 (`log.txt`):
```
[2025-03-03 12:34:56] 프로그램이 실행되었습니다.
[2025-03-03 12:35:10] 사용자가 로그인했습니다.
```
---
## **6. 마무리**
Ruby에서는 파일과 입출력을 간편하게 다룰 수 있다.
- **파일 쓰기** → `"w"`, `"a"`, `"w+"`, `"a+"` 모드
- **파일 읽기** → `gets`, `readlines`, `read`
- **파일 관리** → `File.exist?`, `File.delete`, `File.rename`, `File.size`
- **입출력(IO)** → `gets`로 입력 받기, `puts`로 출력, `STDERR.puts`로 오류 출력
- **디렉터리 작업** → `Dir.mkdir`, `Dir.entries`
이제 Ruby에서 파일을 활용하여 로그 기록, 데이터 저장, 설정 파일 관리 등을 할 수 있다.