📝 TIL

[TIL] Java 개발 환경 설정, 데이터 타입, 입출력

오늘 ONEUL 2022. 5. 9. 21:27

✍ Today I Learned

  • 자바로 개발하기 위해서는 통합개발환경이 필요하다. (이클립스, 안드로이드 스튜디오)
  • 통합개발환경에는 자바 컴파일이 포함되어 있지 않으므로 JDK라는 별도의 개발 도구를 설치해야 한다.
  • JDK란? Java SDK(Software Development Kit)의 줄임말로 자바 개발 도구 모음을 의미한다. (자바 라이브러리, 컴파일러, JRE(JVM, Java Plugin, 유틸리티) 등을 포함)
  • JVM이란? Java Virtual Machine의 줄임말로 자바 바이트코드를 해석하고 실행한다. 자바는 WORA(Write Once Run Anywhere)를 구현하기 위해 물리적인 머신과 별개의 가상 머신을 기반으로 동작하도록 설계되었다. 따라서 자바 바이트코드를 실행하고자 하는 모든 하드웨어에 JVM을 동작시키면 자바 실행 코드를 변경하지 않고도 모든 종류의 하드웨어에서 동작한다.
  • 자바는 1991년 Sun Microsystems에서 개발했고, 이후 오라클이 인수하였다.
  • SE는 상업용으로 이용 시 유료이지만, 문제가 발생하면 오라클이 책임진다. Open JDK는 간단하게 as가 안된다고 생각하면 된다.
  • 기존에 깔려있던 Java17 버전 삭제(프로그램 추가/제거)하고, Java8 버전 JDK를 다운로드하여 설치 후 환경변수 설정을 해주었다.
  • 환경변수(Environment variable)란? 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값이다. OS상에서 동작하는 응용프로그램들이 참조하기 위한 설정이 기록된다. 환경변수에는 2가지가 있다.
    • 사용자 변수 - OS내의 사용자 별로 다르게 설정 가능한 환경변수
    • 시스템 변수 - 시스템 전체에 모두 적용되는 환경변수
  • Path란? 자주 사용하는 프로그램의 경로를 Path에 등록시켜두면 그 경로에 존재하는 프로그램을 어떠한 장소에서든 실행시킬 수 있도록 해주는 것이다.
  • 우리는 항상 GUI(Graphical User Interface) 환경에서만 작업할 수 없기 때문에 CLI(Command Line Interface) 환경에서도 자바 파일들을 자유자재로 다룰 수 있어야 한다.
  • cmd를 관리자 모드로 변경하고 java -version 명령어로 잘 설치되었는지 확인!

java -version

  • 이클립스는 uninstall이 따로 없기 때문에 관련 폴더만 삭제한 후, 2021-03 버전으로 다시 다운로드하였다.
  • Open Perspective는 Java EE -> Java로 변경하였다.
  • 기본 설정으로 Window -> Preferences에서 encoding 관련 default를 UTF-8로 변경하였다.
  • 레이아웃을 개발환경에 맞게 설정하였다.
  • 첫 프로젝트를 생성하고, JRE를 8 버전으로 맞춰주었다.
  • 이 버전을 맞추는 일이 굉장히 중요하다는 걸 깨달았다. 뭐 하나 수틀리면 바로 에러 난다.
  • 생성한 프로젝트에서 새로운 패키지를 생성한다. (like 폴더)
  • 이후 클래스를 생성한다. 이때 클래스 이름은 항상 대문자로 시작해야 하고, 숫자로 시작할 수 없다.
  • 같은 패키지 안에 같은 이름의 클래스는 존재할 수 없다.
  • 자바 파일의 이름은 클래스 이름과 일치해야 한다.
  • 자바는 실행되면 제일 먼저 main 메서드를 실행한다. 그래서 반드시 main 메서드가 필요하다.
  • 그럼 웹에서는? 웹에서는 html이 시작점이기 때문에 main 메서드가 없다.
  • 자바에는 function이 없다. 전부 다 소속이 있는 메서드다.

 

