Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

마당 03 코딩별 안내서 - 컴퓨터 공학 편 1 #313

Closed
Tracked by #306
jongfeel opened this issue Jan 17, 2023 · 0 comments
Closed
Tracked by #306

마당 03 코딩별 안내서 - 컴퓨터 공학 편 1 #313

jongfeel opened this issue Jan 17, 2023 · 0 comments
Assignees
Labels

Comments

@jongfeel
Copy link
Owner

jongfeel commented Jan 17, 2023

마당 03 코딩별 안내서 - 컴퓨터 공학 편 1

에피소드 22 자료구조와 알고리즘은 필수라고?

개발자가 되고 싶다면 자료구조와 알고리즘을 공부하고, 자신의 코드에 적용할 수 있어야 함.
다만, 코딩 공부를 시작할 때부터 할 필요는 없고, 초기에는 일단 코드를 실행하는 것을 목표로 삼자.

코드를 효율적으로 만들기 위해!

코딩을 다 하고 버그가 없다면 그 다음 단계로 코드를 정리하면서 효율적인 코드, 속도가 빠른 코드를 고민하게 된다.

알고리즘이란? 컴퓨터에게 내리는 지시 사항을 나열한 것

알고리즘은 컴퓨터에게 내리는 지시 사항을 나열한 것.

다양한 컴퓨터 알고리즘

패스파인더(pathfinder) 알고리즘: 지도 앱에서 목적지까지 최대한 빨리 가는 방법을 알려주는 기능을 구현하기 위해 사용
압축(compression) 알고리즘: 이미지를 최대한 덜 손상하면서도 용량을 효율적으로 줄일 수 있는 알고리즘

데이터를 효율적으로 보관하고 찾기 위한 자료구조

자료구조의 자료는 데이터다. 데이터는 원유(oil) 같은 존재다.
세상의 무료 서비스들은 그 대가로 개인 정보 데이터를 수집하는데,
그걸 비유로 해서 원유 같은 것이라고 생각, 뭔가를 하려면 필요한 연료같은 존재이니까

개발자라면 반드시 다루는 데이터, 그냥 보관할 수는 없어!

데이터가 마구잡이로 보관되어 있다면 데이터를 찾는 데 시간이 걸리고 비효율적이다.
이런 필요성 때문에 공부해야 하는 것이 바로 자료구조이다.

자료구조도 여러 방식이 있다.

  • 데이터를 작은 것 부터 큰 순서로 정리
  • 이름표를 붙여서 정리
  • 데이터가 들어오는 순서로 정리

자료구조의 방식이 다양한 이유는 프로그램의 목적이 다양하기 때문이다.
검색, 시간, 크기 등 데이터의 사용 목적에 따라 자료구조가 다르므로 맞는 목적의 자료구조를 써야 한다.

에피소드 23 배열이 뭐죠?

시간 복잡도는 작업 속도!

시간 복잡도는 프로그램의 작업 속도가 얼마나 빠른지 측정하는 방법
작업이 얼마나 많은 단계를 거치는지를 측정

메모리 간단 설명

컴퓨터의 기억 공간

휘발성 메모리, 비휘발성 메모리
  • 비휘발성 메모리: 컴퓨터의 하드 드라이브
  • 휘발성 메모리: 램(RAM)
램이 속도가 빠른 이유?

램은 주소지가 적힌 박스가 많이 있는 창고 같은 것이고
특정 주소를 바로 접근해서 데이터를 가져오는 방식이라서 빠른 것

램과 함께 생각하는 배열

램의 관점에서 배열 바라보기

  • 특징 1. 배열을 읽는 방법과 속도: 배열의 인덱스로 접근하므로 매우 빠르다
  • 특징 2. 배열을 검색하는 원리와 속도: 배열의 값으로 찾아야 하므로 일일이 찾는 방법으로 진행, 읽기 보다 시간이 많이 필요
  • 특징 3. 배열에 데이터를 삽입하는 원리와 속도
    • 맨 마지막에 추가: 배열의 길이가 얼마인지를 알고 있으므로 시작점 부터 해서 뒤로 가서 추가
    • 중간에 추가: 중간 부터 마지막 까지 데이터를 한칸 씩 옮기고 중간에 추가
    • 배열에 데이터가 꽉 차 있을 때: 더 큰 배열을 새로 만들고, 이전 배열을 복사해서 옮긴 다음 새 데이터를 추가
  • 특징 4. 배열에서 데이터를 삭제하는 원리와 속도: 마지막 데이터가 제일 쉽고, 맨 앞에 데이터를 삭제하기가 가장 어렵다.

