codeit

컴퓨터 개론

프로그래밍 시장은 계속 커지고 있다. 하지만 사실 현업에서는 뛰어난 개발자를 없어서 못 구한다는 것. 프로그래밍의 세계는 광범위하기 때문에, 올바른 방향을 갖고 효과적으로 공부하는 것이 매우 중요하다. 코드잇의 컴퓨터 개론을 통해 프로그래밍 언어, 프로그래머, 프로그램에 대해 올바른 이해를 갖고, 나만의 커리어 로드맵을 만들어 보자.

💡Infomation: 컴퓨터 개론 학습은 하루 1시간 학습을 기준으로 약 12일이 소요됩니다.

프로그래밍 기본 개념

컴퓨터의 세계를 이해하려면 프로그래밍을 느껴봐야 하지 않겠는가? 파이썬을 사용하면 프로그래밍을 가장 심플하게 배워볼 수 있다.

코멘트

Python 에서는 # 뒤에 메시지를 적으면 코멘트로 작성된다. 주석이라고도 부른다. 코멘트는 실제 프로그램이 실행될 때에는 무시된다. 아래 코드를 실행했을 때 Hello world! 만 출력되는 것을 볼 수 있다.

1
2
# 코멘트
print("Hello world!")

코멘트는 코딩 중 작성하는 메모라고 생각하면 된다. 코멘트를 사용하는 이유는 다음과 같은 이유들이 있다.

  • 복잡한 코드 설명
  • 작성중인 부분 표시
  • 다른 개발자와의 소통

코멘트를 작성하는 방법은 # 뒤에 한 칸을 띄우고 메시지를 입력하면 된다. 뒤에 한 칸을 띄우지 않아도 문제는 없지만, PEP8에서 한 칸 띄우는 것을 권장하기 때문에 별 다른 이유가 없다면 따르도록 하자. 코멘트 작성에는 주의할 점이 있는데, 어떤 줄이던간에 # 이 시작하는 부분부터 코멘트로 인식 된다는 점이다. 아래 코드에서 두 번째 코멘트 앞의 코드는 # 이전에 있기 때문에 코드로 인식되고 # 이후 부분만 코멘트로 인식된다. 반대로 세 번째 코멘트 뒤의 print문의 경우 # 과 같은 줄이면서 # 뒤쪽에 위치하기 때문에 코드가 아닌 코멘트로 인식된다.

1
2
3
# 코멘트
print("Hello world!") # 두 번째 코멘트
# 세 번째 코멘트 print("Bye world!")

아직까지는 코멘트의 필요성을 느끼지 못할 수 있다. 하지만 앞으로 코딩을 하면서 쓸 일이 점점 많아질 것이고, 특히 프로그램이 커질수록 더 중요하게 느껴질 것이다. 앞으로의 내용에서도 중간중간 코멘트가 등장할 것이기 때문에 잘 기억해두자.


자료형 개요

프로그래밍을 할 때 컴퓨터는 복잡한 계산기라고 생각할 수 있다. 프로그램을 쓴다는 것은 계산하고 싶은 수식들을 컴퓨터에게 알려주는 것 이라고 생각하면 된다. 일반적인 계산기에서는 우리가 쓸 수 있는 값이 숫자에 한정되어 있지만 Python 으로 프로그래밍을 할 때에는 다양한 종류의 값들을 사용할 수 있다. 여기서 값들의 다양한 종류들을 자료형(Data Type) 이라고 부른다.

자료형에는 당연하게 숫자가 있고, 숫자에는 정수(Integer)소수(Floating Point) 두 가지 종류가 있다. 정수는 -1, -2, -3 같은 음의 정수부터 0 은 물론 1, 2, 3 같이 0보다 큰 수를 포함한다. 소수는 3.14, -7.3, 2.0 과 같이 정수부분과 소수부분으로 이루어진 수들을 이야기 한다. 일반적인 계산기에서는 정수 2 와 소수 2.0 을 똑같이 취급하는데, Python 에서는 두 수가 서로 다른 타입이기 때문에 약간의 차이가 있다.

다른 자료형으로는 문자열(String)이 있다. "Hello", "World", "2" 와 같이 따옴표 안에 있는 것들은 Python 에서 문자열로 분류되며 키보드로 쓸 수 있는 문자들을 표현하는 자료형이다. 문자를 계산한다는 개념이 조금 생소할 수 있다. 간단히 예를 들면 아래처럼 두 문자열을 더하면 하나의 문자열이 된다.

1
"Hello" + "World" -> "HelloWorld"

위에서 예시로 정수형 2 와 소수 2.0, 문자열 "2" 를 사용한 것은 이들이 모두 다른 타입이라는 것을 강조하기 위함이었다. 이해를 위해 아래 예시를 보자. 정수형을 더하면 값이 더해서 7이라는 값이 나오지만 문자열 2와 문자열 5을 더하면 문자열이 합쳐져 25라는 결과가 나오게 되는 것을 볼 수 있다.

1
2
2 + 5 -> 7
"2" + "5" -> 25

또 다른 자료형으로는 참고 거짓을 나타내는 불린(Boolean) 이 있다. 따라서 불린의 값은 두 가지밖에 존재하지 않는다. 참을 나타내는 True 와 거짓을 나타내는 False 가 있다. 이 자료형은 값의 비교에 주로 사용되는데 아래 예시와 같다.

1
2
7 > 3 -> True
3 > 7 -> False

정리해보면 Python의 자료형은 정수(Integer), 소수(Floating Point), 문자열(String), 불린(Boolean) 과 같은 것들이 있고, 이 자료형들은 Python 뿐만 아니라 거의 모든 프로그래밍 언어에서 비슷하다. 그러므로 Python 을 배운 것이 아니라 프로그래밍의 가장 기본적인 개념을 배웠다고 생각하면 된다. 파이썬에는 List, Dictionary, Tuple 등 더 다양한 자료형들이 있는데 이것들은 나중에 알아보도록 하자.


추상화 개요

우리가 스마트폰을 사용할 때 통화가 정확히 어떻게 이루어지는지 이해하려면 하드웨어, 소프트웨어, 통신 등 다양한 원리들을 알아야 한다. 대부분의 사람들은 하드웨어, 소프트웨어, 통신 등에 대해 잘 모른다. 모든 사람들이 원리를 완벽하게 이해하고 사용하면 좋지만 쉬운 일은 아니다. 다행히 버튼 몇개만 누르면 누구나 쉽게 통화를 할 수 있다. 이런식으로 복잡한 디테일은 숨기고 주요 기능에만 신경쓸 수 있게 해주는 것을 컴퓨터 과학에서는 추상화(Abstraction) 라고 부른다.

여기서는 프로그래밍의 추상화를 아래의 세 단계로 나눠보겠다.

  • 변수 (Variable)
  • 함수 (Function)
  • 객체 (Object)

여기서 객체는 지금 바로 이해하기에 어려울 수 있기 때문에 여기에서는 변수와 함수에 대해서만 알아보자. 변수 는 값을 저장한다. 아래 예제를 보면 변수 x254 라는 값을 저장하고 변수 y317 이라는 값을 저장한다. 이제 변수들의 이름만 알면 저장된 값을 사용할 수 있게 된다. 추상화의 목적은 복잡한 디테일들을 숨기는 것인데 변수가 그 역할을 한다. 우리가 254, 357 과 같은 복잡한 값들을 외우기 어려운데, 이런 경우 외울 필요 없이 변수를 사용하면 된다.

1
2
3
x = 254
y = 317
print(x + y)

함수(Function) 는 명령들을 저장한다. 우리도 이미 함수를 사용하고 있었다. print 함수가 그것이다. print는 괄호 안에 있는 값들을 console에 나오게 해주는 함수이다. 그런데 이 print 함수가 내부적으로 어떻게 동작하는지 우리는 전혀 알지 못한다. 어쩌면 생각보다 복잡하게 구현되어 있을 수 있는데, 내부적인 내용을 몰라도 아무 문제 없이 사용할 수 있다는 점이 추상화의 장점이자 목적이다.


변수

변수는 간단하게 이야기하면 데이터를 어떤 공간에 담아서 이름표를 붙여준 것이다. 아래 코드는 4990 이라는 숫자를 burger_price 라는 변수에 저장한다는 뜻이고 ‘burger_price 변수를 정의했다’라고 표현한다.

1
burger_price = 4990

위 코드는 세가지 부분으로 구성되어있다. 가운데 있는 = 는 우리가 일반적으로 알고 있는 수학의 = 와는 다른 의미이다. 수학에서의 = 는 같다라는 뜻이지만, 프로그래밍에서는 지정연산자로 인식된다. = 의 오른쪽에 있는 값을 왼쪽에 있는 변수에 지정해준다는 의미이다. 따라서 위 코드에서는 오른쪽의 4990 이라는 정수 값을 왼쪽의 burger_price 라는 변수에 지정한다는 의미가 된다. 변수는 프로그래밍에서 가장 기본적이면서 중요한 내용이기 때문에 잘 알아두도록 하자.


함수

변수가 값을 저장하는 역할이라면, 함수는 명령을 저장한다. 명령의 복잡한 디테일을 다 알필요 없이 주요 기능에만 집중하기 위해 함수를 사용한다. print 처럼 자주 사용되는 함수들은 기본으로 제공된다. 이렇게 기본으로 제공되는 함수를 내장함수라고 하며 프로그래밍 언어를 만든 개발자들이 미리 만들어 놓은 것이라고 생각하면 된다. 내장함수를 제외한 함수들은 직접 만들어야한다.

1
def hello():

위 코드에서 def 는 define의 약자이며 define은 정의라는 뜻이므로, 새로운 함수를 정의하겠다는 뜻으로 해석하면 된다. 함수를 정의한 첫 줄을 함수의 헤더라고 부른다.

1
2
3
4
5
def hello():
  print("Hello!")
  print("Welcome to Codeit!")

hello()

함수의 내용은 함수 헤더보다 들여쓰는 것으로 작성하면 된다. IDE를 사용하는 경우 자동으로 들여쓰끼를 이용해 작성하도록 도와준다. print 문 두개를 함수의 내용으로 작성해주었다. 아래 함수이름으로 함수를 사용하고 있는데 들여쓰기를 사용하지 않은 이유는 들여쓰기로 작성할 경우 함수의 내용으로 취급되기 때문이다. 해당 코드를 실행하면 함수 내부의 print 문 두개가 실행된다. 현재 함수는 두 줄로 구성된 간단한 함수지만, 이후에 많은 내용을 담고있는 함수를 만들게 된다면 매번 그 많은 내용을 작성할 필요없이 함수를 정의하여 함수 호출을 하는 것이 훨씬 편리할 것이다.


파라미터

함수는 항상 같은 동작을 반복한다. 함수를 상황에 따라서 조금씩 다르게 동작하도록 만들고 싶을 대 파라미터를 사용한다.

1
2
3
4
5
6
def hello(name):
  print("Hello!")
  print(name)
  print("Welcome to Codeit!")

hello("Chris")

위 코드에서 처럼 함수이름 오른쪽의 괄호에 name 을 파라미터라고 부른다. 함수를 사용할 때 괄호안에 작성한 부분이 함수의 파라미터로 들어가게 된다. 위 코드에서는 hello 함수를 호출할 때 괄호안에 적어준 문자열 Chris 가 함수의 파라미터인 name 으로 들어간다. 함수 안에서 파라미터를 사용할때 함수호출에서 넣어준 것이 그대로 사용된다. 따라서 위 코드의 함수안에서 name 이 사용될 때 문자열 Chris 가 사용된다는 이야기다. 실행해보면 중간에 Chris 가 출력되는 것을 볼 수 있다.


