본문 바로가기
코딩

코딩? 너도 할 수 있어! 4편 (파이선)

by 종규 2022. 6. 29.
반응형

이번에는 변수 선언하기를 배워 보실 거예요. 변수로 공간을 찜하는 행위를 '변수를 선언한다'라고 말합니다. 기본구조 이해부터 해보겠습니다. 파이선 코드에서는 변수를 어떻게 선언할까요? 변수릐 이름을 쓴 다음, =뒤에 변수에 입력할 값을 적으면 됩니다. 이렇게 변수를 선언하면 '나이'라는 메모리 그릇 안에 15라는 값이 담깁니다. 앞에서 '=' 기호는 '같다'의 의미가 아니라 '<-'라고 했었죠? 앞에서도 말했듯이 파이선은 변수 이름과 값을 선언하면, 입력한 값에 따라 정수형, 실수형, 문자형 중에서 적절한 그릇을 찾아 값을 담습니다. 참 똑똑하죠? 그렇다면 이번엔 과정별로 이해를 해보겠습니다. 그럼 실제로 변수가 어떻게 만들어지고, 값이 어떻게 들어가는지 살펴보겠습니다. 먼저 변수가 선언되기 전에 메모리 공간은 비어 있습니다. '호칭'이라는 이름으로 문자형 그릇을 만들고, 그 안에 '나'라는 단어를 저장해 보겠습니다. 이어서 '나이'라는 이름의 정수형 그릇을 만들고, 그 안에 15라는 값을 저장해 보겠습니다. 저장된 값을 변경해 볼까요? 나이를 20으로 변경해 보겠습니다. 간단하죠? 이렇게 이름을 호출하면 메모리 그릇의 값을 쉽게 변경할 수 있습니다. 변수 선언에서 한 발 더 나아가 볼까요? 오른쪽 코드에서 메모리 그릇은 어떻게 변화 할까요? 한 줄 한 줄 차근차근 살펴 보겠습니다. 먼저 '사과' 라는 메모리 그릇에 5라는 값을 저장했습니다. 다음줄은 어떻게 읽으면 좋을까요? =는 오른쪽에 있는 값을 왼쪽에 '대입한다' 라고 했었죠? 즉, '사과' 메모리 그릇에 담겨 있는 5라는 값이 '바나나' 메모리 그릇으로 '복사'됩니다. 이때 생긴 '바나나' 라는 변수는 '사과'와 연결된 변수가 아닙니다! 단순히 복사되옸을 뿐, 독립된 메모리 그릇이에요. 그래서 마지막 줄까지 입력하면 '사과' 의 값은 9로 변하지만 '바나나'의 값은 변경되지 않습니다. 문자형 그릇을 이어 붙여서 저장하는 문자열! 조금 더 알아볼까요? 우선 변수에 저장한 글자 수가 달라지면 연결된 그릇의 개수도 달라집니다. 예를 들어 '인사' 변수에 문자열 '안녕하세요' 를 담았을 때는 그릇 5개가 이어지지만,문자열 '안녕'으로 변경하면 그릇이 2개로 바뀝니다. 문자열 중 글자 하나만 툭 떼어내서 사용할 순 없을까요? 가능합니다! 문자열 자료를 만들면 첫 번째 글자부터 순번이 붙어서 그 번호로 불러올 수 있습니다. 이때 첫 번째 글자의 순번은 1번이 아니라 0번으로 약속합니다. 0, 1, 2, 3 순으로 지정되죠. 따라서 '안녕하세요' 문자열 자료에는 다음과 같이 순번이 매겨집니다. 이렇게 매긴 순번을 이용해 특정 문자만 뽑아서 사용할 수 잇습니다. 변수 이름을 입력하고 대괄호[ ] 안에 순번을 적으면 됩니다. 예를 들어 아래와 같이 적으면 세 번째 글자인 '하' 만 사용할 수 있습니다. 이러한 숫자를 메모리 그릇의 '색인' 이라는 의미에서 인덱스라고 부릅니다. 그리고 이렇게 하나의 문자만 떼어내 부르는 행위를 인덱싱 이라고 합니다. 라이선에서는 인덱스를 뒤로 감는 것도 가능합니다. 뒤로 감는다는 표현이 어색한가요? 한번 마지막 글자인 '요' 를 인덱싱해 보겠습니다. 이제 뒤로 감기를 해볼까요? 마이너스(-) 값을 입력해 인덱스를 뒤로 감아도 됩니다. 범위를 지정해 여러 개의 연속된 글자를 떼어내 사용할 수도 잇습니다. 변수 이름을 입력하고 대괄호 [ ] 안에 범위를 시작하는 순번:끝나는 순번을 적으면 됩니다.  코딩의 두 번째 특징인 행동을 설명하는 공간,함수를 살펴보겠습니다. 함수의 영어단어인 function은 '기능'을 의미하지요? 코딩에서 함수는 말 그대로 어떤 기능을 수행하는 공간을 의미합니다. 핫케이크 만드는 행동을 예로 들어 설명해 보겠습니다. 맜있는 핫케이크가 상상되나요? 핫케이크 만들기와 같은 행동을 코딩에서는 함수로 지시합니다. 방법은 핫케이크 만들기를 설명하는 것과 비슷합니다. 가장 먼저 def라는 단어로 시작합니다. def는 '함수를 정의한다'는 뜻의 수식어로, 정의를 의미하는 영어단어 definition의 약자입니다. def 다음에 앞으로 설명할 행동이 무엇인지 함수 이름을 말해 줍니다. '핫케이크만들기' 처럼 말이죠. 그런 다음 자세한 설명글을 써줍니다. 앞에서 콜론(:) 기호를 배웠지요? 콜론(:) 다음 줄에 Spacebar 4칸 또는 tab 1칸으로 들여쓴 글이 나온다면 '이 함수에 대한 설명을 하겠다'라는 뜻이 됩니다. 콜론(:) 기호가 이해되지 않는다면, 콜론(:) 기호 주변으로 사각형이 그러져 있다고 상상해 보세요. 함수의 구조를 기억하는 데 도움이 될 거에요. 누군가 '핫케이크만들기' 함수를 보고 실제로 핫케이크를 만든다고 생각해 보세요. 두 번째 소스 줄 '준비물을 준비합니다' 를 보고 어떤 생각을 할까요? '준비물로 무엇이 필요하지? 어디서 구하지?' 라는 생각이 들 거에요. 버터, 우유, 달걀, 과일 등 준비물을 만드는 방법까지 함수 안에서 설명할 수도 있지만, 우리가 슈퍼에서 필요한 물품을 사오는 것처럼 외부에서 준비물을 가지고 오면 편하겠죠? 이런 이유로 함수에도 외부에서 값을 가지고 올 수 있는 창구를 만들어놓았습니다. 코딩에서 값은 '메모리 그릇'인 변수에 저장해서 전달한다고 했죠? 함수에서 사용하는 값도 변수 안에 담아서 사용합니다. 함수 이름 다음에 괄호( ) 공간을 만들어서 외부에서 전달받을 변수들의 이름을 선언하면 됩니다. 위 예시에서는 버터, 우유, 달걀, 과일이라는 변수에 담아서 사용했네요. 이렇게 외부에서 가져온 변수는 함수 안에서 같은 이름으로 사용됩니다. 현재 '핫케이크만들기' 함수에는 핫케이크를 완성하는 것까지만 포함되어 있습니다. 만들어진 핫케이크를 외부에 전달할 방법도 있으면 좋지 않을까요? 만들어진 핫케이크의 개수를 외부에 전달하는 함수는 다음과 같이 표현할 수 있습니다. 함수에서 만든 값을 외부에 전달하는 전달자는 리턴입니다. 함수에서 열심히 만든 결과물을 메모리 그릇에 저장하고 리턴 명령을 사용해서 값을 함수 밖으로 전달하겠다고 표시만 하면 됩니다.

함수의 내용을 먼저 선언해야 함수를 호출해 사용할 수 있습니다. '핫케이크 만드는 방법' 을 모르는데 '핫케이크를 만들라!'고 명령할 수 없는 것과 같은 이치죠. 그래서 일반적으로 코드의 위쪽에서 함수를 선언합니다. 또한 사람이 하는 행동이 여러 가지인 것처럼 프로그래밍 코드에서도 여러 개의 함수를 사용할 수 있습니다. 아래 예시처럼 하나의 코드에 식빵만들기( ) 함수와 단팥빵만들기( ) 함수를 모두 만들고 사용할 수 잇는 것이죠.

반응형