수행 내용

  • 모둠 스크럼
  • CS 기초지식 활동학습
  • 태태 PR 코멘트에 대한 개별 답변 (w/ Kio)
  • CS 기초 지식 수강 (야곰표 컴퓨터 기초 지식 1, 모두를 위한 컴퓨터 과학 (CS50) 1 ~ 2)
  • 숫자야구게임 Step2 기능 구현 및 push

학습 내용

야곰표 컴퓨터 기초 지식 1

프로그램: 컴퓨터에 의해 실행될 일련의 기능 모음

컴퓨터 역사

숫자 계산을 위한 계산기 용도로 먼저 발달

  • 최초의 다용도 디지털 컴퓨터 - ENIAC
  • 최초의 프로그램 내장방식 컴퓨터 - EDSAC
  • 진공관 - 제 1 세대 컴퓨터
  • 트랜지스터 - 제 2 세대 컴퓨터
  • 집적 회로 (IC) - 제 3세대 컴퓨터 ~ 현재

컴퓨터의 구성

소프트웨어 프로그래밍을 잘 하려면 하드웨어도 잘 알고 있는 것이 좋음.

  • 하드웨어: 물리적으로 컴퓨터를 구성하는 요소
    • 입력 장치: 키보드, 마우스, 터치스크린, 태블릿, 마이크, 조이스틱, 스캐너, ...
    • 출력 장치: 스피커, 모니터, 프린터, 헤드폰, ...
    • 기억 장치: 주기억장치(RAM, ROM), 보조기억장치 (HDD, SSD)
    • 연산 / 제어 장치: 중앙처리장치 (CPU)
  • 소프트웨어: 명령어의 집합
    • 시스템 소프트웨어: 운영체제 (OS), 로더 (Loader), 장치 드라이버 (Device Driver), 컴파일러 (Compiler), 어셈블러 (Assembler), 링커 (Linker), 유틸리티 (Utility)
    • 응용 소프트웨어 (Application): 워드프로세서, 웹브라우저, 스프레드시트, 게임, OS 상에서 실행되는 모든 프로그램

컴퓨터의 구조

하버드 구조 (Harvard Architecture)

CPU 하나와 물리적으로 분리된 두 개의 메모리(프로그램 메모리, 데이터 메모리)로 구성.

  • 장점: 속도가 빠름
  • 단점: 구성에 비용이 많이 들며 복잡, 고장율이 높음

폰 노이만 구조 (von Neumann Architecture)

프로그램 메모리와 데이터 메모리가 구분되어있지 않고 하나의 버스를 가지고 있는 구조 (CPU, 메모리 각각 하나로 구성)

  • 장점:
  • 단점: 메모리 속박 문제 및 버스 병목 문제를 가짐

최신 컴퓨터 아키텍처

하버드 구조와 폰 노이만 구조가 결합된 모습

CPU 캐시 메모리 형상에 관여

  • CPU 내부: 하버드 구조
  • CPU 외부: 폰 노이만 구조

32 bit (x86) / 64 bit (x64)

  • 한 번에 처리하는 bit의 개수가 32 / 64 개라는 의미

IPv4 (32 bit) / IPv6 (128 bit)

  • IPv4는 이미 전 세계에 보급된 기기가 할당할 수 있는 IP 총량을 초과하였음
  • 그럼에도 비용 문제로 인해 IPv4를 지원하는 기기를 완전히 교체하지 못해 사용 중
  • IPv6는 현재 시점에서 전 세계가 사용하고도 많이 남을만큼 많은 수를 할당할 수 있음
  • IPv4 (99.48.227.227) / IPv6 (2001:0000:0000:25de:0000:0000:0000:cade)

데이터의 표현방식

컴퓨터는 정수, 실수, 문자 표기에 이진법을 사용함.

  • 정수: 2, 8, 10, 16 진수 등
  • 실수: IEEE 754에 의한 변환. 2진수를 통해 변환한 값이기 때문에 미세한 오차가 있을 수 있으며, 우주항공 분야와 같은 정밀 분야에서는 이에 따른 오차도 고려해야 함.
  • 문자: 숫자와 매핑되는 문자 표 (규칙)에 따라 변환. ASCII, Unicode, UTF-8, EUC-KR, CP 949 등. 적용되는 규칙을 변경하면 이해할 수 없는 형태가 됨.
  • 인코딩: 데이터를 코드화하는 작업.
    예를 들어, We와 같은 문자열을 01010111 01100101 (ASCII), 0000000001010111 0000000001100101 (Unicode)로 변환
  • 디코딩: 코드화된 데이터를 이해할 수 있는 형태로 푸는 작업

컴퓨터의 연산

컴퓨터는 덧셈밖에 하지 못함 (계수기)

논리연산

  • AND(&): 논리곱 (모두 1일 때 1)
  • OR(|): 논리합 (하나라도 1이라면 1)
  • NOT(~): 반전
  • XOR(^): 배타적 논리합 (같으면 0 다르면 1), 덧셈에 활용 (2진수는 1+1 = 0 (자리수 올라감))
  • NOR: 부정 논리합
  • NAND: 부정 논리합

비트논리연산 vs 부울논리연산

  • 비트논리연산: 각 비트 별 0과 1 계산 ( 0110 & 1101 = 0100, 0110 && 1101 = true )
  • 부울논리연산: 참, 거짓 판별 ( true && false = false, true & false = false )

모두를 위한 컴퓨터 과학 (CS50 2019) 컴퓨팅 사고 1~2강 - David J. Malan

컴퓨터 과학

문제를 해결하는 과정, 어떠한 입력이 있을 때 그로부터 어떠한 출력이 나온다면 그 문제에 대한 답을 찾는 것

정보의 표현 방법

컴퓨터는 입출력을 표현하기 위한 방식으로 2진법을 사용

단위

  • bit: binary digit (0 or 1)
  • 1 byte = 8 bit

컴퓨터 내부에는 트랜지스터라는 작은 스위치가 있고, 이를 물리적으로 이용해서 정보를 표현하고 값을 저장한다.
문자를 나타내기 위해서는 어떤 문자가 어떤 숫자에 대응하는지에 대한 약속만하면 된다.
ASCII 표준은 65 (1000001)가 A를 나타낸다고 약속했고, 오늘날 Unicode는 기쁨의 눈물을 나타내기 위해 128,514 (11111011000000010)에 해당하는 숫자를 사용한다.
그림이나 영상, 음악에서도 동일한 개념이 사용되어 그림의 픽셀을 나타낼 때 RGB 각 색의 비율을 조합하여 색을 나타내는 방식으로 작동한다.

문제점 / 고민한 점

변수, 함수명에 대한 고민

Step 2를 진행하며 Step 1 보다 명확한 변수, 함수명을 지으려 노력했다. 공식문서에 따르면 축약어를 쓰거나 생략하는 등 애매하게 작성하는 것보다 길더라도 명확하게 작성하는 것이 옳다고 하여 반영한 내용인데, 기존에 비해 너무 길어지는 문제가 있었다. 그리고 함수 내부에서 임시로 사용되거나 readLine()으로 입력받은 내용에 대한 옵셔널 바인딩, 자료형 변환을 위해 임시로 사용되는 변수의 이름을 짓는데도 꽤 애를 먹었다. 문법 활용 방식을 포함하여 아직까지 이렇게 하는 것이 맞는지 모르지만, 앞으로 모둠원, 리뷰어들의 의견을 받아 개선해 나갈 것이다.

의사코드 (Pseudo Code) 활용

TIL에 정리하지는 못했지만 David J. Malan의 컴퓨터 과학 알고리즘 강의에 의사코드를 활용하는 내용을 설명한다. 지금까지는 생각을 코드로 구현하기 바빴고, 어떻게 해야할지 몰라 답답하면 도식을 그리는 방법을 사용했는데, 의사코드를 활용하여 모둠원과 소통한다면 더 효율적인 알고리즘으로 문제를 해결할 수 있겠다는 생각을 하였다.

해결 방법

  • 아직 답을 알지는 못하지만 최대한 처음 코드를 읽는 사람이 이해할 수 있게끔 길더라도 명확한 명명을 하려 노력한다.
  • 모둠원과 문제 해결을 위한 코드 작성 전 의사코드를 서로 짜서 비교한 후 코드 작성 단계로 진입한다.

참고자료

profile
합리적인 해법 찾기를 좋아합니다.

0개의 댓글