NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    기타 2부 - 언어별 함수 만들기 예제. (An example of creating a language-specific functi…

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 이전에 프로그래밍 [ 언어별로 직각 삼각형 만들기 ]에 대해 알아봤는데요. 오늘은 함수 또는 메소드를 만드는 방법에 대해 알아보도록 하겠습니다. 언어마다 다른 부분이 있지만, 기본 문법은 비슷합니다. 아래와 같이 함수를 호출해서 삼각형을 그려보도록 하겠습니다. 언어별로 하나씩 알아보죠~ ㅎㅎ

        *
       ***
      *****
     *******
    *********

     

    1. C for Visual Studio 2019

    #include <stdio.h>
    
    int main() {
        writeTriangle();
    	return 0;
    }
    
    void writeTriangle()
    {
        int x, y;
        for (x = 0; x < 5; x++) {
            for (y = 4; y > x; y--) {
                printf(" ");
            }
            for (y = 0; y <= x; y++) {
                printf("*");
            }
            for (y = 1; y <= x; y++) {
                printf("*");
            }
            printf("\n");
        }
    }

     

    위 코드를 실행하면 컴파일 에러가 발생합니다. 중간 언어들(C#, Java)과 다르게 C는 위에서부터 아래로 해석 하면서 컴파일합니다. 그래서 main 함수(진입점) 부분에서 "writeTriangle" 함수를 찾을 수 없기 때문입니다. 그래서 아래와 같이 함수 원형을 main 위에 선언해야 합니다.

    #include <stdio.h>
    
    void writeTriangle();
    
    int main() {
        writeTriangle();
    	return 0;
    }
    
    void writeTriangle()
    {
        int x, y;
        for (x = 0; x < 5; x++) {
            for (y = 4; y > x; y--) {
                printf(" ");
            }
            for (y = 0; y <= x; y++) {
                printf("*");
            }
            for (y = 1; y <= x; y++) {
                printf("*");
            }
            printf("\n");
        }
    }

     

    프로그램이 예제처럼 단순하다면 크게 문제될게 없지만~ 현업에서는 소프트웨어 개발을 하다보면 복잡해지겠죠? 업무 로직이나 복잡해지고 함수가 많아질수록 가독성이 떨어지고 유지보수성도 나빠집니다. 그래서, 대부분의 프로그램이 헤더(.h)파일을 가지고 있고 참조해서 사용하게 됩니다. 코드는 아래와 같이 변경할 수 있습니다.

    #include "triangle.h"
    
    int main() {
        writeTriangle();
    	return 0;
    }

     

    2. C++ for Visual Studio 2019

    C++도 C와 동일하기 때문에 위 내용을 참고하시면 됩니다. 다음에~ 헤더와 소스에 대해 좀 더 자세히 알아보도록 하겠습니다.

    // ConsoleApplication1.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다.
    //
    
    #include <iostream>
    
    void writeTriangle();
    
    int main()
    {
        writeTriangle();
    	return 0;
    }
    
    void writeTriangle()
    {
        int x, y;
        for (x = 0; x < 5; x++) {
            for (y = 4; y > x; y--) {
                printf(" ");
            }
            for (y = 0; y <= x; y++) {
                printf("*");
            }
            for (y = 1; y <= x; y++) {
                printf("*");
            }
            printf("\n");
        }
    }
    
    // 프로그램 실행: <Ctrl+F5> 또는 [디버그] > [디버깅하지 않고 시작] 메뉴
    // 프로그램 디버그: <F5> 키 또는 [디버그] > [디버깅 시작] 메뉴
    
    // 시작을 위한 팁: 
    //   1. [솔루션 탐색기] 창을 사용하여 파일을 추가/관리합니다.
    //   2. [팀 탐색기] 창을 사용하여 소스 제어에 연결합니다.
    //   3. [출력] 창을 사용하여 빌드 출력 및 기타 메시지를 확인합니다.
    //   4. [오류 목록] 창을 사용하여 오류를 봅니다.
    //   5. [프로젝트] > [새 항목 추가]로 이동하여 새 코드 파일을 만들거나, [프로젝트] > [기존 항목 추가]로 이동하여 기존 코드 파일을 프로젝트에 추가합니다.
    //   6. 나중에 이 프로젝트를 다시 열려면 [파일] > [열기] > [프로젝트]로 이동하고 .sln 파일을 선택합니다.
    

     

    3. C# for Visual Studio 2019 (Core & .NET)

    C#은 메소드(Method)라고 부릅니다. 함수(Function)와 같은 의미로 이해하시면 됩니다. C#과 Java는 클래스를 만들어서 메소드를 만들어야 하는데요. C나 C++과 이 부분에서 차이가 많이 나게 됩니다. 아직은 처음 단계이다보니 여기까지만 알아보고, 클래스에 대해서는 천천히~! 확인해보도록 하겠습니다.

    using System;
    
    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
    			writeTriangle();
    		}
    
            static void writeTriangle()
            {
                int x, y;
                for (x = 0; x < 5; x++)
                {
                    for (y = 4; y > x; y--)
                    {
                        Console.Write(" ");
                    }
                    for (y = 0; y <= x; y++)
                    {
                        Console.Write("*");
                    }
                    for (y = 1; y <= x; y++)
                    {
                        Console.Write("*");
                    }
                    Console.Write("\n");
                }
    
                Console.ReadKey();
    		}
        }
    }

     

    4. Java for Eclipse Enterprise

     자바(Java)도 C#과 동일합니다. 메소드를 선언과 동시에 구현할 수 있습니다. C#과 Java는 C와 다르게 중간 언어로 구문 분석 후 빌드됩니다. 그리고 런타임에 JRE가 OS를 가상화하고 자바 어플리케이션을 실행해줍니다. 사실 더 복잡하게 구성되어 있지만, 여기서~ 설명하기엔 내용이 너무 방대해서 간단하게 JRE(Java Runtime Environment, 자바 실행 환경) 하에 JVM(Java Virtual Machine, 자바 가상 머신)에서 실행된다고 알고 있으면 됩니다. 참고로, C#은 .NET Framework 하에 실행되며 CLR(Common Language Runtime, 공통 언어 실행 환경)을 거쳐 MSIL(MicroSoft Intermediate Language)로 만들어집니다. 이렇게 만들어진 라이브러리(.dll)나 실행 파일(.exe)은 런타임에 JIT(Just In Time) 컴파일러가 기계어로 컴파일해서 메모리에 캐쉬되게 됩니다.

    public class main {
    	public static void main(String[] args) {
    		writeTriangle();
    	}
    	
    	static void writeTriangle()
        {
            int x, y;
            for (x = 0; x < 5; x++)
            {
                for (y = 4; y > x; y--)
                {
                    System.out.print(" ");
                }
                for (y = 0; y <= x; y++)
                {
                	System.out.print("*");
                }
                for (y = 1; y <= x; y++)
                {
                	System.out.print("*");
                }
                System.out.print("\n");
            }
    	}
    }

     

    5. Python for Visual Studio Code

    파이썬의 경우 for 문법이 다소 생소합니다. for ~ in 을 사용합니다. end=''는 반복이 끝나면 마지막에 줄바꿈을 하겠다는 뜻입니다. 그리고, range는 0부터 5까지 반복을 의미합니다. 이번 예제에서는 역으로 반복하는 for가 등장하는데요. 이때에는 reversed를 사용하면 다른 언어들과 동일하게 동작합니다.

    def writeTriangle():
        for x in range(0,5):
            for y in reversed(range(x,4)):
                print(' ', end='')
            for y in range(0, x + 1):
                print('*', end='')
            for y in range(1, x + 1):
                print('*', end='')
            print()
    
    writeTriangle()

     

    6. JavaScript for Visual Studio Code

    JavaScript는 파이썬과 같은 인터프리터 언어지만 함수의 순서에 영향을 받지 않습니다. 그래서 함수 호출이 위에 있고 아래에 function이 있더라도 정상적으로 실행됩니다. 이런 차이가 발생하는 이유는 파이썬과 동일한 인터프리터 언어라도 자바스크립트는 인터프리터 내부에서 컴파일을 거쳐서 결과물을 만들어 내기 때문입니다. 요즘은 typescript로 작성하고 컴파일되어 모든 브라우저에서 실행되는 자바스크립트로 변환해줍니다.

    writeTriangle();
    
    function writeTriangle() {
        for(let x = 0; x < 5; x++)  {
            for(let y=4; y > x; y--)  {
                process.stdout.write(' ');
            }
            for(let y=0; y <= x; y++)  {
                process.stdout.write('*');
            }
            for(let y=1; y <= x; y++)  {
                process.stdout.write('*');
            }
            process.stdout.write('\n');
        };
    }

     

    대부분의 언어가 C에서 파생되었기 때문에 기본적인 문법은 크게 다르지 않습니다. 그래서 어떤 언어를 하나 배우면 다른 언어들도 쉽게 익힐 수 있게됩니다. 하지만, 언어마다 깊이 있게 들어가면 라이브러리의 사용법이 더 중요해지고 설계, 배포, 유지보수등등 고려해야 할 사항들이 많아집니다. 특히 언어마다 특화된 IDE에 익숙해져야 하고, 개발 생산성을 높여주는 다양한 기능과 디버깅 방법을 적극적으로 활용해야 합니다.

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.