ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 메가테라 웹 개발자 과정 2주차 강의 이론 정리
    학습 관련 기록 2022. 5. 16. 02:42

     

     

    * 이 글은 메가테라 웹 개발자 과정에서 학습한 내용을 정리한 글입니다. 글의 내용은 수시로 수정될 수 있습니다.

     

    1. Hello, World

    • Java 프로그램 관리에는 ‘프로젝트' 단위가 사용된다. 독립적인 Java 프로그램 하나는 프로젝트 하나로 구성된다.
    • 일반적으로 Java 소스 코드 파일들은 프로젝트 파일의 하위 폴더 ‘src’에 포함된다.
    • Java 프로그램을 만든다는 것은 Java ‘소스 코드'를 작성한다는 것을 의미한다.
    • 소스 코드는 ‘원시 코드’라고도 불리운다. Java 소스 코드 파일의 확장자는 ‘.java’이며, 텍스트 파일이다. .java 파일은 Java 프로그램의 구성 요소로써 ‘class’라고 한다.
    • class와 같은 것들은 앞쪽에 꾸며주는 것들이 오고, 뒤쪽에 개별적인 이름이 붙는다. (ex. public class Hello { })
    • 프로그램이 실행되기 위해서는 ‘main method’가 필요하다. main method는 class 내부에 위치하며, 형식은 public static void main(String[] args) { }이다. 이는 이미 정해진 방식이기 때문에 다른 방식으로 main method가 구성되거나 class가 아닌 곳에 main method가 위치하는 것은 불가하다. 이런 식으로 있는 그대로 받아들여야 하는 개념을 Boilerplate라고 한다.
    • 일반적으로 처음 프로그램을 만들 때, 화면에 “Hello, World!” 문장을 출력하는 프로그램을 만든다.
    • Java에서 화면에 문장을 출력하기 위한 소스코드는 System.out.println();이다. System.out의 의미는 화면에 출력한다는 의미이다. print는 괄호 내부의 대상을 출력하도록 지정하는 것이고, ln은 출력되는 대상이 독립적인 한 줄을 구성하도록 한다는 의미이다. 따라서 print되는 대상이 출력된 후 화면의 줄 개행이 이루어진다. ln이 빠진 System.out,print();와 같은 형식이 될 수도 있는데, 출력된 후 화면의 줄 개행이 이루어지지 않는다.
    • 컴퓨터에 전달되는 정보는 그 개념이 명확히 구분되도록 한다. 이를테면 Hello, World! 문장을 출력하도록 하기 위해 println() 괄호 내에 문장을 입력할 때에는 컴퓨터가 Hello, World!가 ‘문장’임을 인지할 수 있도록 큰따옴표로 묶어 System.out.println(“Hello, World!”);와 같이 전달한다.
    • 왜 화면 출력을 위해서는 println() 괄호 안에 문장을 입력해야 하는가? 컴퓨터가 출력의 범위가 어디까지인지를 인지할 수 있도록 하기 위함이다.
    • ;는 일반적인 문장 문법에서의 마침표(’ . ’)와 같이 하나의 소스코드의 끝을 나타내기 위한 것이다. (cf. Java 소스 코드에서의 마침표 표기는 다른 용도로 사용된다.)
    • 중괄호 { }는 class나 method의 범위를 지정해주는 역할을 한다.
    • Java 소스 코드 파일이 실행되기 위해서는 ‘컴파일' 과정을 거친다. 컴파일이 성공적으로 수행되면 ‘.class’ 파일이 생성된다. (class와 .class 파일의 개념은 구분하도록 한다.) Java 프로그램을 실행하는 것은 .class 파일을 실행하는 것이며, JVM(Java Virtual Machine)에서 실행이 이루어진다. JVM은 .class 파일이 운영체제(Windows, Linux, Mac 등)에 구애받지 않고 동일하게 실행될 수 있도록 하는 일종의 플랫폼으로 볼 수 있다.
    • .java 파일의 컴파일은 Terminal에서 수행할 수 있다. 컴파일을 수행하기 위해서는 Terminal에서 현재 디렉토리를 .java 파일이 위치한 디렉토리로 이동한 뒤 javac 파일명.java를 입력한다. (디렉토리 이동은 cd ‘도착 디렉토리 주소’ 명령어를 이용하여 이동한다. 파일명.java 파일이 위치한 디렉토리 주소는 일반적으로 src이며, 다른 디렉토리에서 컴파일을 수행하기 위해서는 javac ‘파일명.java 파일이 위치한 디렉토리 주소’/파일명.java’를 입력한다.)
    • .class 파일이 생성되는 위치를 지정해 컴파일을 수행하기 위해서는 Terminal에 javac -d ‘.class 파일을 생성시킬 디렉토리 이름’ 파일명.java를 입력한다. (현재 디렉토리가 어디인가에 따라 파일명.java 대신 ‘파일명.java 파일이 위치한 디렉토리 주소’/파일명.java’를 입력해야 할 수도 있다.) .class 파일을 생성시킬 입력한 이름에 맞는 디렉토리가 없을 경우 새 디렉토리가 주어진 이름으로 생성된 뒤 해당 디렉토리 내에 .class 파일이 추가된다.
    • 생성된 .class 파일을 실행하기 위해서는 마찬가지로 Terminal에서 현재 디렉토리를 .class 파일이 위치한 디렉토리로 이동한 뒤 java 파일명을 입력한다.
    • .class 파일이 위치한 디렉토리가 아닌 다른 디렉토리에서 해당 .class 파일을 실행하기 위한 다른 방법으로는 Terminal에 java -—class-path=’파일명.class 파일이 위치한 디렉토리 주소’ 파일명을 입력하는 방법이 있다. (—-class-path=’파일명.class 파일이 위치한 디렉토리 주소' 대신 -cp ’파일명.class 파일이 위치한 디렉토리 주소’를 입력할 수도 있다.)

     

    2. 변수와 타입

    • ‘관심사의 분리’란 프로그램을 구성하는 부분들을 특정하게 정한 기준에 따라 나누는 개념을 의미한다.
    • 프로그램을 구성하는 주요 부분에는 ‘변수'가 있다. 변수도 앞쪽에 꾸며주는 것들이 오고, 뒤쪽에 개별적인 이름이 붙는다. (ex. String name;)
    • String과 같이 변수 앞쪽에서 꾸며주는 것들을 ‘타입’(Type)이라고 하며, (’형식’이라고도 지칭한다.) 변수가 다루는 데이터(값)의 종류를 의미한다.
    • 변수의 종류에는 숫자, 문자, 문자열 등이 있을 수 있다. String은 변수의 종류가 문자열임을 의미한다.
    • 리터럴(Literal)이란 값을 표현하는 방법을 의미한다. 이를테면 숫자를 나타내기 위해서는 1 2 17 이런 식으로 숫자만을 써서 나타내고, 문자를 나타내기 위해서는 ‘h’ ‘E’ ’3’ ’%’이런 식으로 작은따옴표로 문자를 둘러싸 나타내며, 문자열을 나타내기 위해서는 “inu” “Hello, Megaptera” 이런 식으로 큰따옴표로 문자열을 둘러싸 나타낸다.
    • 변수에 값을 입력하기 위해서는 (ex. String name = “inu”;)와 같이 입력한다. 변수는 어떠한 값이 개별적인 이름을 갖는 것이라고 생각해볼 수 있다. 위 소스코드의 예시는 “inu”라는 문자열 값이 name이라는 이름을 갖는 것이라고 볼 수 있으며, 이후에 name이라는 이름이 나오게 되면 이들은 모두 “inu”라는 값을 나타내게 된다.
    • 변수는 반드시 타입을 지정해줘야 한다. Java에는 다음과 같은 타입들이 존재한다.
      • byte: 8bits (1byte) 2진수로 나타낼 수 있는 정수형 값 (정수형 값은 소수점 아래 값을 나타낼 수 없다.)
      • short: 16bits (2bytes) 2진수로 나타낼 수 있는 정수형 값
      • int: 32bits (4bytes) 2진수로 나타낼 수 있는 정수형 값, 정수형 변수 중 가장 일반적으로 사용된다.
      • long: 64bits (8bytes) 2진수로 나타낼 수 있는 정수형 값
      • float: 32bits (4bytes) 부동소수점 형태로 나타낼 수 있는 실수 값
      • double: 64bits (8bytes) 부동소수점 형태로 나타낼 수 있는 실수 값
      • char: 16bits (2bytes) 문자
      • boolean: 참(true), 거짓(false)
      • String: ‘n’bytes 가변 길이(크기) 문자열
    • 문자 및 문자열에서는 ‘공백’을 표현할 수 있다. (ex. 문자열 “ “는 공백 한 칸을 나타낸 문자열이며, 문자열 “inu “에서는 글자 inu 뒤의 공백 한 칸까지도 문자열에 포함된다.)
    • cf. 최신 버전의 Java는 var 타입을 지원하는데, var 타입은 변수에 주어지는 값을 추론하여 적절한 타입을 스스로 지정한다.
    • 숫자 변수들끼리는 수학 기호들을 이용한 사칙 연산을 통해 결과값을 표현하는 것이 가능하다. 문자열끼리 덧셈 연산을 수행할 경우에는 문자열들이 순서대로 연결된다. (ex. String name = “inu”; System.out.println(”Hello, “ + name + "!");을 실행했을 때의 출력값은 Hello, inu!이다. 이는 프로그래밍 언어에 따라 차이가 있을 수 있다.)
    • 화면에 어떤 문자열을 출력하는 것에서 관심사를 분리하는 경우를 생각해보면, 변수를 이용하여 출력하고 싶은 문자열을 정할 수 있고, 출력 기능에 해당 변수를 입력하여 실제 출력을 수행하는 방식으로 관심사가 분리되어질 수 있다.
    • 관심사의 분리는 프로그램의 구조를 논리적으로 구성한다는 데 의의가 있다. 프로그램이 커지고 복잡해질수록 관심사를 어떻게 분리할 것인가가 중요한 이슈로 작용할 것이다.
    • ‘주석'이란 주석으로 나타내는 내용이 프로그램에 해당하지 않음을 의미한다. 일반적으로 소스 코드 내에 설명 등을 첨부할 때 활용된다. 한 줄에서 // 오른쪽에 입력되는 내용은 모두 주석 처리된다.
    • ‘기본값(Default)’은 변수에 값이 입력되지 않았을 때 기본으로 주어져 있는 값을 의미한다. 숫자 변수의 기본값은 0, 문자열 변수의 기본값은 “”(빈 문자열)이다. (ex. String name;은 String name = “”;와 같다.)
    • Java 프로그램은 .java 파일에 쓰여진 소스코드의 순서대로 수행된다. 소스코드를 입력할 때에는 순서를 고려해야 한다.

     

    3. 입출력

    • Java에서 사용자로부터 입력을 받기 위해서는 Scanner라는 ‘도구’를 ‘가져다가’ ‘만들어서’ 사용한다.
    • ‘객체'를 도구라고 생각해볼 수 있다. Scanner라는 형태의 객체를 만들기 위해서는 먼저 Scanner라는 본질, 즉 Scanner 타입이 무엇인지 알아야 할 필요가 있다.
    • Scanner는 누군가 미리 만들어놓은 타입들 중 하나로, import java.util.Scanner; 소스코드를 입력하여 Scanner 타입을 가져올 수 있다. Java에서(java) 기본적으로(util) 만들어놓은 Scanner라는 의미이다.
    • Scanner라는 본질을 앎으로써 Scanner가 무엇이고 어떤 특성을 갖는지까지는 알 수 있으나, 우리가 ‘형체가 있는’ Scanner를 직접적으로 사용하기 위해서는 그 Scanner라는 본질을 갖는 ‘구체적인 존재가 있어야만’ 가능할 것이다.
    • Scanner라는 ‘구체적인 존재’를 만들기 위해 new를 사용한다. new는 일종의 추상적인 개념을 실재하도록 만들어내는, 달리 말해 타입을(클래스를) 실체화시키는(인스턴스화하는) 과정이다. Scanner는 어딘가에서 값을 가져오는 도구이므로, 입력을 어떻게 받는지에 대한 정보가 주어져야 한다. 키보드로 입력을 받는 것을 Java에서는 System.in으로 나타낸다. (ex. Scanner scanner = new Scanner(System.in);) (대문자와 소문자를 구분하여 보도록 한다.)
    • cf. Scanner처럼 이미 만들어져 있는 타입들의 경우, 개발 환경 프로그램에 따라 해당 타입의 객체를 new를 이용하여 생성할 때 import를 미리 하지 않았더라도 import를 추천해 주기도 한다.
    • 구체적으로 만들어진 존재 scanner로부터 입력을 가져와 변수에 가져온 값을 주기 위해서는 nextLine() method를 이용한다. (ex. String name = scanner.nextLine()) 해당 소스코드가 포함된 프로그램은 Terminal 등지에서 프로그램이 실행될 때 사용자로부터 입력을 받아야 다음 소스코드를 진행하므로 사용자가 이를 인지할 수 있게끔 하는 메세지를 먼저 출력해주는 것이 좋을 것이다.
    • ‘입력을 받은 뒤 출력'하는 형태는 일반적으로 프로그램이 구성되는 형태 중의 하나이다.
    • Terminal에서 프로그램을 실행하는 중에 Ctrl + C 키를 눌러 실행되던 프로그램을 강제 종료시킬 수 있다.

     

     

     

    '학습 관련 기록' 카테고리의 다른 글

    컨테이너, Docker 기초 학습  (0) 2023.04.03
    컴퓨터의 이해  (0) 2022.05.08

    댓글

Designed by Tistory.