[인생 프로그래밍] 변수 & 자료형 (Variable & Data type)

Rex·2022년 1월 12일
0

인생 프로그래밍

목록 보기
18/33

변수 & 자료형 (Variable & Data type)

지금부터 본격적인 프로그래밍을 시작하게 되는데, 그전에 한 가지 당부하고 싶은 말이 있다.

외우려고 하지 말라.

이 책에서는 외워야 할 내용이 없다. 가벼운 마음으로 읽고, 생각하고, 실행하고, 즐기면 된다. 생각하고, 실행하고, 실패하고, 성공하는 것을 반복하면서 몸과 마음에 자연스레 익숙해지도록 하길 바란다.

다시 한번 말하겠다. 익숙해져라!


변수(Variable) 란?

변수는 프로그래밍에서 가장 기본이 되는 개념이므로 정확히 이해하고 넘어가야 한다.
변수는 영어로 Variable 이다. 이는 '변할 수 있는 것' 이라는 뜻을 가지고 있다.

프로그래밍은 우리의 인생을 그대로 담을 수 있어야 한다. 이전에 언급했던 내용을 다시 한번 읽어보겠다.

프로그램은 우리 삶의 정형화된 일들을 컴퓨터로 옮겨놓은 것 뿐이다. 그것이 소프트웨어(Software)인 것이다. - '프로그래밍의 활용 예시' 의 설명 중

우리의 삶에는 여러 가지 데이터들이 존재한다. 그 모든 것들이 변수가 될 수 있다. 이 장에서는 '데이터' 와 '변수' 를 같은 단어로 봐도 무방하다.
그렇다면 Data 란 무엇일까? 이는 매우 간단하게 구분할 수 있다. '특정 영역 내에서 변할 수 있는 모든 것' 은 모두 데이터가 된다.

예를 들어 '사람' 에 대한 데이터를 구한다고 가정해 보자. 그러면 위의 문장에서 특정 영역은 '사람' 이다. 즉, 모든 사람들이 공통적으로 가지고 있으면서, 변할 수 있는 모든 것은 데이터인 것이다.
이름, 주민등록번호, 출생연도, 성별, 휴대폰번호, , 몸무게, 직업, 지역, 학교, 재산, 가족수, 결혼 여부, 오늘 소비한 칼로리, 오늘 마신 물의 양, 카드결제내역, 계좌정보 등은 모두 사람의 데이터가 될 수 있다.

이름(name) 이라는 변수에는 "홍길동", "세종", "신사임당", "이순신" 등의 값이 들어갈 수 있고, 키(height) 변수의 단위를 cm 로 사용한다면 162, 135.3, 175.8 등의 값이 들어갈 수 있다.

이번에는 '자동차' 의 데이터를 구해보겠다. 자동차라는 영역 내에서 변할 수 있는 것들은 다음과 같다.
모델명, 출시일, 제조사, 엔진, 탑승인원, 주행거리, 최대속도, 연료, 자율주행가능여부, 자동차정비내역, 차주정보 등은 모두 자동차의 데이터가 될 수 있다.

또 다른 예로, 우리의 휴대폰에 배터리 잔량(퍼센트)이 보일 것이다. 이 값은 0~100까지 수시로 변하는데, 스마트폰을 프로그래밍한 개발자가 '배터리' 라는 변수에 값을 수시로 넣어주도록 프로그래밍했기 때문에 배터리 잔량의 변화를 볼 수 있는 것이다.

이처럼 특정 영역 내에서 변할 수 있는 것들은 모두 데이터이자 변수(Variable)이다.


자료형(Data type) 이란?

변수에 대해서는 충분히 이해했을 것이다. 그런데 위에서 예시를 든 변수들의 형태는 모두 다르지 않은가? 어떤 변수는 숫자일 것이고, 어떤 변수는 문자일 것이며, 어떤 변수는 O/X 로 나뉠 것이다. 변수마다 자료의 형태가 다르다는 말이다. 이것이 바로 '자료형(Data type)' 의 개념이다. 자료형은 크게 기본 자료형참조 자료형으로 나누어 설명할 수 있다.


기본 자료형 (Primitive data type)

우리 인생의 변수들은 다음과 같은 3가지로 대부분 표현할 수 있다. 숫자, 문자, 참/거짓 이다. 이를 기본 자료형(Primitive data type) 이라고 칭한다.

1. 숫자 (number, integer, int, float 등으로 말함)

위에 나열된 내용 중 출생연도, , 몸무게, 재산, 가족수, 오늘 소비한 칼로리, 오늘 마신 물의 양 등을 숫자 자료형으로 다룰 수 있다.
숫자 자료형은 정수(integer, 줄여서 int)실수(float) 로 구분된다.
정수(integer)7, 25, 0, -3 등의 딱 떨어지는 수(자연수)를 말하고,
실수(float)3.14 등의 부동소수점(floating point)이 있는 수를 말한다.

아래의 코드를 작성하고 실행시켜 보자.

출생연도 = 2003= 173.35  # cm 단위
몸무게 = 63.79
재산 = 235  # 만 단위
가족수 = 3
오늘_소비한_칼로리 = 1572
오늘_마신_물의_양 = 1300  # ml 단위

print(출생연도)
print()
print(몸무게)

"""
이것은 여러 줄 주석.
자유롭게 코드에 대한 설명을 입력할 수 있음!
"""

변수명에 언더바(_) 를 사용한 이유는 단어를 구분하기 위함이다. 변수명에는 띄어쓰기가 들어갈 수 없기 때문에 단어를 언더바로 구분한다.

위 코드 중 # 은 주석(comments) 를 넣는 곳이다. 한 줄 주석은 # 내용 처럼 작성하고, 여러 줄 주석은 """ 내용 """ 처럼 작성할 수 있다. 주석은 프로그램 실행에 전혀 영향을 주지 않으니 원하는 대로 작성이 가능하다. 기억하고 싶은 것들, 개념, 설명, 메모 등등 많이 많이 작성하는 게 학습에 도움이 되니 적극 활용하라!

2. 문자 (string, str, char 등으로 말함)

위에 나열된 내용 중 이름, 주민등록번호, 성별, 휴대폰번호, 직업, 지역, 학교 등을 문자 자료형으로 다룰 수 있다.
문자 자료형은 단일 문자(character, 줄여서 char)문자열(string) 로 구분된다. 여기서 성별의 값을 이렇게 한 글자로 표현한다면 이건 character 라고 할 수 있고, 남성여성 이렇게 2글자 이상으로 표현한다면 string 이라고 한다. string 은 단일 문자(char)도 포함하는 개념이므로 한 글자여도 string 이라고 할 수 있다.
문자 데이터를 사용하기 위해서는 반드시 따옴표(' 또는 ")로 묶어줘야 한다. ('Hello World!' 또는 "Hello World!" 처럼)

이름 = "홍길동"
주민등록번호 = "030201-1234567"
성별 = "남"
휴대폰번호 = "010-1234-5678"
직업 = "대학생"
지역 = "서울특별시"
학교 = "인생대학교"

print(이름)
print(주민등록번호)
print(성별)

여기서 주민등록번호, 휴대폰번호 등의 중복될 수 없는 유일한 값은 숫자형 데이터로 처리하면 안 된다. 숫자로 다루면 123401234 는 같은 값이 되어버리기 때문이다.

3. 참/거짓 (boolean, bool, 발음은 "불리언" 또는 "부울" 이라고 함)

불리언은 O(참), X(거짓) 2가지 경우만을 다루는 자료형이다. 대부분의 언어에서 true / false 로 표현한다. (파이썬은 첫 글자를 대문자로 사용)
위에 나열된 내용 중 결혼 여부, 자율주행가능여부 등은 boolean 데이터로 표현할 수 있다.

결혼_여부 = False
자율주행가능여부 = True

print(결혼_여부)
print(자율주행가능여부)

예시 중 성별 데이터를 불리언으로 다룰 수도 있다. 남성과 여성 2가지만 존재하기 때문이다.


참조 자료형 (Reference data type)

우리의 인생에서 존재하는 자잘한 데이터들은 숫자, 문자, 불리언으로 거의 다 표현할 수 있다. 하지만 인생에는 그것만으로 표현할 수 없는 더 복잡한 형태의 데이터도 존재한다. 예를 들어 '사람'은 숫자, 문자, 불리언 중 어디에 해당하는가? '자동차'는 숫자, 문자, 불리언 중 어디에 해당하는가? 사람/자동차/컴퓨터/개/고양이 등의 객체(Object)는 그렇게 단순하게 표현할 수 있는 대상이 아니다.
그래서 프로그래밍에서는 복잡한 인생을 보다 정교하게 표현하기 위해 3가지 기본 자료형(Primitive data type) 을 아우르는 참조 자료형(Reference data type) 이라는 개념이 있다.

'참조 자료형'은 흔히 사용하는 단어가 아니기 때문에 쉽게 와닿지 않을 것이다. 간단히 말하면 현실의 특정한 무언가를 '추상화(Abstract)'시킨 개념 인데, 여기에서는 아주 간단하고 대표적인 2가지 예시만 들어보겠다.

1. 객체 (Object)

결론부터 말하면 위의 예시에서 계좌정보, 차주정보 를 객체(Object) 데이터로 다룰 수 있다.
바로 위에서 참조 자료형을 현실의 특정한 무언가를 '추상화(Abstract)'시킨 개념 이라고 했다. 객체(Object) 데이터는 기본 자료형(숫자, 문자, 참/거짓)을 한 곳에 모아서 현실에서 존재하는 유기적이고 복합적인 형태를 추상적으로 만들어 놓은 것이다.

사람 을 예로 들어보자. 사람 은 숫자인가, 문자인가, 참/거짓인가?
이것만으로는 표현할 수 없는 다양한 특징들이 있을 것이다. 그러나 {이름, 주민등록번호, 출생연도, 성별, 휴대폰번호, , 몸무게, 직업, 지역, 학교, 재산, 가족수, 결혼 여부, 오늘 소비한 칼로리, 오늘 마신 물의 양, 카드결제내역, 계좌정보} 등의 다양한 기본 자료형 변수들을 하나로 묶으면 사람 이라는 객체를 하나의 변수로 표현할 수 있다.

위의 예시에서 계좌정보 변수는 {계좌번호, 은행, 예금주} 데이터들의 묶음이다. 이 3가지 변수를 하나로 묶음으로서 계좌정보 변수를 표현할 수 있다. 이 형태를 파이썬 코드로 보여주면 다음과 같다.

사람 = {  # Object(객체) 데이터
    "이름": "홍길동",
    "주민등록번호": "030201-1234567",
    "출생연도": 2003,
    "성별": "남",
    "휴대폰번호": "010-1234-5678",
    "키": 173.35,
    "몸무게": 63.79,
    "직업": "대학생",
    "지역": "서울특별시",
    "학교": "인생대학교",
    "재산": 235,  # 만 단위
    "가족수": 3,
    "결혼 여부": False,
    "오늘 소비한 칼로리": 1572,
    "오늘 마신 물의 양": 1300,  # ml 단위
    "계좌정보": {  # Object(객체) 데이터
        "계좌번호": "123456789012",
        "은행": "신한",
        "예금주": "홍길동"
    },
    "카드결제내역": [  # Array(배열) 데이터
        {  # Object(객체) 데이터
            "일시": "2023-10-03 10:54:35",
            "장소": "인생 아이스크림",
            "금액": 1700
        },
        {
            "일시": "2023-10-07 19:27:03",
            "장소": "인생 편의점",
            "금액": 3500
        }
    ]
}

print(사람)
print(사람["학교"])
print(사람["계좌정보"])
print(사람["카드결제내역"])
print(사람["카드결제내역"][0])
print(사람["카드결제내역"][1])
print(사람["카드결제내역"][1]["장소"])

이것이 객체(Object)의 개념이며, 추상화(Abstract)의 개념이다.

지금은 조금 어렵게 느껴질 수도 있지만 당황하지 말고 천천히 이해해도 괜찮다. 객체에 대해서는 이 책의 조금 뒤에 객체 지향 프로그래밍 (OOP, Object-Oriented Programming) 을 설명할 때 아주 자세히 다룰 것이기 때문이다.

2. 배열 (Array)

위에서 객체를 설명할 때 카드결제내역 을 배열 코드로 작성해 놓았다. 카드결제내역 코드를 유심히 읽어보자. 배열은 프로그래밍에서 정말 많이 쓰이는, 빼려야 뺄 수가 없을 정도로 매우 자주 사용되는 데이터 형태이다. Array(배열)는 데이터가 연속적으로 구성된 형태를 말한다.

배열은 [1, 2, 3, 4, 5] 또는 ["하나", "둘", "셋"] 처럼 값이 나열된 형태로 생겼는데, 배열에는 숫자형, 문자형, 부울형, 객체 등등 모든 형태의 데이터를 다 담을 수 있다. 물론 배열 안에 다른 배열을 담는 형태도 가능하다. 배열은 Object(객체)에 포함되는 개념이다.

[1, 2, 3, 4, 5] 처럼 Array 하나만 있으면 이것은 1차원 배열(1D Array) 라고 하고,
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] 처럼 Array 안에 Array 가 중첩되어 있으면 2차원 배열(2D Array) 이라고 한다.
3D, 4D, 5D 등등 다차원 배열(nD Array) 도 당연히 가능하다.

