Skip to content

Instantly share code, notes, and snippets.

@shoark7
Last active June 30, 2023 05:52
Show Gist options
  • Save shoark7/e8e103dd9a2ff11b94432c17c3826ab9 to your computer and use it in GitHub Desktop.
Save shoark7/e8e103dd9a2ff11b94432c17c3826ab9 to your computer and use it in GitHub Desktop.
프로그래밍에서 필수적인 용어 정리를 해봅시다!

개념을 머리로 이해하는 것을 넘어, 팀원과 소통하기 위해서는 그 이름을 알아야 합니다.
여기서는 프로그래밍에서 매우 기본적인 용어를 조금 정의해볼까 합니다.

내가 그의 이름을 불러주기 전에는 그는 다만 하나의 몸짓에 지나지 않았다.
내가 그의 이름을 불러주었을 때, 그는 나에게로 와서 꽃이 되었다.

김춘수 <꽃>


* 자료구조

자료구조(data structure)는 쉽게 말하면 단일 값이나 다른 자료구조를 포함하고 있는 큰 뭉치를 말합니다. list만 하더라도 여러 값들을 담을 수 있는 것을 우리는 이미 확인했죠.

the_list = [1, 2, 3, 4, 5]

자료구조는 어떤 값을 두 개 이상 담을 수 있어야 합니다. 그런 의미에서 [1 2, 3], (1, 2) 등은 자료구조지만, 3, 'a' 등은 일반적으로 자료구조라고 하지 않습니다.

데이터가 프로그램의 구조를 결정한다는 말이 있습니다. 수준급의 프로그래밍을 하기 위해서는 어떤 문제 상황에서 어떤 자료구조를 써야하는지 아는 것이 중요합니다. 같은 일을 하는데 이 자료구조로는 성능(실행시간, 개발시간 등)이 너무 안 좋고, 다른 자료구조로는 성능이 좋은 것을 경험하는 날이 올 수 있습니다. 그렇기 때문에 우리가 파이썬의 핵심 내장 자료구조 4가지를 공부하는 것이기도 합니다.


* 연산자

연산자(operator)는 수학적 또는 논리적인 연산을 수행하도록 지시하는 기호(symbol)입니다. 우리는 학생 때 수많은 연산자를 만났습니다. +, -, / 등등. 프로그래밍 언어에는 수많은 연산자가 존재하는데 상당수의 언어가 같은 기호를 공유합니다. 예를 들어 +는 C나, Java, Python 모두에서 '더하기'라는 뜻이 됩니다. 물론 언어마다의 기호도 있습니다. 가령 //는 파이썬에서는 나눗셈의 몫을 구하는 연산자인데 반해, C 등의 언어는 지원하지 않는 연산자입니다.

연산자는 그 수가 많아서 여러 가지 종류로 분류하는데요.

  • +, -, /, * 등의 산술 연산자
  • >>, <<, ^, & 등의 비트 연산자
  • =, *= 등의 대입 연산자
  • ==, != 등의 비교 연산자

등등. 프로그래밍하실 때 연산자 없이는 어떤 작업도 제대로 할 수 없습니다. 그래서 비트 연산자 이외에는 다 써보실 것이고 결국 알아야 합니다. 비트 연산자는 임베디드 프로그래밍이나, 고급 알고리즘을 할 경우 열심히 써보게 될 것이니 지금은 정말로 필요없습니다.

참고로 연산자 사이의 대상들을 피연산자(operand)라고 합니다.

가령 3 + 5라는 식에서 + 양쪽에 있는 3, 5는 피연산자입니다.


* 할당

할당(assignment)은 변수에 값을 저장하거나, 재지정하는 것을 말합니다. 이때는 =와 같은 대입 연산자를 사용하며, = 양쪽의 피연산자들의 관계는 왼쪽의 변수에 오른쪽의 값이 복사되는 것을 기본으로 합니다. 이는 상당수의 프로그래밍 언어에서 기본으로 합니다.

a = 1
b = 2
c = 3
d = 4

위 식에서는 a라는 변수에 1, b라는 변수에 2, c라는 변수에 3, d라는 변수에 4가 할당됩니다.

print(a, b, c, d)

1 2 3 4

참고로 파이썬에서 저 할당식은 한 줄로도 쓸 수 있습니다. 많은 변수를 한 번에 정의하기에 좋습니다.

a, b, c, d = 1, 2, 3, 4

* 내장된(built-ins)

원 블로그에서 내장(built-ins)이라는 용어를 계속 썼습니다. 이 뜻에 대한 설명을 먼저 드리지 못했네요.

어떤 기능이나 함수 등이 내장 또는 빌트인되어 있다는 뜻은 그것이 프로그램에서 바로 사용가능하도록 준비되어 있다는 뜻입니다.
예를 들어 우리가 파이썬을 실행시키면 내가 import 등의 일을 하지도 않았는데 print라는 함수를 바로 사용할 수 있습니다. print 함수는 이런 의미에서 내장 함수입니다. list, tuple, dict, set 등도 별다른 작업 없이 바로 사용가능하죠. 따라서 이들도 내장 자료구조라고 할 수 있습니다.

파이썬에는 수많은 내장된 기능들이 존재합니다. 아직 우리 수업에서 다루지 않은 것들이 정말 많아요. 이들의 목록이라도 한 번 훑어보고 싶은 분들은 파이썬 쉘에 다음과 같이 입력해보시길 바랍니다.

import builtins

print(dir(builtins))

builtins는 파이썬의 내장 기능들을 포함하고 있는 모듈이고, 파이썬은 처음 실행될 때 이 기능들을 모두 import 해놓습니다. 그렇기에 우리가 별다른 작업없이도 이 기능들을 바로 사용할 수 있습니다. 목록을 살펴보시면 우리에게 이미 친숙한 sum, print 등이 있음을 확인하실 수 있습니다. dir은 'directory'의 약자로 해당 모듈이나 기능이 가지고 있는 변수나 속성을 list로 반환(return)하는 내장 함수입니다.

내장 기능이 있으면 내장 기능이 아닌 기능도 얼마든지 있겠죠? 그 예로는 pandas의 DataFrame 등이 있겠습니다. 이 자료구조는 기본 파이썬에는 존재하지 않으며 pandas 라는 모듈을 pip을 통해 설치하고 import 해야만 사용할 수 있습니다. 그런 의미에서 pandas 모듈의 모든 기능은 파이썬에 내장된 기능이 아닙니다.


* 메소드

메소드는 좀 어렵습니다. 그 핵심만 가로지르도록 하겠습니다. 우리는 함수(function)을 배웠습니다. def이라는 키워드를 통해 우리만의 함수도 이미 정의했습니다. 함수는 쉽게 말해 '긴 코드 블록을 짧게 줄인 이름'이라고 이해하면 좋습니다. 100여 줄의 기능을 필요할 때마다 복붙해서 사용하면 용량도 크고 코드 관리하기도 까다로울텐데요. 이 긴 코드를 함수로 정의하면 한 줄로 사용할 수 있습니다.

메소드(method)는 함수의 한 종류로, 어떤 자료형에 매여 있는 함수입니다.매여 있다라는 표현의 의미를 잘 설명드리고 싶습니다. 가령 print라는 함수는 특정 자료형에 매여 있지 않고 바로 실행할 수 있습니다.

a = 1
b = '가'
c = [1, 2, 3]

print(a, b, c)

1  [1, 2, 3]

반면 메소드는 자신이 정의되어 있는 자료형에 매여 있어, 해당 자료형을 통해서만 호출 또는 실행될 수 있고, 보통 해당 자료형과 상호작용하는 경우가 많습니다.

우리가 이미 배웠던 예를 통해 살펴보겠습니다. list에는 append라는 메소드가 있습니다. list의 끝에 특정 값을 추가하는 메소드인데요.

l = [1, 2, 3]
l.append(4)
print(l)

[1, 2, 3, 4]

l이라는 변수는 list를 담고 있는데 이 리스트의 뒤에 .을 찍어서 append라는 메소드를 호출했습니다. 이때 4라는 값을 입력했습니다.

이때 append라는 함수는 list에 한정되어 있어 다른 자료구조들에서(이를테면 str, tuple 등) 사용할 수 없으며 함수를 호출한 바로 그 자료구조에 영향을 미칩니다. 위의 예제에서 append를 호출한 l에 변화를 주었음을 통해 알 수 있습니다. 아샬 선생님이 예제로 주신 str.split도 str, 그러니까 문자열의 메소드로, 문자열에서만 사용할 수 있고 list 등에서는 사용할 수 없습니다.

때로는 서로 다른 자료형이나 자료구조에서 같은 메소드를 사용할 수 있을 때도 있습니다.

print(list.count)
print(tuple.count)

<method 'count' of 'list' objects>
<method 'count' of 'tuple' objects>

이후 살펴볼 count라는 메소드는 list와 tuple 모두에서 사용할 수 있는데요. 이건 사실 두 자료구조가 어떤 공통된 특성을 공유하기에 그렇습니다. 이는 객체 지향(object oriented)이라는 개념을 공부해야 하는데 지금은 전혀 필요하지 않습니다. 난 파이썬 널 간절히 알고 싶어..와 같은 심정이 드실 때 질문 주시면 자세히 설명드리겠습니다.

정리하면 메소드는 자료형이나 자료구조에 속해 있는 함수로, 자신을 호출한 자료형에 직접적인 영향을 주는 경우가 많고 일반적으로 다른 자료형이나 자료구조에서는 호출하지 못합니다.

@cozyboi77
Copy link

Thank a lot

@Jejulife
Copy link

감사합니다 잘 배웠습니다!

@joahyot
Copy link

joahyot commented Jun 30, 2023

감사합니다. 비전공자 초심자로서 정말 도움이 많이 됩니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment