🔸 야탑동 CS 스터디 모임 : 수확의 낫

야탑동에 사는 개발자 친구들끼리, 주말마다 CS 공부를 하는 스터디 모임을 만들었다.

각자 원하는 내용을 공부하고, 다른 사람들과 공유한 후 토론을 하며 스터디를 진행하는 모임이다!

스터디 모임 이름은 수확의 낫인데, 이유는 없고… 그냥 갑자기 생각난 단어로 정했다.. ㅋㅋ

야탑동 CS 스터디 모임 : 수확의 낫

2주에 한번꼴로 스터디를 진행하기로 했다!


경모 영찬 종화 승준
Deep Learning C#, Design Pattern Linux, Kernel Deep Learning


관련 스터디 내용은 이 블로그에 포스트로 정리후 스터디 팀원들에게 공유할 예정이다.

나는 C#Design Pattern을 스터디하고 공유하기로 하였다.



🔹 C#

C#은 마이크로소프트에서 만든 객체 지향 프로그래밍 언어이며, .NET Framework에서 사용되는 주된 언어이다.

2000년대 들어서며 오라클의 Java가 새로운 차세대 언어로 각광받으면서

MS에서도 Java의 장점을 수용하여 새로운 언어를 만들어 출시했는데, 이것이 C#이다!

Unity 에디터는 C# 컴파일러를 사용해 Unity 프로젝트에서 C# 소스코드를 컴파일한다.

따라서 C# 언어를 사용하면 Unity 에디터를 통해 게임 개발을 할 수 있게되며,

.NET 플랫폼을 통해 Windows 어플리케이션, 웹 서버, 클라우드 서버, 모바일 어플리케이션 개발을 할 수 있다.

이번 스터디에서는 Effective C#이라는 책을 통해 C#으로 개발을 할 때 어떤 방식으로 개발을 해야하는지를 스터디 할까한다.

즉, C#의 기능을 세부적으로 조사한다기보다, 실제 개발 현장에서 어떻게 적용하는지를 정리하는 것이다.

Effective C# 3판

C#에 대한 내용은 아래와 같은 방식으로 진행할 예정이다.