이런 Array 형태의 변수를 가지고 프로그래밍에서 반복적인 작업을 한다든지, 다양한 로직의 구현이 가능하다.


특이한 변수 None / null

  • 파이썬: None
  • 자바스크립트 & 자바: null

None / null 은 프로그래밍에서 종종 사용하는 특이한 변수이다. None / null 은 객체도 아니고, 자료형도 아니다. None / null 이란 지금은 아무 값도 존재하지 않는 상태를 나타내는 값이다. 없을 무(無) 와 동일한 형태인 것이다. None / null 은 일단 변수를 만들고는 싶은데, 지금은 값이 없지만 나중에 값이 생길 예정이라면 먼저 None / null 값을 넣어두기도 한다. 그리고 기존에 사용하던 변수의 값이 쓸모 없어진 경우, 값을 버리기 위해 의도적으로 변수에 None / null 값을 넣는 경우도 있다.

예를 들어 어떤 지역의 학교에 학생 수를 기록하는데 'A학교' 의 학생 수는 100명이고, 'B학교' 의 학생 수는 200명, 'C학교' 의 학생 수는 아직 집계 중이라서 나중에 기록할 계획이라고 해보겠다. 그러면 'C학교' 의 학생 수 데이터에 0명을 집어넣으면 이게 올바른 값일까? 당연히 아닐 것이다. 이런 상황일 때 우리가 현실에서 보편적으로는 - 이런 식으로 표기하곤 하는데, 이런 용도로 사용하라고 만든 게 None / null 이다. 아직 입력되지 않았거나, 적용이 불가능한 값 등등 을 처리할 때 유용하게 사용할 수 있다.


JavaScript 전체 코드

JavaScript 코딩은 반드시 Python 의 모든 과정을 완전히 마치고 다시 돌아와서 해야 한다. 그 전에는 이 영역을 읽지 말고 넘어가길 바란다!

Python 과 다른 점

  • 자바스크립트는 변수를 선언할 때 let 키워드를 사용한다.
  • 한 줄의 코드가 끝나면 세미콜론(;) 을 붙여주는 것이 좋은 습관이다.
  • True/False 를 소문자로 작성한다.
  • 한 줄 주석은 // 로, 여러 줄 주석은 /* 내용 */ 로 사용한다.
    • 대부분의 프로그래밍 언어의 주석은 # 아니면 // 으로 작성하는 편이니 상식적으로 알아두면 좋을 것이다.

아래의 내용을 .js 파일에 작성 후 브라우저에서 실행해 보자. (작성 후 브라우저의 index.html 새로고침)

let 출생연도 = 2003;
let= 173.35;  // cm 단위
let 몸무게 = 63.79;
let 재산 = 235;  // 만 단위
let 가족수 = 3;
let 오늘_소비한_칼로리 = 1572;
let 오늘_마신_물의_양 = 1300;  // ml 단위

console.log(출생연도);
console.log();
console.log(몸무게);

/*
이것은 여러 줄 주석.
자유롭게 코드에 대한 설명을 입력할 수 있음!
*/

let 이름 = "홍길동";
let 주민등록번호 = "030201-1234567";
let 성별 = "남";
let 휴대폰번호 = "010-1234-5678";
let 직업 = "대학생";
let 지역 = "서울특별시";
let 학교 = "인생대학교";

console.log(이름);
console.log(주민등록번호);
console.log(성별);