[출력 Print]

public class Main {
  public static void main(String[] args) {
    System.out.println("Hello World!");
  }
}
  • System.out.println() - System.out은 PrintStream 클래스의 객체이다. 주로 콘솔에 문자열을 출력하거나 디버깅 시 많이 사용된다.
  • System.out.print() - 위와 동일하나 출력 끝에 새 줄을 삽입하지 않는다.
  • System.out.printf("출력 서식", 출력할 내용) - 지시자를 통해 변수의 값을 여러 가지 형식으로 변환하여 출력할 수 있다.
    • 문자 : %s, 정수 : %d, 실수 : %f
    • printf("이름 : %s", "오늘");
  • 이클립스의 단축키는 syso까지 입력하고 ctrl + space
  • 문자열 출력은 큰따옴표 안에서!

 

[데이터 타입 Data Type]

  • int - 정수형(32bit)
  • long - 정수형(64bit), long 변수에 값을 대입할 때는 대입하는 숫자 값이 int 자료형의 최댓값인 2147483647 보다 큰 경우 L 접미사를 붙여 주어야 한다.
  • float - 실수형(32bit) 실수형은 디폴트는 double이므로 float 변수에 값을 대입할 때에는 F 접미사를 붙여 주어야 한다.
  • double - 실수형(64bit)
  • boolean - true or false
  • char - 단일 문자형(2byte), 홑 따옴표 사용(char 변수에 숫자를 대입하면 아스키코드 값으로 인식한다.)
  • String - 문자열, 큰따옴표 사용(원래 참조자료형이지만 사용빈도가 높기 때문에 기본 자료형처럼 사용 가능하게 만들었다.)
  • 기본 유형은 소문자로 시작하고 기본 유형이 아닌 유형은 대문자로 시작한다.

 

[변수 Variable]

  • 변수의 데이터 타입을 먼저 지정하고 값을 초기화한다.
String str; // 변수 선언
str = "변수를 문자로 초기화";
String str2 = "변수 선언 및 초기화";
int num = 100;
System.out.println(str + " " + str2 + 100);
//변수를 문자로 초기화 변수 선언 및 초기화100

 

[입력 Input]

  • Scanner 클래스를 이용하여 사용자에게 입력받는다.
  • Scanner를 사용하기 위해서는 먼저 java.util.Scanner 클래스를 import 해야 한다.
  • Scanner 객체의 next() 메서드는 단어 하나(Token)를 읽어 들인다. 입력받는 데이터 타입에 따라 여러 메서드가 존재한다(nextInt(), nextLine() 등)
import java.util.Scanner;

public class InputData {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("숫자를 입력하세요! >");
        int data = sc.nextInt();
        System.out.println("연산결과 :" + (100 + data)); // 연산은 괄호가 중요
    }

}
  • 연습 문제를 풀다가 마지막 줄의 nextLine()을 입력받지 못하는 상황이 발생하였다. 구글링 해 본 결과 next()nextLine()은 new line의 입력에 따라 나뉘었는데 내용은 다음과 같다.
next()는 개행문자(Enter)를 무시하고 입력을 받고 nextLine은 한줄 단위로 입력을 받기 때문에 개행문자(Enter)도 포함한다.
좀 더 직관적으로 설명하자면 위 처럼 1234를 입력하고 Enter를 쳤다면 버퍼에 1234\n이 존재한다. 이 때 nextInt()가 버퍼의 내용을 가져올 때 분리자를 제외하고 가져오기 때문에 1234만 가져오게 된다. 그러면 버퍼에 \n이 남아있게 되는데 nextLine()은 공백과 개행문자(Enter)인 분리자를 포함시키기 때문에 \n만 가져오고 프로그램이 종료되는 것이다.

출처 : https://velog.io/@alswp2274/JAVA-next-nextLine%EC%9D%98-%EC%B0%A8%EC%9D%B4

  • 자바는 객체가 아닌 것이 없다. 객체 '기반' 프로그램이다.