여러 개의 파라미터

파라미터를 사용하는 법을 배웠다. 하지만 한 함수에 여러개의 파라미터를 사용할 수는 없을까? 두 개의 숫자를 받아 더하는 함수를 만들어 보자.

1
2
3
4
def print_sum(a, b):
  print(a + b)

print_sum(7, 3)

위 함수는 두 개의 숫자를 더하는 함수이다. 우선 함수의 정의를 보면 함수의 이름은 print_sum이고 첫 번째 파라미터는 a, 두 번째 파라미터는 b 이다. 파라미터를 여러개 사용하는 법은 간단한데, 함수를 정의할 때 파라미터를 , 를 이용해서 여러개 작성하면 된다. 파라미터를 여러개 사용하는 함수를 호출하는 것도 간단한데, 정의할 때와 같이 함수이름과 함께 파라미터 갯수에 맞도록 값을 입력하면 된다. 위 코드를 실행하면 파라미터를 받아온 함수가 두 개의 파라미터를 더해 10이라는 답이 출력되는 것을 확일할 수 있다. 파라미터를 3개 사용하고 싶다면 똑같은 방법으로 함수 헤더에 파라미터를 추가하고 호출에도 한개의 값을 추가하면 된다. 위 코드에서 파라미터의 이름은 a, b 이지만 파리미터의 이름은 변수와 같이 정의하는 사람이 원하는 대로 정할 수 있다. 파리미터 이름만 다른 것으로 변경해서 실행해도 똑같은 결과를 볼 수 있다.


return문

잠시 복습을 하자면 변수는 값을 저장하는 역할이며, 함수는 명령을 저장하는 역할이라고 앞에서 설명했다. 또한 파라미터는 함수에 넘겨주는 값이며 넘겨주는 정보에 따라서 함수를 조금씩 다르게 동작하도록 할 수 있다고 했다. 이제 함수의 핵심적인 기능을 한가지 더 배워보자. 바로 return 이라는 것이다. 리턴은 한국말로 돌려준다는 뜻이다. 함수에서 return 은 실제로 어떤 정보를 돌려준다는 뜻인데 함수에게 무언가 정보를 주면 어떤 다른 정보를 돌려준다. 예시를 들어보자.

1
2
3
4
def get_square(x):
  return x * x

print(get_square(3))

위 코드에서 함수는 x 라는 이름의 파라미터 하나를 받는다. 함수는 x 의 제곱을 계산하여 return 한다. 파라미터로 3을 넘겨 줬다고 가정해보자. 그러면 함수의 내용은 return 3 * 3 이 된다. 즉 9를 return 해준다는 뜻이다. 그러면 이 함수를 호출한 부분이 9가 되는 것이고 결과적으로 print(9) 가 된 것이므로 9가 출력된다. 다른 예시를 들어보자.

1
2
3
4
5
def get_square(x):
  return x * x

y = get_square(3)
print(y)

y = get_square(3) 줄의 = 는 앞서 배웠듯 지정연산자이다. 오른쪽의 값을 왼쪽에 넣어준다는 뜻이다. 결국 yget_square(3) 의 return 값인 9가 되고 y 를 출력하면 9가 출력된다. 한가지만 예시를 더 들어보자.

1
2
3
4
def get_square(x):
  return x * x

print(get_square(3) + get_square(4))

이번에는 print 함수안에 get_square 함수를 두 번 호출했다. 파라미터로 3을 넣은 함수는 9가 return 되고 4를 넣은 함수는 16이 return 될 것이다. 결국 print(9 + 16) 이 되는 것이므로 25가 출력된다.



이전 내용 보기 다음 내용 보기

Leave a comment