에피소드 24 알고리즘의 속도는 어떻게 표현할까?

시간 복잡도를 이야기할 때는 알고리즘으로 작업을 완료할 때까지 걸리는 절차 수 N으로 O(N), O(log N)과 같이 표현 => 빅오(Big-o) 표기법

알고리즘의 속도를 표현하는 방법은? Big-O!

선형 검색 알고리즘은 배열의 길이가 N일 때 총 N번 검색하는 과정이 필요하다
보다는
선형 검색 알고리즘의 시간 복잡도는 O(N)이다
라고 말하는게 더 간단하다.

  • 시간 복잡도를 표현하는 Big-O 표기법
    • 배열의 첫 번째 데이터를 출력: O(1)
    • 배열의 첫 번째 데이터를 두 번 출력: O(1), 이유는? Big-O는 실행 단계에 영향을 주는 요소만 보기 때문
    • 배열의 모든 데이터를 출력: O(N)
    • 배열의 모든 데이터를 중첩 반복문으로 출력: O(N * N)

에피소드 25 검색 알고리즘이 뭐죠?

선형 검색 알고리즘 알아보기

맨 처음부터 검색을 시작해서 찾는 방법, y = x의 형태

이진 검색 알고리즘 알아보기

이진 검색 알고리즘은 데이터의 정렬이 끝난 배열에서만 사용할 수 있다.
중앙값을 기준으로 왼쪽, 오른쪽 점프 점프 해 가면서 찾는다.
이진 검색에서 속도가 빠른 이유는 단계마다 배열의 절반을 제외할 수 있기 때문, y = log x의 형태

에피소드 26 정렬 알고리즘이 뭐죠?

실생활에서 가장 상상하기 쉬운 정렬 알고리즘 3가지

  • 왼쪽, 오른쪽만 보면서 정렬하는 버블정렬
  • 하나를 콕 집어 가며 정렬하는 선택정렬
  • 앞에 있는 데이터를 보면서 배치하는 삽입정렬

시간 복잡도는 같은데 왜 속도 차이가 날까?

버블, 선택, 삽입 정렬 순서대로 속도가 빠름
시간 복잡도를 단순히 측정했을 때 그렇다는 뜻이고 초기 데이터 정렬 상태에 따라 처리 속도가 달리진다.

IT 쿠키 상식, 개발자의 책상 위 필수 아이템

  • 컴퓨터, 키보드, 책상, 의자
    • 맥북 프로
    • 기계식 키보드
  • 모니터, 캠
    • 큰 모니터 + 모니터 암
    • 강의 촬영 및 미팅용
  • 노트, 스탠딩 데스크
    • 종이 노트 필기
    • 높이 조절 데스크

에피소드 27 스택, 큐가 뭐죠?

규칙 개념의 자료구조

배열에 큐의 규칙을 부여하면 그 배열은 큐라고 할 수 있다.
추상 자료 구조라고 함 (abstract data type, ADT)

팬케이크로 생각해 보는 스택

스택의 규칙

  • 규칙 1: 위에서 데이터를 쌓는다
  • 규칙 2: 위에서부터 데이터를 뺀다

이런 방식을 LIFO(last in, first out)의 줄임말.
스택은 뭘로 구현해도 상관이 없다. 위의 규칙을 지키기만 하면 됨

버스 정류장으로 생각해 보는 큐

큐의 규칙

  • 규칙 1: 위로 데이터를 쌓는다
  • 규칙 2: 아래에서부터 데이터를 뺀다.

실제 Queue up, 줄을 서다라는 뜻이 있고 이것을 FIFO(first in, first out)이라고 함
큐도 스택과 마찬가지로 뭘로 구현해도 상관이 없다. 규칙만 지키면 된다.

스택과 큐는 대체 언제 사용할까?

  • 웹 브라우저의 뒤로 가기 버튼은 스택이다
  • 되돌리기 단축키도 스택이다
  • 쇼핑몰 주문 처리 시스템은 큐다

에피소드 28 해시 테이블이 뭐죠?

해시 테이블 콘셉트 이해하기

해시 테이블은 키와 값을 짝지어 모은 것으로 데이ㅓ를 더 쉽게 정리할 수 있게 해준다.

배열 검색과 해시 테이블 검색의 시간 복잡도 차이는?

선형 검색의 시간 복잡도는 O(N)
해시테이블은 O(1)

해시 테이블을 조금 더 창의적으로 활용하기

배열로 되어 있는 값들을 해시 테이블로 재구성하면 단번에 알아낼 수 있다.

해시 테이블을 조금 더 자세히 알아보고 싶어요

배열에서 인덱스를 사용하는 것과 다른 구조가 아닌데 더 빠른 이유는
해시 테이블에 해시 함수라는 것이 세트로 있기 때문이다

해시 테이블 속도의 비결, 해시 함수

해시 함수는 키를 인덱스로 바꿔주는 역할을 한다.
예시로 키로 사용하는 문자열 값의 길이가 해시 함수의 인덱스로 반환하도록 했다면
"피자" 라는 키 값으로 가격을 찾을 때 길이 값 2를 얻고 2를 인덱스로 하는 값 12000을 찾는다.

문제 발생! 글자 수가 같으면 어떻게 해요?

만약 "치킨"도 해시 함수를 거치면 인덱스 값 2가 되는데 (해시 충돌hash collision) 가격을 다르게 하고 싶다면
같은 인덱스 값 2에 해당하는 배열을 만들어서 "치킨"을 찾는 형태

에피소드 29 개발자 필수 소양, 클린 코드!

클린 코드를 위한 5가지 꿀팁

클린 코드는 설명이 필요 없는 코드를 뜻한다.
코드를 읽기만 해도 무슨 일을 하는지, 어떤 것을 의미하는지 물어볼 필요도 없이 이해되는 코드.

  • 클린 코드 백서 1. 의미 있는 변수, 함수의 이름을 적절히 사용하라
  • 클린 코드 백서 2. 함수 이름은 가급적 동사로 지어라
  • 클린 코드 백서 3. 매개 변수는너무 많이 쓰지 마라
  • 클린 코드 백서 4. 불린값을 인자로 보내지 마라
  • 클린 코드 백서 5. 축약어를 쓰지 마라

에피소드 30 코로나가 준 레거시 시스템의 교훈

코로나로 인해 실업자가 많이 생겨났는데, 코볼 개발자도 그 중 하나였고
실업 급여 신청 시스템이 코볼로 구현되어 있었기 때문에 코볼 개발자를 찾는 채용 공고가 올라옴

코볼, 넌 누구니?

1959년에 탄생한 언어
코볼 언어를 썼던 사람은 이미 은퇴를 했고, 그 언어를 쓰는 사람이 적으므로
레거시 시스템이 우리 생활에 영향을 끼친 사례

  • 지금의 파이썬 같았던 코볼: common business oriented language로 영어랑 비슷한 문법
  • 코볼의 문제점, 커뮤니티가 너무 적다!: 코볼을 쓰는 사람은 매우 적고 평균 연령이 50세 이상이다

프로그램은 책임 있게 만들어야 한다

자신이 만든 프로그램에 완벽하게 책임을 져야 한다.
프로그램은 사람들에게 영향을 끼치게 되고, 대충 만들게 되면 나중에 큰 사건이 터지면 대처가 어렵다

프로그램은 끊임없이 관리해야 한다

시스템은 한번 구축하면 끝이 아니고 꾸준히 관리해야 한다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
No open projects
Development

No branches or pull requests

1 participant