티스토리 뷰
3편을 못 봤다면
[개발 / 필독서 ] 소프트웨어 공학으로 보는 개발자 필독서 03
2편을 못 봤다면 [개발 / 필독서 ] 소프트웨어 공학으로 보는 개발자 필독서 02 1편을 못봤다면 [개발 / 필독서 ] 소프트웨어 공학으로 보는 개발자 필독서 개발 공부를 하는 사람이라면 개발자 필
malchafrappuccino.tistory.com
지난 글에서 프로젝트를 진행하기 위해 무엇이 필요한지 알아내는 요구사항 분석 (Requirement Analysis)를 진행했다.
이번 글에서는 프로젝트를 실제 구현 하기에 앞서 어떻게 구현할지 계획하는 디자인 단계에 대해 살펴보겠다.
Design(디자인), 그 디자인 아님
보통은 디자인이라고 하면 디자이너들이 하는 그 디자인을 떠올린다. 그게 통용되는 의미이다.
그러나 소프트웨어 공학, 프로그래밍에서 디자인은 설계된 패턴이라는 뜻으로 사용된다.
과거의 많은 프로그래머들이 코딩을 하며 축적된 경험들이 있다.
이 몇십년 간 축적된 빅데이터를 기반으로 상황에 맞게 설계된 패턴들이 있다.
하늘아래 완전히 새로운 것은 없다라는 말처럼 많은 프로그램들이 비슷한 형태를 가지고 있다.
인스타그램과 페이스북의 인터페이스랑 기능이 조금씩 다르기는 하지만 기본적으로 사진을 포스팅하고, 댓글을 달고, 팔로우를 하는 형태는 비슷하다.
이 두 앱 뿐만 아니라 SNS 앱들의 데이터 구조는 매우 유사할 것이다.
기존에 있었던 디자인(설계 패턴)을 기반으로 내가 만들 프로젝트를 설계하는 단계가 바로 디자인 단계이다.
1. Architecture Design (아키텍쳐 디자인)
보다 쉬운 이해를 위해 프로그램을 만드는 것을 음식점으로 예시를 들어보겠다.
우선 맨 땅에서 장사를 할 수는 없다. 그렇기 위해 음식점을 지어야 한다.
아키텍쳐 디자인은 음식점 건물을 설계하는 것이다.
그냥 건물을 세워서 음식을 판매할 수 있지만 효율이 매우 떨어진다.
효율적인 동선을 위해 주방을 어떻게 설계하는지, 주방과 홀은 어떻게 이어져있는지, 좋은 뷰를 위해 창문을 어느 방향으로 내는지 등 건축가는 여러가지를 고려해야 한다.
프로그래머도 마찬가지이다. 어떻게 하면 프로그램이 효율적으로 돌아가는지 계획을 가지고 있어야 한다.
소프트웨어에서 효율성은 수익으로 연결되는 것이기 때문에 매우 중요하다.
- 효율적인 동선을 위해 주방을 어떻게 설계하는 지 = 데이터를 효율적으로 관리하기 위해 어떤 데이터 구조를 사용할 것인지
- 주방과 홀은 어떻게 이어져 있는지 = 사용자와 데이터를 어떤 식으로 주고 받을 것인지
- 좋은 뷰를 위해 창문을 어느 방향으로 어떤 크기로 낼 것인지 = 쉬운 접근성을 위해 보안을 어느정도 수준으로 유지할 것인지. 창문이 커지면 접근성은 커지겠지만 보안은 약해질 것이다.
팀이 만들고자 하는 프로그램에 맞춰 프로그램의 전반적인 시스템을 구성하는 것이 아키텍쳐 디자인이다.
1.1 Architecture Pattern
내가 만드는 프로그램에 맞는 아키텍쳐 패턴을 골라서 사용하면 된다.
MVC 패턴은 한 번쯤은 들어봤을 유명한 아키텍쳐 패턴이다.
사실 아키텍쳐 패턴을 골라서 사용하다는 말을 했지만 실제로는 골라서 사용하지 않는다.
회사에 따라 구현하고 싶은 기능이 다르고, 추구하는 방향이 다르기 때문에 프로그램마다 아키텍쳐가 다 제각각이다.
기존의 패턴을 기반으로 자신 프로그램만의 아키텍쳐를 만들어 사용한다. (교수님 피셜)
그렇기 때문에 회사의 요구사항을 정확히 파악하고 프로그램을 설계할 수 있는 아키텍처가 고급인력인 것이다.
아키텍처는 내가 다루기에는 딥하고 어려운 주제이기에 여기까지만 하고 좋은 유튜브 영상이 있어 공유합니다.
2. Design Pattern (디자인 패턴)
앞서서 음식점 건물을 지었다. 이제는 음식점 내부를 채워야 한다.
어떤 식으로 인테리어를 하느냐에 따라 매출이 천차만별이다.
고기집과 카페의 인테리어가 같을 수 없다.
고기집에는 불판이 있어야 되고, 빠른 주문을 위해 벨도 있어야 한다.
카페는 편안함보다는 사진을 찍었을 때 잘 나오는 인테리어가 중요하다.
이처럼 업종에 따라 인테리어가 달라지지만, 같은 업종일 경우 매우 유사한 인테리어를 가진다.
인테리어처럼 자주 쓰이는 코딩 방법에 대해 정리 해놓은 것이 바로 디자인 패턴이다.
정확한 정의는 '공통적으로 발생하는 문제에 대해 재사용 가능한 해결책' 이다
2.1 예시
가장 쉬운 패턴으로는 Singleton Pattern 이 있다. (Coupleton은 없나?)
Singleton Pattern 은 클래스의 인스턴스를 하나만 사용하기 위해 사용한다.
유저의 현재 위치 정보를 저장하는 클래스를 만들어보자
class userLocation {
static let shared = userLocation()
var location: String
private init(){
location = "Seoul"
}
}
print(userLocation.shared.location)
// Seoul 출력
위치 정보는 하나이기 때문에 앱 전체에서 하나의 인스턴스 shared 만 사용하면 된다. 이를 통해 메모리를 절약할 수 있다. 또 위치 정보를 전역변수로 앱 전체에서 편리하게 사용할 수 있다.
단점도 존재한다.
전역변수로 쉽게 사용할 수 있기 때문에 앱 전체에서 사용할 수 있고 이에 따라 의존성이 생기게 된다.
이니셜라이져를 private 로 선언했기 때문에 테스트용 더미 객체를 생성하기 힘들다. 즉 테스트가 힘들어진다.
디자인 패턴을 사용한다고 무조건 좋은 것이 아니다.
각각의 장단점이 있기 때문에 상황에 맞게 잘 사용하는 것이 중요하다.
3. 개발 필독서
클린 아키텍처 - 로버트 C. 마틴 링크
소프트웨어 아키텍처의 입문서로 불리는 책
아키텍쳐가 상위 개념이기 때문에 초보자가 읽기에는 어렵다. 나도 조금 읽다가 나중에 읽으려고 아껴뒀다.
GoF의 디자인 패턴 - 에릭 감마 링크
가장 유명한 디자인 패턴 책
23가지의 디자인 패턴을 생성 패턴, 구조 패턴, 행동 패턴으로 나누어 설명한다.
굳이 책이 아니더라도 구글에 GOF 디자인 패턴을 검색하면 많은 예시들을 볼 수 있다.
책의 예시들은 자바로 쓰여졌다. Node.js 디자인 패턴 바이블, 모던 C++ 디자인 패턴 등 각 언어에 맞는 디자인 패턴도 있으니 찾아보면 좋다.
참고로 GOF는 Gang of Four 의 약자인데 갱이 범죄자 이런게 아니라 권력자를 뜻한다.
컴고수 4명이 쓴 디자인 패턴 책으로 이해하면 된다.
다음편 바로보기
[개발 / 필독서 ] 소프트웨어 공학으로 보는 개발자 필독서 05
4편을 못 봤다면 [개발 / 필독서 ] 소프트웨어 공학으로 보는 개발자 필독서 04 3편을 못 봤다면 [개발 / 필독서 ] 소프트웨어 공학으로 보는 개발자 필독서 03 2편을 못 봤다면 [개발 / 필독서 ] 소프
malchafrappuccino.tistory.com
'책 > 시리즈' 카테고리의 다른 글
[개발 / 필독서 ] 소프트웨어 공학으로 보는 개발자 필독서 06 - Verification & Validation (0) | 2022.02.16 |
---|---|
[개발 / 필독서 ] 소프트웨어 공학으로 보는 개발자 필독서 05 - Implementation (0) | 2022.02.15 |
[개발 / 필독서 ] 소프트웨어 공학으로 보는 개발자 필독서 03 - Requirement Analysis (0) | 2022.02.12 |
[개발 / 필독서 ] 소프트웨어 공학으로 보는 개발자 필독서 02 - Project Planning (0) | 2022.01.26 |
[개발 / 필독서 ] 소프트웨어 공학으로 보는 개발자 필독서 01 (0) | 2022.01.22 |
- Total
- Today
- Yesterday
- Swift 서버
- 날씨어플
- 디자인 패턴
- Swift 디자인 패턴
- Swift
- 코딩
- 부스트캠프7기
- 필독서
- Swift문법
- vapor
- TODO
- 애플
- swiftUI 기초
- Combine
- 개발
- 책리뷰
- 프로그래머스
- 코딩 테스트
- 책후기
- ios
- 앱개발
- 부스트캠프iOS
- Swift공식문서
- UX
- SwiftUI
- 코딩테스트
- Swift DocC
- 책
- todo앱
- 부스트캠프
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |