새소식

기술 습관/CS 지식

[프로그래머스] 타입스크립트로 함께하는 웹 풀 사이클 개발 9-05

  • -

1. 왜 컴파일 언어를 이해해야 하는가

프로그래밍의 기본 원리

  • 모든 프로그래밍 언어의 동작원리는 거의 동일
  • JS같(인터프리터 언어)은 스크립트 언어로는 동작 원리를 이해하기 힘든 구조
  • C언어(컴파일 언어)의 변수, 데이터타입, 배열, 포인터 등의 동작 원리들은 JS 언어 동작의 근간을 이룬다.
  • 타입을 변수와 함수에 기본으로 사용해보면 타입스크립트를 더 쉽게 이해.

프로그래밍의 개념

  • 개발자가 소프트웨어를 만드는 과정

개발의 3단계 과정

  1. 구상
    • 추상적
  2. 설계
    • 머릿 속 추상적인 내용을 문서화 = 구체화
  3. 구현

프로그래밍 언어란?

  • 언어란 사람과 사람간의 통신 수단
  • 컴퓨터 언어란 사람과 컴퓨터간의 통신 수단 ( 컴퓨터끼리의 통신 수단은 기계어)

프로그래밍 과정

내 생애 최초 C언어로 Hello World 출력하기

Online C Compiler - online editor

C언어에서의 함수 형태

int main (void) {
    // 함수의 내용
}
  • C언어의 대표적 출력 함수
printf("Hello World\n");
  • C언어는 엄격한 문법
    • 문장의 끝 세미콜론 작성 → 컴파일러가 세미콜론 단위로 문장을 해석하기 때문
    • 리턴 값 return 0; 은 함수의 수행이 끝남을 의미. 리턴값 0 자체에는 아무런 의미가 없다.

주석문을 사용하자

사용하는 이유

  • 어떤 단어나 문장에 대한 구체적인 부연 설명
  • 프로그래밍에서 주석은 필수
// 짧은 주석문
/*
    긴 주석문
*/

/*
    Date : 2024.04.26.
    Author : Jihee Eom
    Remark : "Hello World to the screen output"
*/

변수와 자료형

변수란 무엇인가

  • 변경 가능한 수
  • 어떤 값이 들어갈 지 예측할 수 없다.
  • JS는 변수에 입력된 값을 확인한 뒤 해당 값의 메모리를 결정
    • 기본 4바이트 차지

변수를 사용하는 이유

  • 메모리 상 올라가있는 수많은 데이터를 어떻게 구분할 수 있는가.
  • 메모리의 주소값(유니크값)을 사람이 일일히 다 기억할 수 있는가

  • 주소값 기억하기보다 의미있는 이름을 기억하는 것이 쉽다.
  • 우리가 사용할 메모리 공간에 이름을 부여하는 것이 변수.
  • 친구의 집을 집주소로 기억하지 않고 철수네로 기억하는 원

  • Lucky 가 변수

변수와 자료형

  • 메모리 영역 : 크게 코드 영역 / 스택 영역 / 힙 영역 / 데이터 영역 총 4가지 구분

  • 생성되는 객체는 대부분 힙 영역에서 생성..

콜스택 메모리의 적용

  • 매개변수도 지역변수이다.
  • 우리가 지금껏 사용한 지역변수 및 매개변수들은 모두 스택 메모리를 사용
  • 이러한 지역변수 및 매개변수는 다음과 같은 구조로 저장된다.
    • 스택이므로 소멸 시 d>c>b>a 순서대로 소멸
  • 동적메모리 할당 시 힙 영역 사용 (객체지향에서 new 연산자 사용시 전부 힙 영역 메모리 사용..)

콜스택, 메모리 힙의 데이터 저장 구조

  • 원시 타입 데이터
    • 변수 a에는 10이 저장된 콜스택 메모리의 주소값이 저장
    • 변수 식별자 a 자체는 콜스택 상의 실행 컨텍스트의 렉시컬 환경이라는 곳에 저장된다.
  • 참조 타입 데이터
    • 메모리 힙의 주소값이 저장된 콜스택의 주소값이 각각 b,c,d에 저장. 즉 참조 타입의 데이터 자체는 힙메모리에 생성되어있다. (직접 갖고있는 것이 아닌 간접적으로 주소값만을 갖고있음)
  • 원시타입 변수 생성
    • int a = 10; int b = 20;
    • 원시타입 데이터 값은 콜스택에 저장, 데이터 값이 저장된 콜스택의 주소값은 변수 a, b에 각각 저장
  • 원시 타입 재할당
    • int a = 20;
    • 변수 a에 20을 재할당 시 본인의 메모리에 있는 값을 변경하는 것이 아닌 기존 20이 저장된 주소값으로 교체.
    • a에 저장된 주소값은 20을 가리키고 있던 b의 주소값과 동일해진다.
    • 없는 값으로 재할당 시 새로운 메모리에 값을 할당하여 주소값을 재할
    • 주소값을 저장하는 변수를 변수를 포인터 변수라 하는데 이러한 구조가 포인터 구조이다.
  • 가비지 컬렉터
    • 더이상 참조되지 않는 데이터는 가비지 컬렉터에 의해 적절한 시점에 메모리에서 해제.

자료형이란

  • 선언한 변수가 얼만큼의 메모리 공간을 할당할 것인지 결정
  • 음식의 종류에 따라 그릇의 용도가 다른 것과 같은 원리

정수형

  • 정수란 0을 포함하는 부호가 있는 수

실수형

  • 소수점 이하를 가지는 수. 대표적으로 float, double 이 있다. 과거에는 float를 많이 사용했으나 현재에는 double을 많이 사용

문자형

  • 숫자만 인식하는 컴퓨터가 문자를 표현하기 위해 특정 숫자와 문자를 대응하여 사용
  • 아스키 코드 표준에 의거
  • A = 65
  • b = 98
  • 1 = 49

상수에 관하여

상수란 무엇인가

  • 변하지 않는 수
  • 메모리공간에 수가 존재하지만 그 값을 변경할 수 없다.
  • const 사용시 이후에 값을 변경할 수 없다. 따라서 초기화 시 값을 정의해주어야하며 하지 않을 경우 쓰레기 값이 저장됨(C언어)

사용자로부터 데이터 입력

scanf

  • 사용자로부터 데이터를 입력받고자 할 때 사용하는 함수
  • 데이터 입력시의 구조를 생각해보자.
  • & : 주소연산자
  • 키보드로 입력한 값은 어디로 전달되는 걸까?
    • 키보드 하드웨어가 연결된 곳은 운영체제(OS) → 입력한 키값은 운영체제의 시스템 큐에 전달 → 어떻게 꺼낼 것인가 (=서울에서 김서방 찾는 셈) → 김서방의 주소를 알면 꺼낼 수 있다. 그래서 int input의 주소를 구하는 연산자인 &을 붙여서 scanf 사용
 

평가문제

  • 사용자로부터 1개의 정수를 입력 받아 입력 받은 수의 5를 곱한 결과를 출력하세요
  • 사용자로부터 알파벳 문자를 하나 입력 받고 이에 해당하는 숫자를 출력하세요

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.