7월, 2020의 게시물 표시

Linkedin Learning - Programming Foundations: Design Patterns 후기

이미지
링크드인 러닝에서 디자인 패턴에 대한 강의를 수강 하였다.  디자인 패턴에 대하여 개략적으로만 알고 있을 뿐, 이번에 제대로 좀 보자고 생각하여서 보게 되었다. 회사마다 다르고, 팀마다 다르겠지만 우리 팀에서는 MVC Framework의 패턴을 따르고만 있을 뿐 디자인 패턴을 적용하고 있지 않다. 업무가 바빠서일 수도 있고, 디자인 패턴을 적용하는것과 거리가 먼 외주 코드들이 많아서 그럴 수도 있다.  명백히 외주 계약에 디자인 패턴이 있지는 않기 때문.. 하지만 못쓰더라도 아는게 좋다고 생각 한다. 또한 자바의 Spring 코드를 까보면 여러 디자인 패턴의 결합체임을 알 수 있기에 좋은 공부라고 생각 한다. 디자인 패턴 강의 저자 링크드인 러닝과 같은 온라인 course의 특성상 내가 하고 싶으면 강의를 만들 수 있다. 이는 자칫 잘못하면 전문성이 떨어질수도 있는 점이 있다. 하지만 이 강의의 저자들은 Oreilly의 Head First Design을 작성한 저자이기 때문에 그런 걱정은 필요 없다.  강의 내용 - 6개의 패턴 해당 강의에서는 6개의 패턴을 공부 한다. Head First Design Pattern의 서적에는 약 20여가지의 패턴이 있으며 거기에서 6개를 뽑으신것 같다. 그냥 강의를 1,2,3 나누더라도 모든 강의를 올리는게 어땠을까 생각이 들긴 하지만, 대표적인 패턴을 배운 후 나머지들은 책을 통해서 확인하게 하는 의도라면 이해가 된다.  1. Strategy Pattern 함수의 interface를 통해서 객체를 상속하는 것이 객체 지향의 core중 하나 이다. 하지만 상속을 통해서 함수를 명세하는 것의 단점이 있는데 이는 모든 객체에서 해당 함수를 구현해야 한다는 점이다. 아무런 차이가 없더라도 일단은 따로따로 구현해야하는 점이 있으며 이를 재사용성이 좋게 하기 위해서 Composition이라고 하여 해당 기능을 하는 함수를 따로 클래스로 두어서 사용하는 것 이다.  IS-A 관계에서 HAS-A 관계로 변경이 되며 재사용성이 좋아지는 점

Linkedin Learning - Threading in C# 후기

이미지
회사에서 링크드인 러닝을 지원해주고 있다. 최근에 C#언어에서 쓰레드를 사용하게 되어서 이론적으로 다시 공부 하려고 생각중이었다. 딱 링크드인 러닝을 사용하면 될것 같아서 링크드인 러닝을 통해서 복습 하였다.  Threading in C# 해당 동영상에서 다루는 내용은 기본 이론, Thread Pool, Task, Lock 등을 다룬다.  Thread Pool 자체를 써본적은 없어서 이번 기회에 알 수 있었다. 갯수를 조절하는 기능과 Queue의 기능이 있다.  Task 는 쓰레드를 High Level로 만든 것으로 I/O 연산에 좋고, 체이닝이 가능하다. 기본 쓰레드 연산의 결과값을 받아서 다른 연산을 해야한다면 쓰레드에서 연산의 결과값을 받아서 하는 것은 Thread.Join 방식이 있지만 좀 귀찮아 진다. Task는 ContinuWith과 같은 함수로 더 쉽게 가능 하다. 쓰레드의 예외 처리는 밖으로 전파가 되지 않기 때문에 예외 처리는 쓰레드 block에서 처리 해야한다.  Lock도 일반 락, Semaphore, Monitor, Exclusive Lock, ReaderWriterLockSlim 등 일반적인 Lock에 대하여 다룬다.  전체적으로 어렵지 않고 쉬운 편이며, C# .net을 사용하는 사람이면 들을만 하다.  Certification 위와 같이 동영상을 들었다는 증서를 받을 수 있다. 약간 멋잇긴 하지만, 이걸 제출할건 또 아니라 그냥 멋이라고 생각 한다. 차라리 링크드인의 프로필에 연동되면 어떨까 생각이 들지만 내 프로필에서는 보이지 않고 있다. 

C# 메모리 관리에 대하여 Garbage Collector

이미지
안녕하십니까. 이번 포스팅에서는 제가 업무적으로 주로 사용하는 C#의 메모리 관리에 대하여 알아보도록 하겠습니다. C#, CLR, .net Garbage Collection 공식 문서 :  https://docs.microsoft.com/ko-kr/dotnet/standard/garbage-collection/fundamentals C# 자체는 언어일 뿐이고 자바의 JVM와 같이 C#은 Common Language Runtime이라는 환경에서 관리를 합니다.  공식 문서에서는 " 관리 코드를 사용하여 작업하는 개발자는 메모리 관리 작업을 수행하기 위해 코드를 작성할 필요가 없습니다. " 라고 합니다.  자바 언어를 경험하였을때 JVM 메모리를 관리하는 명령어가 있었지만, C#을 사용하고 나서는 딱히 그런 관리를 한 경험은 없습니다. 이는 장점이 될수 있고 단점이 될수 있겠지만, 일반적인 개발자들에게는 장점이지 않을까 생각 합니다.  단순하게 CLR이 관리한다고 알기 보다는 어떻게 관리하는지를 아는것도 중요하다고 생각 하여서 알아보도록 하겠습니다.  메모리 영역 메모리 관리에 대하여 알아보기 전에 어떤 메모리 구조가 있는지 간략하게 소개하도록 하겠습니다. 메모리 구조로는 다음과 같이 3 영역이 있습니다. static stack heap static 영역 C#에서는 static이라는 키워드를 통하여 변수를 전역변수로 선언 할 수 있습니다. 이렇게 선언시 어떠한 영역에서도 접근이 가능하게 됩니다. 전역 변수는 프로그램이 시작하거나 종료하면 생성, 삭제되기 때문에 메모리 관리에 큰 영향을 주지는 않습니다.  stack 영역 stack 영역은 함수, if문과 같은 block으로 감싼 코드들에 할당되는 지역 변수들을 저장 합니다. 해당 영역은 코드 문이 실행될때 생성되고, 끝날때 삭제가 됩니다. 일반적인 메모리 관리에 영향을 주지는 않지만, 많은 함수가 실행이 되고 끝나지 않으면 stack 영역이 꽉 차는 stackoverflow가 발생 합니다.  he