쉽게 배우는 C# 프로그래밍 - 책 리뷰
블로그에도 책리뷰 쓴 것 남겨두기 위해서, 예전에 썼던 책리뷰도 추가해보았다.
앞으로는 책 읽은 리뷰를 블로그에 먼저 쓰고 다른 곳에 쓰도록 하자! 😅
책 정보
저자: 윤인성
판매처
출판사 소개 페이지 (예제 소스 있음)
책 리뷰
C# 책을 제대로 본적이 없다가...
한번 배워보고 싶어서 대학교재같은?느낌의 이 책을 구매해서 한달정도 보고 다보았습니다.
내용은 잘 따라가서 잘 읽었고, 각 장마다 Windows Forms 프로젝트를 조금씩 진행할 수 있어서 재미있었습니다.
13장에서 일단 화면 보고 그리라고 해서 윈도우 폼 그리는게 약간 해깔렸지만, 그 이전의 윈도우 폼 예제를 다 진행해봤다면, 좀 신경 쓰면 해결할 수 있는 수준 이였습니다. Visual Studio 2026에서 윈폼 컨트롤들을 몇번 쓰다보니 잘 적응이 되더라구요. 무사히 완료했습니다.
13장에서의 건의 사항은 ... 비어있는 예외 블록은 제거하고 예외 상황은 미리 코드로 처리하는 것이 나을 것 같긴합니다. null일 경우 빈 문자열 등을 넣게 해서 저는 제거 했습니다.
그리고 Label 5~8 부분도 이벤트를 걸어서, 대여 / 반납 / 도서 추가|삭제 / 사용자 추가| 삭제가 일어날 때 자동 업데이트가 되도록 하도록 약간 내용 보강이 되면 좋을 것 같구요.
14장 마지막장의 챗봇도... OpenAI에서 Google Gemini로 변환해서 마무리 하였습니다.
개정판에서는 OpenAI 대신 무료인 Gemini를 적용하는 것으로 해도 좋을 것 같긴합니다. 😅
그리고 14장에서 약간 수정되야할 부분이 있다면 RichTextBox를 그냥 Disabled로 바꾸는게 아니라 ReadOnly 상태로 해야할 것 같더라구요.. 그래야지 스크롤을 마우스로 조작할 수 있었습니다.
책에 없는 내용이지만, xUnit 테스트 프로젝트를 추가해서 몇몇 예제 프로젝트의 코드만 테스트해보았는데,
Visual Studio + .NET 테스트 환경도 꽤 괜찮다는 느낌도 받았습니다.
이젠 좀 더 어려운 책을 보더라도 이해가 잘될 것 같은 느낌입니다..
그럼 책 잘 보았습니다. 👍👍
리뷰 보충
리뷰에서 건의했던 내용을 코드로 보충해보자!
13장: 도서 관리 프로그램
Github 저장소
이벤트 걸기
데이터가 변경될 때마다 상태 라벨이 자동으로 갱신되도록 이벤트를 사용했다.
DataManager.Save() 메서드에서는 저장이 끝난 뒤 DataChanged 이벤트를 발생시키고, Form1 생성자에서는 해당 이벤트를 구독하여 UpdateStatusLabels()가 실행되도록 했다.
// DataManager Save() 메서드
// 저장 후 이벤트 발생
DataChanged?.Invoke(null, EventArgs.Empty);
// Form1의 생성자
// 데이터 변경 이벤트 구독
DataManager.DataChanged += (sender, e) => UpdateStatusLabels();
// 라벨 설정
UpdateStatusLabels();XUnit 테스트 코드 추가
책과 유저 정보를 저장하는 Book.xml 생성이 제대로 되는지?, 로드해서 데이터가 로드 되었는지 정도만 테스트 하였다.
public class DataManagerTests
{
[Fact]
public void Save_ShouldCreateXmlFiles()
{
// Arrange
DataManager.Books.Add(new Book
{
Isbn = "123",
Name = "Test Book",
Publisher = "Test Publisher",
Page = 500,
UserId = 1,
UserName = "Test User",
IsBorrowed = true,
BorrowedAt = DateTime.Now
});
DataManager.Users.Add(new User
{
Id = 1,
Name = "Test User",
});
// Act
DataManager.Save();
// Assert
Assert.True(File.Exists("./Books.xml"));
}
[Fact]
public void Load_ShouldLoadBooksFromXml()
{
// Arrange & Act
DataManager.Load();
// Assert
Assert.NotNull(DataManager.Books);
Assert.NotNull(DataManager.Users);
}
}
14장: Gemini 전환 프로젝트
Github 저장소
책의 예제가 OpenAI로 작성되어있었는데, Gemini 2.5 Flash 무료 API 사용하도록 수정한 코드 이다..
💡실행하려면 GOOGLE_API_KEY 가 시스템 환경변수에 설정되어있어야하고,
예제 코드에서는 다음과 같이 환경변수에서 API KEY를 얻도록 작성하였다.
var apiKey = Environment.GetEnvironmentVariable("GOOGLE_API_KEY");
검토



댓글
댓글 쓰기