코딩과 프로그램은 무엇인가요? 에서 코딩과 프로그램에 대해서 알아봤습니다. 그럼 코딩의 특징에 대해서 알아보겠습니다.
우리가 프로그램을 만들기 위해서는 프로그래밍 언어가 하라는(정의한) 대로 해야(코드를 작성해야) 제대로 된 프로그램을 만들 수 있습니다. 그리고 그러기 위해서는 당연히 우리가 선택한 컴퓨터 프로그래밍 언어에서 정의한 내용을 잘 숙지해야 합니다. 왜냐하면 프로그램은 작성된 코드 대로만 수행하기 때문입니다.
따라서 프로그래밍 언어 별로 정의된 내용을 정확히 파악해야 합니다. 왜냐하면 같은 용어나 기호도 언어마다 의미와 범위가 다를 수 있기 때문입니다. 예를 들어서 간단하게 설명하면 “abc” 문자와 숫자 3을 곱하면 (“abc” × 3) 오류가 나는 언어가 있는 반면, “abcabcabc”로 문자를 숫자만큼 반복해서 붙여 반환하는 언어가 있습니다. 즉 곱하기에 대해 두 언어에서 정의한 내용이 다른 것입니다.
[A언어] 코드: 출력 ("abc" × 3) 실행 결과: <에러 발생> 문자열과 숫자는 곱셈을 할 수 없습니다. [B언어] 코드: 출력("abc" × 3) 실행 결과: "abcabcabc" |
<예제 1>
그리고 블록기반 언어에서 코드를 작성한다는 것은 블록을 결합하는 것을 의미하며, 블록기반 프로그래밍 언어도 언어 별로 정의된 블록의 의미가 다를 수 있고, 제공하는 블록의 개수나 범위도 다를 수 있으므로 기존에 다른 프로그래밍 언어를 배워서 알고 있다 하더라도 새로운 프로그래밍 언어를 배울 때는 정확히 파악하는 것이 필요합니다.
컴퓨터 프로그래밍 언어는 코드를 실행할 순서를 미리 정의합니다. 언어별로 시작 위치는 달라도 프로그램이 시작되면 대부분은 위에서 아래의 순서로 코드를 실행합니다. 블록기반 언어도 블록단위로 실행되며 위의 블록부터 차례대로 실행합니다.
이때 예외 사항이 발생하지도 않았는데 차례대로 실행하지 않고 다른 위치의 코드나 블록을 실행할 때가 있습니다. 반복 구문을 수행할 때나 개발자가 정의한 함수를 호출할 때, 그리고 조건 결과에 따른 분기[1] 시 발생합니다.
조건 결과에 대한 분기는 특정 조건에 해당할 경우만 정해진 코드나 블록을 실행합니다. 그리고 반복 구문은 동일한 구문(코드나 블록)을 반복적으로 사용하는 것 대신 for나 while 등 프로그래밍 언어에서 미리 정의한 예약어를 활용한 코드나 반복 블록을 사용하여 특정 조건 동안 동일한 코드나 블록들을 반복 실행합니다. 그리고 함수는 개발자가 여러 번 실행될 코드나 블록을 미리 정의하여 동일한 코드나 블록을 반복해서 사용하는 대신 함수를 만들어서 필요할 때 호출해서 사용합니다.
숫자 8를 10번 더하는 경우 [반복문 사용하지 않은 예] 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 [반복문 사용 예] 8을 몇번 더했는지 확인하는 count를 0으로 설정 반복 count를 하나씩 증가시키면서 count가 10이 될 때 까지 8를 더한다. [함수를 사용하는 예] 8 × 10 |
<예제 2>
이처럼 반복 구문이나 함수를 사용함으로써 코드나 블록의 길이는 줄어들고,코드의 가독성을 높일 수 있다는 장점이 있습니다. 하지만 함수나 반복 구문을 사용하는 것이 단순히 코드의 길이를 줄이거나 가독성을 높이려는 목적만 있는 것은 아닙니다.
대부분 프로그램을 개발하는 이유는 미리 정해진 내용을 단순히 실행시키는 것보다는 프로그램을 실행하면서 그때그때 사용자가 원하는 것을 실행하기 위해서 프로그램을 만듭니다. 예를 들면 숫자들의 합계를 구하는 프로그램을 만들 때, 미리 정해진 숫자들의 합계를 구하는 프로그램을 만드는 것보다는 프로그램을 실행시켜 사용자가 원하는 숫자들의 합계를 구하는 프로그램이 사용자들에게 더욱 유용한 프로그램일 것입니다. 그리고 당연히 합계를 구하는 숫자의 개수도 계산기처럼 사용자가 임의대로 지정할 수 있어야 할 것입니다.
그럼 임의의 숫자들의 합계는 어떻게 코딩하면 될까요?
간단하게 숫자들을 모두 더하면 됩니다. 다만 코딩을 하기 위해서는 수학처럼 수식을 만들어야 하는데 그러기 위해서는 합계를 구할 숫자들의 개수를 미리 확인해서 수식을 만들면 됩니다.
즉 합계를 구할 숫자가 두 개면 “1번째 숫자 + 2번째 숫자 = 합계”와 같은 수식을 만들고, 세 개면 “1번째 숫자 + 2번째 숫자 + 3번째 숫자 = 합계”와 같은 수식을 만들어서 코드로 작성하면 됩니다. 그리고 N 개면 “1번째 숫자 + … + N번째 숫자 = 합계” 와 같은 수식을 만들어서 코드로 작성하면 됩니다.
만약 더할 숫자가 2개면: 1번째 숫자 + 2번째 숫자 = 합계 만약 더할 숫자가 3개면: 1번째 숫자 + 2번째 숫자 + 3번째 숫자 = 합계 ... 만약 더할 숫자가 N개면: 1번째 숫자 + … + N번째 숫자 = 합계 |
<예제 3>
하지만 이는 이론적으로만 가능하고 실제로는 코드의 길이가 매우 긴, 미완성된 프로그램이 될 가능성이 높습니다. 왜냐하면 사용자가 몇 개의 숫자들의 합계를 요구할지 알 수 없기 때문에 사용자가 요구할 경우의 수 모두를 조건문으로 분기하면서 코드로 작성할 수 없기 때문입니다.
그럼 어떻게 해결할까?
바로 반복문을 이용하면 해결할 수 있습니다. 즉 합계를 구할 숫자의 개수만큼 반복하면서 합계를 구하면 되는데, 그러기 위해서는 합계를 구하는 패턴을 이용해야 합니다.
합계를 구하는 패턴은 다음과 같습니다. 즉, 임의의 숫자 n개의 합계는 1번째 숫자부터 n번째 숫자를 모두 더하는 것으로 n번째 합계는 이전까지 더한 합계(n-1번째 합계)에 n번째 숫자를 더하면 됩니다. 이것을 수식으로 표현하면 “n번째 숫자 + n-1번째 합계 = n번째 합계”가 됩니다. 그리고 이 수식을 1번째부터 n번 반복하면 원하는 합계를 구할 수 있습니다. (단, n은 1보다 커야 합니다.)
더할 숫자n이 1개이면: n번째 합계는 n번째 숫자 더할 숫자n이 1보다 크면: 더하는 숫자를 세는 i를 2로 설정 1번째 합계는 1번째 숫자로 설정 i가 n과 같을 때까지 n번째 숫자 + n-1번째 합계 = n번째 합계 반복 |
<예제 4>
이처럼 반복 구문을 만들기 위해서는 패턴이나 규칙을 파악하는 것이 중요합니다. 그것도 프로그래밍 언어에서 정의한 방식대로 코딩할 수 있는 패턴을 찾는 것이 중요합니다. 왜냐하면 같은 패턴이나 규칙도 프로그래밍 언어마다 코딩하는 방법이 다르며, 같은 프로그래밍 언어에서도 여러 가지 다양한 방법으로 코딩할 수 있기 때문입니다. (왜냐하면 컴퓨터 프로그램은 누구든지 만들 수 있고, 그 만든 사람이 하고 싶은 방식대로 만들기 때문입니다.) 따라서 코딩을 할 때 프로그래밍 언어가 제공하는 기능을 잘 활용하려면 언어가 정의한 내용을 잘 알고 있어야 합니다.
반복문에 비해 함수는 프로그램 어디에서나 호출이 가능하기 때문에 활용성을 높이기 위해서 함수를 만들 때, 보다 유연하게 작성해야 합니다. 우리는 이러한 과정을 일반화라고 합니다. 따라서 반복문보다는 함수를 만드는(코딩) 것이 더 어려우나 개념적으로 패턴을 찾아 코딩을 하는 것은 동일합니다.
<예제 4>를 sum이라는 이름의 함수로 만들었다면 프로그램 어디에서나 다음과 같이 사용할 수 있습니다. sum(1번째 숫자 ... n번째 숫자) |
<예제 5>
[1] 분기(分岐·分歧)는 ‘나뉘어서 갈라지는 것’으로 영어로는 branch라고 함. 즉 조건에 따라 실행하고 실행하지 않는 코드와 블록으로 나뉘어 짐.
같이 읽으면 좋은 글:
2020/07/15 - [우리의 자세] - 코딩 교육에 임하는 자세
2020/07/16 - [배움의 즐거움] - 산업을 이끄는 주체 하드웨어에서 소프트웨어로 전환되고 있다. 왜?
2020/07/17 - [배움의 즐거움] - 소프트웨어 교육 열풍
2020/07/18 - [배움의 즐거움] - 코딩과 프로그램은 무엇인가요?
2020/07/20 - [우리의 자세] - 패턴이나 규칙을 대하는 자세
2020/07/24 - [배움의 즐거움] - 언제 기계학습을 시키고 언제 코딩을 하죠?
'IT 이야기' 카테고리의 다른 글
특이점이 뭐죠? (0) | 2020.07.25 |
---|---|
언제 기계학습을 시키고 언제 코딩을 하죠? (0) | 2020.07.24 |
코딩과 프로그램은 무엇인가요? (0) | 2020.07.18 |
소프트웨어 교육 열풍 (0) | 2020.07.17 |
산업을 이끄는 주체 하드웨어에서 소프트웨어로 전환되고 있다. 왜? (0) | 2020.07.16 |
댓글