본문 바로가기

전체 글294

C# 마샬링 - 구조체 C#에서 C++의 DLL을 호출할 경우 데이터를 주고받아야 한다. 그렇게 하기 위해서 여러가지 방법이 있지만, 우선 DLL을 만든 후, DllImport를 사용하여 전달하게 구성되었기에. 그에 맞는 방법으로.. C#에서 -메소드 선언 [DllImport("$DLL파일명", CallingConvention=CallingConvention.Cdecl, Charset=CharSet.Ansi)] public static extern $반환타입 $메소드명($params) 위와 같이 선언하면 된다. 콜링컨벤션은 굳이 안해도 되는듯. charset은 나는 MBCS를 사용하느라 그냥 명시적으로 선언해 주었다. C++에서 #define DLLAPI extern "C" __declspec(dllexport) DLLAPI .. 2022. 7. 21.
Java springboot. Validation 오랫만에 자바 스프링부트에서 하나 배워서 기억하고자 포스팅.. ㅋ 클라이언트에서 숫자만 입력해야하는 필드에 특정한 문자를 넣을 수 있다. 물론 js에서 검사는 해주지만.. 근데 요게 피할 수 있네? 어떻게하면 될까.. 저장할때마다 각 페이지별로 한땀한땀? 싫다.. 그럼 유지보수할때 고통스럽다. 난 게으른 개발자가 되고싶지 성실하고 오래 일하는 개발자이고싶지 않다. 근데 Validation애노테이션이 있네? 나처럼 숫자가 입력이 되어야하는 사람들, 또는 이메일 형식, 과거 또는 미래, 특정 형식이 필요한 사람들은 Validation애노테이션을 쓰면 매우 유용하다. Validation 애노테이션은.. DTO에 붙여준다. 종류는 엄청 많아서 몇가지만 추렸다. 자세한 내용은 여기 참고 애노테이션 이름 비고 @N.. 2022. 7. 20.
IntelliJ 프로파일링 - 내용 분석하기 IntelliJ를 이용한 프로파일링에 대해 기술한다. * IntelliJ 프로파일링 IntelliJ에서 성능프로파일링 - Profiler실행 프로파일러 실행방법은 위에 있고.. 프로파일러의 내용을 확인하기 위해서는 하단 탭의 Profiler를 선택하거나 View -> Tool Windows -> Profiler를 선택한다. 아래 Profiler를 확인해보면 다음과 같이 창이 뜬다. 그러면 현재 실행중인 프로세스의 CPU와 메모리 상태를 확인할 수 있다. 좌측의 눈 아이콘을 선택하면 프로그램 실행부터~현재까지의 데이터를 모두 표시하는 Show All Data나, 최근 60초만, 또는 최근 5분간만의 데이터만 볼 수 있는 옵션이 있다. 그리고 해당 아이콘 아래로 두번째에 카메라 아이콘이 있는데, 해당 아이콘.. 2022. 7. 20.
IntelliJ에서 성능프로파일링 - Profiler실행 Visual Studio에서는 Performance Profiler가 있다. 성능측정해주는.. 물론 이놈은 Enterprise에서만 발견할 수 있다. 이 프로파일러의 역할은 프로그램 실행 시, 무언가 랙이 걸린다거나 할때.. 어디서 이런 병목현상이 일어나는지, 또는 어느 메소드에서 가장 많은 자원을 소비하는지 프로파일링 해주는 역할을 수행한다. IntelliJ에서도 이게 있다. Community에선 없고, Ultimate에서만.. (역시 자본주의는 돈이다..) 실행방법은 간단하다. 메뉴바 -> run -> Profile '실행프로파일명' with IntelliJ Profiler를 선택하면 된다. 간단하다..!! 그러면 프로젝트 시작부터 열심히 프로파일링을 해준다. 그리고 Run -> Attach Prof.. 2022. 7. 20.
C# Dispose. vs GC (Garbage Collection) : 메모리관리 C#에서는 C++과 다르게 명시적으로 리소스를 해제하는 코드가 (잘)안보인다. C++에서는 new-delete, alloc - free가 항상 쌍으로 이루어져야했다. 아니면 디버깅 종료시 MemoryLeak을 찾았다고 띄워준다. 근데 C#에서는 이러한 작업을 하지 않아도.. Garbage Collector가 스스로 탐색하면서 사용되지 않는 리소스를 해제해준다. 오오오~~~ 근데 이 방법에는 몇가지 주의할게 있다. 1. 관리되지 않는 코드는 GC가 제거할 수 없다. 2. 동시에 너무 많은 객체 생성등으로 갑자기 메모리를 잡아먹을경우.. 한동안 남아있는다. 2번을 위한 대책으로 리소스가 불필요해진 시점에 GC.Collect()를 호출하면 되기는 한다. 다만.. GC.Collect()가 도는동안 엄청 느려질 .. 2022. 7. 19.
Factory Pattern * 이 글은 C#기준으로 작성하였습니다. Factory Pattern. 같은 인터페이스를 가지는 여러 클래스들을 생성하려고하면.. 이 패턴을 쓰는것이 좋았다. (개인취향임..) 예를 들어, 비슷한 역할을 하는 클래스들이 여러개가 필요하다고 하면.. 이걸 매번 각각의 위치에서 생성하는 것도 하나의 방법이 되겠지만, 이걸 어느 한곳에서만 생성하게 해준다면? 그리고, 해당 클래스들을 사용하는 입장에서는 어느 클래스를 사용해도 동일한 코드를 사용할 수 있다면? 예를 들어, window client프로그램인데, Database에 접속하는 경우를 생각해보자.. MySQL, MS-SQL에 접속한 클래스들을 만든다고 하면? public class MSSQLHandler{ public void Connect(...){ .. 2022. 7. 18.
728x90