ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java 프로그램의 기본 구성
    Java 학습 2022. 5. 4. 17:05

    자바 프로그램은 어떻게 생겨먹었을까 - 기초

    들어가기에 앞서


    제목은 딱딱하지만 최대한 이해하기 쉬운 표현을 찾아보려고 한다(어렵게 설명할 능력도 없다).
    그러자면 비유를 써야만 하는데, 비유는 이해가 목적이지 사실전달이 목적이 아니므로 '이런 거구나'하는 느낌을 얻는 정도로만 이해하시면 좋겠다.

    어떤 부품들로 만들어진 기계


    기계가 있다. 토니스타크의 슈트 같은거 말고. 숫자와 문자로 이뤄진 간단한 기계다.
    이 기계는 이렇게 동작한다.
    1. 기계의 버튼을 누르면
    2. 기계 안의 숫자와 문자로 된 여러 값들을
    3. 처리해서
    4. 만들어진 결과를 예쁜 상자에 담고
    5. 상자를 출구에 딱! 하고 내보낸다.

    근데 만약 이 기계의 부품을 잃어버리면 어떻게 될까?
    * 버튼을 잃어버린다면, 기계를 시작할 수가 없을 것이다.
    * 숫자와 문자로 된 여러 값을 잃어버린다면, 기계는 처리할 '재료'를 잃어버리게 되므로 아무 것도 할 수 없을 것이다.
    * 처리를 안 하면, 말 그대로 아무 동작도 하지 않게될 것이다.
    * 결과를 저장하지 못하면, 기껏 만든 결과는 유실되고 말 것이다.
    * 출구가 없다면 결과를 담아놔도 내보낼 방법이 없으므로 아무 동작도 하지 않은 것처럼 보일것이다.

    요컨대, 위의 요소들은 '뭔가를 작동시켜서 답을 얻어내는 데'에는 절대 빠져서는 안될 필수적인 요소들인 것이다.

    '필수적인 요소들'의 이름


    • 버튼: 진입점(시작점)
    • 숫자와 문자로 된 여러 값: 변수
    • 처리: 함수
    • 결과를 저장: 리턴 값
    • 출구: return, 혹은 아웃풋
      이 중요한 녀석들의 이름이 뭔지 알았으니, 어떤 녀석들인지 하나씩 살펴보자.
      깊이 있게는 안 알아본다. 어차피 처음에 말해도 이해하기가 어려우니까!(는 사실 깊게 설명 못해서)

    진입점(Entry point)이란?


    "여기서부터 시작!"이라고 표시된 부분. 이곳부터 순차적으로 진행된다.
    Java에서는 main메서드, 눈에 익은 형태로 말하자면 public static void main()(매우 자주 보게될 테니 눈에 익혀두자) 안에 작성된 내용들이 가장 먼저, 위에서 아래로 순차적으로 실행된다.
    집으로 치면 현관문 같은 것.

    변수(variable)란?


    여러 가지 값에 이름과 특성을 붙여놓은 값.

    예를 들어 21이라는 값을 저장하고 싶다고 해보자.
    21이란 값은 나이를 의미하는 단어라서, age라는 이름표를 붙이기로 한다.
    21이란 값은 나이라는 숫자를 말하는 거니까, 숫자를 의미하는 단어 int를 붙여주기로 한다
    (1. int에 대해서는 좀 더 뒤에 알아보자)
    (2. 문자는 앞에 int 대신에 charString을 붙인다. 요것도 좀 더 뒤에 알아보자)

    그럼 한 줄로 정리해서 이렇게 된다.

    int age = 21;  (*참고: 프로그램에서는 마침표 대신에 ;를 쓰곤 한다)

    주석(comment)


    그런데, 옆에 (*참고)라고 설명문구를 저렇게 써놓으면, 기계는 이게 작동에 필요한 문자인지 설명문구인지 알 길이 없다. 때문에 저런 설명 문구 앞에는 이렇게(//) 표시한다.

    int age = 21;  // *참고: 프로그램에서는 마침표 대신에 ;를 쓰곤 한다

    //를 보면 기계는 '아 이건 (사람을 위한)설명문구니까 신경 안써도 되겠군'이라 파악하고 넘어간다.

    함수(function, method)


    이런 값들을 아래 코드처럼 쭉 쌓아놓는다고 해보자.

    int age = 21;  // *참고: 프로그램에서는 마침표 대신에 ;를 쓰곤 한다
    String gender = "male";  /* 이것도 설명문구를 표현하는 한 가지 방법이다. */
    int height = 181;
    String name = "김길동";
    int weight = 70;

    이렇게 늘어만 놔서는, 기계는 이것들이 어떤 의미를 갖게 되는지 알 수가 없다.
    하지만 기계를 작동하는 사람은 안다. 이것들을 합치면 뭔가 될 것 같다는 걸.
    그러면 '합치는 동작'이 필요하다. 저 값들을 가지고 합치는 동작을 해보자('합치는 동작' 기능은 만들어져 있고, 지금은 사용만 해보는 것이다).

    /* 
     * 각 값들을 '합치는 동작'에 모아서 넣어준다.
     */
    makePeople(age, gender, height, name, weight);

    '한 사람의 정보를 만든다'는 동작을 하는 makePeople() 안에 넣어주었다.
    이 기계에서 이렇게 동작하는 부분을 가지고 함수라고 한다. Java에서는 함수 대신 메소드(method)라는 표현을 쓴다. 동작의 재료로 쓰인 변수가 다섯개 있는데, 이렇게 메소드의 재료로 넘어가게 되는 값들을 인자(parameter / argument)라고 한다.
    함수들은 제각기 이름은 다르지만, 형태로만 보면 이름 { 동작하는 내용 }의 형태를 갖고 있다.
    참고1. function과 method는 엄밀하게는 다르지만 지금은 같다고 봐도 된다. 'java는 함수를 method라고 한다'라고 생각해도 무방하다. 지금은!
    참고2. 지금껏 기계가 실행한 모든 작동들도 한 method 안에 들어있는데, 전체적인 모양이 어떻게 되는지는 마지막에 살펴보도록 하자.

    반환값, 리턴값 (return value)


    아까 전에 '각 부품이 없어지면 어떻게 될까' 생각해 보던 내용 중에 이런게 있었다.

    • 결과를 저장하지 못하면, 기껏 만든 결과는 유실되고 말 것이다.
      우리는 여러 단계를 거쳐서 결과를 만드는 동작까지 지켜보았다(makePeople(age, gender, height, name, weight);). 이렇게 수고롭게 만든 값이 쓰지도 못하고 사라지게 둘 수는 없는 것이다!
      이 값을 어떻게 담을 것인가! 방법은 쉽다.
      아까 우리가
    String gender = "male";

    해서 값을 저장한 것처럼

    String peopleInfo = makePeople(age, gender, height, name, weight);

    이렇게 담으면 된다.

    반환(return)


    반환값은 기계가 사용자에게 돌려주려고 준비한 값이니, 반환을 해주면 된다. 이때 사용하는 키워드는 return이다. 아래와 같은 예시로 사용하면 된다.

    return peopleInfo;

    혹은 이렇게, 메소드에서 나오는 값을 곧바로 돌려줘도 된다.

    return makePeople(age, gender, height, name, weight);

    만약 반환할 값이 없다면? return 없이 종료하면 된다.

    이 기계의 이름은? 외부는?

    이 기계의 내부는 보았다. 그럼 이 기계 자체는? 껍데기도 없이 존재할까?
    당연히 케이스 하나로 감싸준다. 그래야 뭔가 하나의 기계로 보이겠지.
    하나의 동작을 하는 하나의 기계 단위를 java에서는 클래스(class)라고 한다. 클래스는 자바의 객체, OOP를 이해하는 공부 과정에 있어서 무한히 반복될 단어니까 미리 친해져두자.
    어쨌든, 이 기계 이름이 gildonge라면 첫문자를 대문자로 해서

    class Gildonge { 
        ....내용...
    }

    라고 쓴다.


    자, 이렇게 기계의 한 싸이클을 함께 돌아보았다.
    이 기계의 각 부위 명칭도 알았고, 부품들의 사용법도 배웠다.
    그리고 이 '기계'가 사실 '프로그램'이란 것도 알았다(아마도 처음부터).
    그러면 이 프로그램의 코드 구성이 어떻게 되는지 오버뷰를 보자.

    class Gildonge {
    
        // 진입점: 여기서 시작
        public static void main(String[] args) {
            // 변수: 프로그램이 사용할 값을 담아놓은 것들
            int age = 21;
            String gender = "male";
            int height = 181;
            String name = "김길동";
            int weight = 70;
    
            /* 메소드 & 리턴값: makePeople 메소드에 파라미터로 변수들을 넘겨주고 & 결과값을 peopleInfo라는 반환값에 담았다. */
            String peopleInfo = makePeople(age, gender, height, name, weight);
    
            System.out.println(peopleInfo); /* 이건 안배웠지만, 화면에 출력하는 문구다. 그냥 그렇구나 정도만 알아두면 된다. */
    
        } // main 메소드가 끝나는 여기에서, 프로그램이 종료된다.
    
    }

    사실 main 메소드는 리턴값의 기본 형태가 void(리턴값 없음)이라서 위에 설명한 내용들과는 조금 다르다. 뭔가 이상한데, 라고 느끼셨다면 매의 눈! 왜 다른지, 그럼 어떻게 해야하는지 등등은 차차 알아보자.

    java 프로그램의 기본적인 형태가 눈에 잘 들어왔기를 바란다.
    다음부터는 각 파트에 대한 자세한 내용, 프로그램을 제어하는 여러 문법들을 익혀보자.

    댓글

Designed by Tistory.