번호내용링크
1 C#의 개요와 .NET 플랫폼에 대한 내용을 정리한다.
(Effective C# 아님, 개인이 조사한 내용)
Unity 개발을 위한 C# 기본 내용 정리
2 C#으로 개발할 때 주로 사용되는 기능들과
실제 개발에서 주로 사용되는 관용적 표현들을 정리한다.
Effective C# : C#언어 요소
3 최적화를 수행하기에 앞서 관리(Managed) 환경을
어떻게 효율적으로 사용하는지 조사한다.
Effective C# : .NET 리소스 관리
4 C# 2.0 부터 추가된 Generic에 대한 내용을 조사한다. Effective C# : Generic 활용
5 C#에서 손쉽게 데이터를 Query하기 위한
LINQ 문법에 대해 조사한다.
Effective C# : LINQ 활용
6 현대적인 C# 프로그램에서 예외와 오류를
관리하는 방법에 대한 가이드를 제시한다.
Effective C# : 예외 처리



🔹 Desing Pattern

디자인 패턴(Design Pattern)은 소프트웨어 공학에서 반복적으로 발생하는 문제를 해결하기 위한 효율적이고 검증된 해결책의 모음이다.

디자인 패턴은 소프트웨어 설계에서 공통적인 문제를 해결하기 위한 구조와 절차를 제시하며,

개발자들이 재사용 가능한 설계 아이디어와 알고리즘을 공유할 수 있도록 도와준다.


자료를 조사하다가 아주 잘 정리된 글을 발견하여, 인용한다.

📌 참고 : 디자인 패턴 (Design Parrern)이란? TStroy 블로그

객체지향 소프트웨어를 '잘' 설계한다는 것은 쉬운 일이 아닙니다.

게다가, 재사용할 수 있는 객체지향 소프트웨어를 만드는 것은 더 힘듭니다.
설계를 할 때에는 지금 당장 갖고 있는 문제를 해결할 수 있어야 하지만,
나중에 생길 수 있는 문제나 추가된 요구 사항들도 수용할 수 있도록 일반적이고 포괄적이어야 합니다.
이를 위해 설계할 때 고려사항으로 SOLID 원칙 등 객체지향적 소프트웨어 설계 방법론이 있고,
현업에서는 이에 따라 개발하기 위해 노력하고 있습니다.

개발의 경험이 쌓이다 보면 자신들이 전에 사용했던 코드와 유사한 기능을 구현해야 해서
이전의 코드를 들여다보는 경험을 종종 하게 됩니다.
그러다 전에 사용했던 해결책을 그대로 반복해서 사용하기도 하고, 변형해서 쓰기도 하고,
혹은 상황에 맞지 않다고 판단하여 다른 방향의 구현을 고민하기도 합니다.

디자인 패턴은 설계자로 하여금 재사용이 가능한 설계는 선택하고, 재사용을 방해하는 설계는 배제하도록 도와줍니다.
또한 패턴을 쓰면 이미 만든 시스템의 유지보수나 문서화도 개선할 수 있고, 클래스의 명세도 정확하게 할 수 있으며,
객체 간의 상호작용 또는 설계 의도까지 명확하게 정의할 수 있습니다.

간단하게 말해서 디자인 패턴은 설계자들이 "올바른" 설계를 "빨리" 만들 수 있도록 도와줍니다.


일반적으로 Design Pattern은 3가지 범주로 나뉜다.

  • 생성 패턴(Creational Patterns)
    • 객체의 생성과 관련된 패턴으로, 객체의 생성과 초기화를 효과적으로 다룬다.
  • 구조 패턴(Structural Patterns)
    • 클래스와 객체들의 구성을 다루는 패턴으로, 클래스나 객체들 사이의 관계를 조직화하고 구성하는 방법을 제공한다.
  • 행위 패턴(Behavioral Patterns)
    • 객체들이 상호작용하는 방식과 책임 분배에 관련된 패턴으로, 객체 간의 행위와 알고리즘을 조직화한다.


크게 3가지 범주로 나뉘는 것이고, 실제로 사용되고 있는 패턴은 매우 많다.

이 중에서 스터디 팀원들과 공유하고자 하는 패턴들은 체크로 표시한다.

생성 패턴 구조 패턴 행동 패턴
Singleton Adapter Command
Abstract Factory Composite Interpreter
Factory Method Decorator Iterator
Builder Facade Mediator
Prototype Flyweight Memento
Proxy Observer
MVC State
Template Method
Strategy


이번 스터디에서는 헤드 퍼스트 디자인 패턴이라는 책을 통해 스터디를 진행할 예정이다.

헤드 퍼스트 디자인패턴 개정판

Design Pattern 에 대한 내용은 아래와 같은 방식으로 진행할 예정이다.

번호내용링크
7 디자인패턴의 개요와 클라이언트로부터 알고리즘을 분리하여
독립적으로 변경할 수 있도록 하는 전략 패턴에 대해 조사.
디자인 패턴 : 디자인 패턴 소개와 전략 패턴
8 한 객체의 상태를 여러 객체가 알 수 있게하는
일대다 의존성을 정의하는 옵저버 패턴에 대해 조사.
디자인 패턴 : 옵저버 패턴
객체에 추가 요소를 동적으로 더해 서브클래스를 유연하게 만드는
데코레이터 패턴에 대해 조사.
디자인 패턴 : 데코레이터 패턴
9 객체 생성을 캡슐화 하는 팩토리 패턴에 대해 조사.
팩토리 메서드 패턴추상 팩토리 패턴에 대해 조사.
디자인 패턴 : 팩토리 패턴
10 클래스의 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공하는
싱글턴 패턴에 대해 조사
디자인 패턴 : 싱글턴 패턴
11 특정 클래스 인터페이스를 다른 인터페이스로 변환하는 어뎁터 패턴에대해 조사.
인터페이스를 묶은 통합 인터페이스를 제공하는 퍼사드 패턴에 대해 조사.
디자인 패턴 : 어뎁터 / 퍼사드 패턴
12 객체들을 트리 구조로 구성하여 전체-부분 계층을 나타내는
컴포지드 패턴에대해 조사.
디자인 패턴 : 컴포지드 패턴
13 인터페이스와 비즈니스 로직을 분리하여 개발을 효율적으로 분담하는
Model-View-Controller 패턴에 대해 조사.
디자인 패턴 : MVC 패턴
14 빌더 패턴, 브리지 패턴, 플라이 웨이트 패턴, 중재자 패턴,
메멘토 패턴, 비지터 패턴에 대해 조사
디자인 패턴 : 기타 다른 패턴들