전체 글

· C#/Winform
이번 포스팅은 C# Winform에서 DataGirdView 도구에 자동으로 행 번호를 넣는 방법에 대해 알아보겠습니다.| DataGridView 기존 열 생성Form에 DataGridView를 생성하고 Col1, Col2, Col3이라는 열을 생성했습니다.기존에는 데이터를 늘려도 앞에 행 번호가 없는 것을 확인할 수 있습니다. | DataGridView에 행 번호 추가하기 DataGridView 속성에서 이벤트 항목의 RowPostPaint를 설정합니다.RowPostPaint 이벤트는 각 행이 그려질 때마다 호출되는 이벤트입니다.더블 클릭하면 이벤트가 자동으로 만들어지니까 활용해 보세요! 그리고 만들어진 RowPostPaint 이벤트 메서드에 코드를 작성합니다. private void dataGrid..
· C#
프로젝트를 진행하거나 레거시 코드를 보다 보면 Action과 event 키워드를 많이 사용하는 것을 볼 수 있습니다. 이번 포스팅은 Action과 event의 개념적 차이와 예시를 통해 정리하겠습니다.| 기본 개념 이해기본적으로 Action과 event는 모두 메서드의 실행을 전달하는 역할입니다.하지만 구조와 사용 방식에 차이가 있습니다. ✅ Action이란?Action은 C#에서 제공하는 내장 델리게이트(Delegate) 타입입니다.메서드를 참조하여 실행할 수 있는 포인터 역할을 하며, 반환값이 없는 메서드(=void 메서드)를 참조합니다. public delegate void Action(T obj); // 기본 정의 (System.Action) Action은 최대 16개의 매개변수를 받을 수 있으..
· C#
이번 포스팅은 C#에서 사용하는 CancellationToken과 CancellationTokenSource를하나로 묶어 처리하는 기능인 CreateLinkedTokenSource에 대해 작성하였습니다. 📌 CancellationToken과 CancellationTokenSource란?먼저 앞서 비동기 프로그래밍 게시글에서 작성했던 내용이지만 용어 정리를 먼저 하겠습니다.CancellationTokenSource: 취소 요청을 보낼 수 있는 주체입니다. .Cancel()을 호출하면 이와 연결된 CancellationToken에 취소 신호가 전달됩니다.CancellationToken: 취소 요청을 수신하고 감지하는 객체입니다. Task나 메서드에서 이 토큰을 받아들여야 작업 취소를 감지할 수 있습니다...
· 책 리뷰
저는 C#을 주력 언어로 사용하며 "객체지향"은 이론이 아닌 매일 부딪히고 있는 단어였습니다. 특히 장비 제어, 영상 분석, 통신 모듈 등 다양한 컴포넌트를 다루다 보면 코드의 복잡도는 눈덩이처럼 불어났습니다.그리고 그 복잡도를 어떻게 다루느냐에 따라 프로젝트의 생명력, 유지보수의 기간이 달라지곤 했습니다.그런 의미에서 "객체지향시스템 디자인 원칙"은 단순히 객체지향을 설명하는 교과서가 아니라,복잡도와 싸우는 개발자에게 보내는 실전형 지침서라 부르고 싶네요ㅎㅎ 책은 JAVA로 예시 코드와 설명을 진행하였으나, C#과 크게 다르지 않아 읽는데 불편함은 없었습니다.1장. 모든 게 복잡도 관리다 – 현실을 꿰뚫는 도입첫 장부터 강렬했습니다. “소프트웨어 개발은 결국 복잡도를 관리하는 일”이라는 선언은 그간 ..
· C#
이번 포스팅은 기존 프로젝트를 리팩토링 하면서 알게 된Task.ContinueWith 메서드를 분석하기 위해 작성했습니다. | 코드 예제먼저 같은 기능을 async/await 방식과 Task.ContinueWith 방식으로 구현했습니다. | async/await 방식public async Task GetDataAsync(){ var data = await Task.Run(() => { Thread.Sleep(1000); // 긴 작업 return "완료됨"; }); return $"결과: {data}";} | ContinueWith 방식public Task GetDataWithContinueAsync(){ return Task.Run(() => {..
· C#
C#을 사용하여 프로젝트를 진행하면 List 컬렉션을 자주 사용합니다.그중 특정 조건에 맞는 첫 번째 요소나 마지막 요소를 가져올 때First, FirstOrDefault, Last, LastOrDefault 같은 LINQ 확장 메서드를 활용할 수 있습니다.이 메서드들은 비슷해 보이지만 동작 방식에서 중요한 차이가 있으며,잘못 사용할 경우 런타임 예외로 이어질 수도 있습니다.이 글에서는 각 메서드의 차이점과 사용 예제를 통해 안전하게 활용하는 방법을 소개하겠습니다. | First vs FirstOrDefault| FirstFirst()는 조건에 맞는 첫 번째 요소를 반환합니다.만약 컬렉션이 비어 있거나 조건에 맞는 요소가 없다면 예외를 발생시킵니다. ex) First() 사용과 예외 발생 var num..
| 서비스컨트롤러와 리퍼지터리 사이에 위치하는 계층서버의 핵심 기능을 처리하는 순서를 총괄합니다.| 트랜잭션모두 성공해야 하는 일련의 과정쪼갤 수 없는 업무 처리의 최소 단위  | 서비스 계층 구현 ArticleService 클래스를 만들어 서비스 계층 구현@Service 어노테이션을 사용해 해당 클래스를 서비스로 인식해 객체를 생성| 게시글 조회 요청 개선앞서 만들었던 findAll()로 return 했던 메서드를 articleService.index() 메서드를 사용해모든 게시글을 조회하는 기능을 만들었습니다. 결과)  | 게시글 생성 요청 개선articleService.create()를 호출해POST 요청 메시지에 담긴 데이터를 전달합니다. 삼항 연산자를 사용해 return 문을 수정했습니다 ret..
| REST API 구현 과정 조회 요청 : /api/articles 또는 /api/articles/{id}> GET 메서드로 전체, 단일 Article 조회생성 요청 : /api/articles> POST 메서드로 새로운 Article 생성수정 요청 : /api/articles/{id}> PACTH 메서드로 특정 Article 내용 수정삭제 요청 : /api/articles/{id}> DELETE 메서드로 특정 Article 삭제| REST API 구현| REST 컨트롤러와 일반 컨트롤러 차이 REST 컨트롤러 : JSON, 텍스트 데이터 반환일반 컨트롤러 : 뷰 페이지 반환 | GET 구현- 전체 게시글 조회GET 메서드를 사용해 localhost:8080/api/articles 로 요청을 보냈는데 ..