[Algorithm] 알고리즘 & 데이터 구조를 공부하는 이유?
- ETC../개념
- 2020. 8. 25.
728x90
알고리즘 &. 데이터 구조을 공부하는 이유?
데이터 구조의 정의
- 프로그래밍에 있어 효율적이며, 확장 가능하고 유지 보수성 높은 시스템을 만들기 위한 주요 요소 중 하나
- 시스템에서 데이터의 공유, 유지, 정렬, 검색 등 데이터의 활용을 위한 데이터의 체계화 방법
추가 내용
- 영국의 컴퓨터 과학자 David Wheeler 가 정의한 데이터 구조에서 “컴퓨터 과학의 모든 문제는 새로운 차원에서의 접근 방식으로 해결될 수 있으며..” 라는 구절이 있다.
작은 애플리케이션은 물론, 모바일 애플리케이션, 그리고 그 기업을 위한 대규모 웹 어플리케이션 등 어떤 유형의 시스템을 개발하더라도 그 모든 애플리케이션의 토대는 결국 데이터로 귀결된다.
- 애플리케이션 개발에는 놀랄만한 성능의 효율성을 제공하는 프레임워크와 라이브러리에서 가져온 다양한 API 가 사용되는데 이들 API야 말로 새로운 차원에서의 접근 방식이며 이들은 결국 데이터 구조와 알고리즘의 활용을 돕는 중요한 도구이자 구현 방법인 것.
정리
- 모든 문제를 해결하는 새로운 차원의 접근방식이 데이터구조와 알고리즘을 활용하는 것이고 이것으로 컴퓨터 과학의 모든 문제를 해결할 수 있다.
데이터 구조의 구현 방법
- ‘데이터 추상화’ 는 데이터가 지닌 복잡성을 관리하기 위한 기술이다. 데이터 구조를 디자인 할 때 필히 이 ‘추상화 기법’ 을 사용한다.
- ‘추상화 기법’이란 개발자가 애플리케이션을 만들 때 내부의 상세한 구현방식을 몰라도 되도록 해서 개발에 집중하게 하기 위한 것.
- 이렇게 내부의 복잡성을 드러내지 않음 으로써 개발자는 알고리즘과 데이터 구조가 제공하는 인터페이스 활용에 더욱 집중할 수 있다.
- 결국 내부의 복잡한 구현만 해 놓으면 해당 데이터 구조의 인터페이스만 활용하면 된다는 말인데 그럼 굳이 복잡한걸 왜 배우냐는 의문이 들 수 있다.
복잡한 데이터 구조를 배우는 본질적 이유
- 데이터 구조의 가장 근원적인 형태는 배열과 포인터이다.
다른 것들은 모두 여기서 파생된다고 볼 수 있다
(by Swift Datastructrue and algorithms)
스위프트에서 제공하는 기본적인 primitive datatype은 ??
1. Value Type
2. Reference Type
- value type
- 오직 하나의 소유 객체만을 지니며, 해당 타입의 데이터가 변수 또는 상수에 할당됐을 때 혹은 함수에 전달됐을 때, 지니고 있던 값을 복사한다.
- 밸류 타입은 구조체와 열거형이 있으며, 스위프트의 모든 기본 데이터 타입은 가본적으로 구조체다.
- (다른 언어에서 원천 데이터 타입으로 제공되는 int, double, string 등은 스위프트에서는 ‘스위프트 표준 라이브러리’ 에 정의된 구조체이다. )
- 타 언어의 기본 데이터 타입들이 value type인 구조체로 정의되 있어서 int를 사용하려면 Int 구조체를 사용하는 것.
- reference type
- 값을 복사하지 않고 공유한다. 변수나 할당하거나 함수에 전달할 때 값을 복사해서 제공하는 대신, 인스턴스의 참조값을 전달한다.
- 참조값을 전달한다는게 어려울 것 같은데 내가 정의한 값을 전달하는게 아니라, 메모리 주소를 전달한다는 것이다.(c 언어의 포인터 역할)
- 값을 복사하지 않고 공유한다. 변수나 할당하거나 함수에 전달할 때 값을 복사해서 제공하는 대신, 인스턴스의 참조값을 전달한다.
작성해야 할 코드의 90% 가 이미 라이브러리와 같은 형태로 구현되어 있는데 데이터 구조를 배워야 하는 이유?
- 데이터 구조에 대한 명확한 이해 없이는 다양한 데이터 타입의 장, 단점을 알 수 없고, 어떤 상황에서 어떤 데이터 구조를 사용해야 할지 판단하기 어려우며, 결국 이것이 프로그램 구현할 때 문제가 되기 때문.
- 외우는게 아니라 그 원리를 완전히 이해하고 있어야 한다.
- 수학에서 순열과 조합을 배울때 팩토리얼이 n! 이고 1~ n까지 곱하는 수이다. 라는걸 외워서 알고 있으면 여행을 갈건데 4개의 티셔츠중에 2개의 티셔츠만 선택할 수 있는 상횡인데 그러면 티셔츠를 선택할 수 있는 경우의 수는 뭘까? 라는 의문이 생긴다면 팩토리얼그냥 외워서 쓰면 그게 어떤 상황에 필요한 것이고 어떻게 활용할 것인지 모르기 때문.
- 이렇듯 우리는 데이터구조와 알고리즘을 명확하게 이해하지 않고 있으면 다양한 문제들을 만났을 때 문제를 해결할 수 있는 적절한 방법을 찾을 수 없음.
결론
데이터 구조와 알고리즘 지식은, 모두가 해결 불가능하다고 말하는 문제에서 패턴과 실마리를 찾을 수 있게 해 주고, 일상적인 개발 업무에서 즉각적으로 활용할 수 있는 다양한 해법을 떠올릴 수 있게 해준다.
출처: https://the-brain-of-sic2.tistory.com/36?category=786387 [씩이 머릿속]
728x90