ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20240425 소프트웨어 아키텍처 외
    개발...................../TIL 2024. 4. 25. 21:10
    소프트웨어 아키텍처(정의, 중요성, 실무 관점, 고객서비스 관점, 공부 리소스)
    알고리즘 문제 풀이 '내적'
    오늘의 생각

     

    소프트웨어 아키텍처

     

    소프트웨어 아키텍처란 시스템의 전체적인 디자인 청사진으로서, 소프트웨어 시스템의 구조와 구성 요소 간의 상호 작용을 설계하고 문서화하는 것이다. 소프트웨어 아키텍처를 통해 시스템이 요구 사항을 충족하고 효과적으로 동작하도록 보장하는 역할을 한다. 시스템을 구성하는 모듈, 레이어, 컴포넌트, 데이터 플로우 및 상호 작용 패턴 등을 포함한다.

     

    • 복잡성 관리: 소프트웨어 시스템은 복잡한 요구 사항과 다양한 구성 요소로 구성된다. 적절한 아키텍처를 가진 시스템은 이러한 복잡성을 관리하고, 구성 요소 간의 상호 작용을 명확하게 정의하여 개발 및 유지 보수를 용이하게 만든다. 
    • 확장성 및 유연성: 우수한 아키텍처는 시스템이 변화하는 요구 사항에 대응하고 확장할 수 있도록 한다. 적절한 모듈화와 느슨한 결합을 통해 시스템의 유연성을 높이고, 새로운 기능을 추가하거나 변경할 때 기존 코드에 영향을 최소화한다.
    • 성능 최적화: 아키텍처는 시스템의 성능을 최적화에 중요한 역할을 한다. 적절한 구조와 디자인 패턴을 선택하여 리소스 사용을 최적화하고, 성능 병목 현상을 예방하고 시스템의 응답 시간과 처리량을 향상시킨다. 
    • 재사용성: 잘 설계된 아키텍처는 구성 요소의 재사용을 촉진합니다. 모듈화된 디자인과 추상화된 인터페이스를 통해 코드의 재사용성을 높이고, 개발 시간을 단축하고 코드의 일관성을 유지할 수 있다. 
    • 유지 보수성: 적절한 아키텍처는 시스템의 유지 보수성을 향상시킨다. 명확하고 모듈화된 구조를 통해 코드의 이해와 수정이 쉬워지며, 버그를 신속하게 해결하고 변경 사항을 적용할 수 있다.

     

    실무 관점에서 보자면, 

     

    개발 효율성을 높인다.

    명확한 아키텍처는 개발자들이 코드를 구성하고 유지 관리하는 데 필요한 지침을 제공한다. 

    협업 및 통합이 용이하다.

    모듈화된 아키텍처는 각자의 역할을 명확히 정의하고, 다양한 모듈을 통합하여 전체 시스템을 구축하는 데 큰 역할을 한다. 

    유지 보수성 및 확장성을 보장한다.  

    변경 사항을 쉽게 적용할 수 있고, 시스템을 확장하거나 업그레이드할 때도 문제가 발생할 가능성을 줄인다. 

     

    고객서비스 관점에서는,

     

    성능 및 안정성에 직접적 영향

    잘 설계된 아키텍처는 시스템이 안정적으로 운영되고, 사용자에게 빠른 응답 시간을 제공한다. 

    사용자 경험 개선

    효율적인 시스템 구조와 최적화된 성능은 사용자가 원활하고 편리한 서비스를 받을 수 있도록 돕는다.

    신속한 개선과 대응이 가능하다.

    매시간 변화하는 시장 환경과 고객 요구에 신속하게 대응하기 위해서는 유연하고 확장 가능한 아키텍처가 필요하다. 새로운 기능을 빠르게 출시하고 고객의 요구에 신속하게 대응하기 위해 필요하다. 

    소프트웨어 아키텍처 공부 리소스 
    Youtube Let's build that app
    Website raywenerlich.com
    GitHub에서 Swift Architecture 검색해서 그대로 따라해보기 
    애플의 API Design Guideline

     

     

    내적 

     

    문제 설명

    길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.
    이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)

     

    제한 사항 

    a, b의 길이는 1 이상 1,000 이하입니다.a, b의 모든 수는 -1,000 이상 1,000 이하입니다.

     

    입출력 예

    a b result
    [1,2,3,4] [-3,-1,0,2] 3
    [-1,0,1] [1,0,-1] -2

     

    입출력 예 설명

    입출력 예 #1
    a와 b의 내적은 1*(-3) + 2*(-1) + 3*0 + 4*2 = 3 입니다.
    입출력 예 #2
    a와 b의 내적은 (-1)*1 + 0*0 + 1*(-1) = -2 입니다.

     

    입력한 코드 

    import Foundation
    func solution(_ a:[Int], _ b:[Int]) -> Int {
    return zip(a, b).map(*).reduce(0, +)
    }

     

    What i learned

    1. zip은 스위프트의 내장 함수 중 하나로, 두 개 이상의 시퀀스를 조합하여 하나의 새로운 시퀀스를 생성하는 역할을 한다. 

    2. 여러 시퀀스들을 병렬로 순회하며 요소들을 조합할 수 있다. 배열 뿐만 아니라 시퀀스라면 어떤 종류든 조합할 수 있다. 

    3. map은 각 요소를 변환하여 새로운 배열로 매핑(mapping)하는 역할을 하기 때문에 a,b 값을 곱한 결과를 내기 위해 사용했다.  

    4. reduce 메서드는 컬렉션(배열, 딕셔너리 등)의 모든 요소를 결합하여 단일 값으로 반환하는 고차 함수이다. 

     

     

    소프트웨어 아키텍처 MVC, MVVM, MVP, VIPER에 대해 추가로 알아봐야겠다. 

    외장하드 사기 전까지는 관련지식이라도 야금야금 모아야겠다. 

    빨리 xcode 깔고 싶다!!!!

    미션이어서 알고리즘 문제를 풀고 있긴한데...하도 구글링해서 복붙한다는 이야기를 많이 들어서 그런지 이게 앱개발하는데 어떤점을 훈련하는 건지 모르겠다. 매니저님한테 물어봐야겠다. 

    1.