let 결혼_여부 = false;
let 자율주행가능여부 = true;

console.log(결혼_여부);
console.log(자율주행가능여부);

let 사람 = {  // Object(객체) 데이터
    "이름": "홍길동",
    "주민등록번호": "030201-1234567",
    "출생연도": 2003,
    "성별": "남",
    "휴대폰번호": "010-1234-5678",
    "키": 173.35,
    "몸무게": 63.79,
    "직업": "대학생",
    "지역": "서울특별시",
    "학교": "인생대학교",
    "재산": 235,  // 만 단위
    "가족수": 3,
    "결혼 여부": false,
    "오늘 소비한 칼로리": 1572,
    "오늘 마신 물의 양": 1300,  // ml 단위
    "계좌정보": {  // Object(객체) 데이터
        "계좌번호": "123456789012",
        "은행": "신한",
        "예금주": "홍길동"
    },
    "카드결제내역": [  // Array(배열) 데이터
        {  // Object(객체) 데이터
            "일시": "2023-10-03 10:54:35",
            "장소": "인생 아이스크림",
            "금액": 1700
        },
        {
            "일시": "2023-10-07 19:27:03",
            "장소": "인생 편의점",
            "금액": 3500
        }
    ]
};

console.log(사람);
console.log(사람["학교"]);
console.log(사람["계좌정보"]);
console.log(사람["계좌정보"]["계좌번호"]);
console.log(사람.계좌정보.계좌번호);  // JavaScript 에서는 대괄호와 따옴표 대신 점(.)으로 접근할 수도 있다.
console.log(사람["카드결제내역"]);
console.log(사람["카드결제내역"][0]);
console.log(사람["카드결제내역"][1]);
console.log(사람["카드결제내역"][1]["장소"]);

정리하기

  1. 변수(Variable)
    • 변수는 변할 수 있는 값이라는 의미이며, 데이터를 다루는데 사용된다.
  2. 자료형(Data type)
    • 자료의 형태를 나타낸다. 기본 자료형과 참조 자료형으로 나뉜다.
  3. 기본 자료형 (Primitive data type)
    • 숫자, 문자, 불리언(참/거짓) 형태를 말한다.
  4. 참조 자료형 (Reference data type)
    • 기본 자료형을 하나로 묶어서 새로운 무언가를 추상화한 형태를 말한다.

생각 해보기

지금 나의 주변을 둘러보라. 다양한 물건들이 보일 것이다. 그 모든 것을 프로그래밍으로 표현한다면 어떤 자료형으로 어떻게 표현할 것인지 생각해 보자.
예를 들면 선풍기는 전원여부, 팬의날개, 회전속도 등의 변수가 있을 것이다.

"우리의 일상을 잘 관찰하라. 프로그래밍은 인생의 특정 영역을 구현한 것이라는 사실을 잊지 마라."


연습 문제

  1. 자기 자신을 하나의 객체(Object) 변수로 표현해 보자.
  2. 그 변수의 로그를 출력해 보자.
    • print(), console.log(), System.out.println()
  3. 모든 실행 결과를 코드 옆에 주석으로 작성해 보자.
  • 지금 Python 과정을 하고 있다면, Python 으로 풀어야 한다.
  • Python 과정을 모두 마치고 JavaScript 를 시작했다면, JavaScript 로 풀어야 한다.
  • JavaScript 과정을 모두 마치고 Java 를 시작했다면, Java 로 풀어야 한다.
  • 너무 어려우면 ChatGPT 에게 도움을 요청하자.

궁금증 / 질문 / 개선점이 있다면 꼭 댓글을 달아주세요. 제가 최선을 다해 도와드리겠습니다. 여러분들의 최고의 학습 친구가 되어드리겠습니다.

#인생프로그래밍 #개발자렉스 #프로그래밍 #프로그래머 #개발자 #개발입문 #프로그래밍입문서적 #코딩교육 #코딩무료교육 #파이썬 #자바스크립트 #자바 #파이썬기초 #파이썬독학 #파이썬책 #혼자공부하는파이썬 #혼공파 #자바스크립트책 #앱개발 #어플개발 #ProgrammingOfLife #programming #programmer #coding #software #developer #python #javascript #java

profile
🔥 from Abstraction to Realization

0개의 댓글