본문 바로가기

전체 글35

Entity Framework 마이크로소프트 사에서 관리하고 있는 엔티티 프레임워크를 활용하면, Jakarta EE의 JPA(Jakarta Persistence)와 같은 ORM을 손쉽게 작성할 수 있다. DbContext를 상속하여 ORM을 작성할 수 있다. 이후 내부에 DbSet을 활용하여 레포지토리로 활용할 객체를 만들어 사용할 수 있다. OnModelCreating 메소드를 오버라이드하여 엔티티의 제약조건 등을 설정해둘 수 있다. 엔티티의 Id는 기본적으로 Id가 작성되어 있는 속성을 파악하여 기본키로 설정하고 있으며, Id가 작성되어 있지 않은 속성을 기본키로 설정하기를 원한다면 해당 속성에 Key 애트리부트를 작성하여 기본키임을 명시할 수 있다. 자습서는 하단 링크에서 확인할 수 있다.https://learn.microsof.. 2025. 12. 16.
MvvmToolkit 마이크로소프트 사에서 오픈소스로 운영하고 있는 패키지로, WPF 등에서 MVVM 패턴을 구현하면서 자주 사용하는 보일러플레이트들을 제공해주는 패키지이다. INotifyPropertyChanged 등을 구현하기 위해 ViewmodelBase 등을 구현하는 경우가 많은데, 해당 패키지를 사용한다면 ObservableObject를 상속시켜 SetProperty 메소드를 사용하는 것으로 간결하게 구현할 수 있다.혹은 ObservableProperty 애트리부트를 해당 속성에 작성하는 것으로 간결하게 구현할 수도 있다. RelayCommand 또한 제공하고 있으며, 커맨드로 내보내려는 메소드에 RelayComand 애트리부트를 작성해주면 된다. 자세한 내용은 아래 링크에서 확인할 수 있다.https://learn.. 2025. 12. 16.
WPF Today I Learn XML로 객체를 생성하고 관리하는 방법을 알았다. 내에서 C# 객체를 생성하는 것이 가능하며, 추후 데이터 컨텍스트 등에서 바인딩을 수행할 때 {Binding Resource={StaticResource RESOURCE_NAME} Path={PATH}} 등을 작성하여 객체의 정보를 바인딩할 수 있음을 알게 되었다. 뷰모델을 작성하면서 INotifyPropertyChanged, ICommand 등등을 구현하는 보일러플레이트 코드가 많다고 느꼈는데, Mvvm Toolkit을 활용해서 이러한 보일러플레이트들을 많이 줄일 수 있다는 것을 알게 되었다. INotifyPropertyChanged를 구현해둔 ObservableObject, 프로퍼티 변경 시 변경 이벤트를 실행하는 코드를 작성해주는 Observabl.. 2025. 12. 11.
WPF 독학 C#에 대해 전반적인 내용은 얼추 알고 있고, 자바와 비슷한 면이 많다고 생각해서 바로 WPF 공부에 들어갔다. '이것이 C#이다 3판'을 읽어봤는데, 대리자, 리플렉션, 어트리부트 등이 C++의 함수 포인터, 자바의 리플렉션과 어노테이션 등등과 비슷한 개념이 많아서 금방 익힐 수 있었다. WPF는 마이크로소프트에서 제공하는 WPF 자습서를 통해 공부했다. 필요한 정보가 많이 흩어져 있는 느낌이 들었는데, 예시 리포지토리를 훑어보고, 비슷하게 개발이 가능한 MAUI 3 등의 자습서 등을 확인해보면서 전반적인 내용을 익힐 수 있었다. 관련 책도 많이 없거나 절판되어서 예시 리포지토리와 MAUI 3 자습가 큰 도움이 되었다. 자습서는 되도록이면 원문으로 읽으려고 하고 있고, 번역이 필요할 경우 번역본과 원문.. 2025. 12. 10.
StampedLock 배타적 접근, 비배타적 접근, 낙관적 읽기 등의 기능을 제공하는 Lock 클래스. 각각 writeLock, readLock, tryOptimisticRead 메소드가 속한다.자주 사용할 것 같은 메소드 위주로 정리했다. void unlock(long stamp)void unlockRead(long stamp)void unlockWrtie(long stamp)락을 해제한다. 락을 걸 때 반환받은 스탬프를 파라미터로 제공하면 된다. long writeLock()배타적 락을 건다. 반환값은 스탬프이므로 해제 시 반드시 필요한 값이다.해당 락이 수행된 경우, 읽기/쓰기가 불가능해진다. long readLock()비배타적 락을 건다.해당 락을 수행한 경우, writeLock 요청만이 Lock이 반환될 때까지 대기.. 2025. 8. 30.
grep 주어진 입력으로부터, 인자로 받은 문자열이 존재하는지 찾는 명령어 기본 사용방법은 다음과 같다:grep [OPTION]... patterns [FILE]... 아래와 같이 사용하면, test1.txt와 test2.txt에서 test 문자열을 포함하는 줄을 출력한다.grep test test1.txt test2.txt 기본적으로 정규표현식을 사용한다. 다음 명령어는 test 문자열로 시작하는 줄을 출력한다.grep ^test test1.txt 다음과 같은 옵션이 존재한다.더 많은 옵션은 --help 명령어로 확인할 수 있다. -c, --count결과의 개수를 반환한다. --color[=WHEN], --colour[=WHEN]결과에 색을 입힌다. 'always', 'never', 'auto' 중 하나를 쓰면.. 2025. 8. 24.