본문 바로가기

STUDY/국비교육

[Java 웹 프로그래밍] 국비지원 1일차 - Java 설치, Eclipse 설치, 자바, JVM, 변수, Scanner

프로그래밍이란 무엇일까?

프로그래밍이란 프로그램을 만드는 일이다. 프로그램은 컴퓨터에게 내리는 명령어의 모음을 말하고, 명령어 모음을 만드는 일을 프로그래밍이라고 한다. 이 프로그램이 모여서 소프트웨어가 된다.

즉, 프로그래밍은 소프트웨어를 만드는 과정이고, 만들 때 사용하는 도구를 프로그래밍 언어라고 한다.

 

 

 

Java 

자바 프로그램은 운영체제나 하드웨어에 의존하지 않는 바이트 코드로 구현된다. 따라서 자바 프로그램을 실행하기 위해서는 JVM과 라이브러리와 컴파일러의 환경만 맞추면 모든 환경에서 동일하게 동작한다.

 

 

 

Java 특징

객체지향 프로그래밍 언어(OOP, Object Oriented Programming)

  • 유지보수가 쉽고 직관적인 코드 분석이 가능하다.
  • 설계도인 클래스를 작성하여, 객체와 객체를 연결하여 목적에 맞는 프로그램을 완성한다.

분산 네트워크 기술 지원

  • TCP/IP 라이브러리가 기본적으로 포함되어 있고, HTTP 프로토콜을 지원한다.

멀티쓰레드 지원

  • 동일한 쓰레드를 동시에 수행할 수 있다.
  • 사용자 인터페이스 쓰레드와 장시간 계산이 필요한 쓰레드가 동시에 필요할 때 효과적이다.

이식성이 높다.

  • JVM에서 작동하기 때문에 운영체제의 종류에 상관없이 작동한다.

자동 메모리 관리

  • 객체 생성시 자동으로 메모리 영역을 찾아서 할당하고, 사용이 완료된 객체는 Garbage Collector를 실행시켜 자동으로 메모리에서 체크하고 반환해준다.
  • 자바는 개발자가 직접 메모리에 접근할 수 없으며, 메모리는 자바가 직접 관리한다.

동적 로딩 지원

  • 프로그램 실행시 모든 클래스가 로딩되지 않고, 필요한 시점에 클래스를 로딩하여 사용할 수 있다.
  • 애플리케이션의 변경사항도 비교적 적은 작업만으로 처리할 수 있다.

오픈소스 라이브러리가 풍부하다.

  • 자바는 오픈소스 언어이고 자바 프로그램에서 사용하는 라이브러리 또한 오픈소스 양이 방대하다.
  • 고급 기능을 구현하는 코드를 작성하는 대신 검증된 오픈소스 라이브러리를 사용하면 애플리케이션을 다시 컴파일 할 필요가 없다. 따라서 유지보수를 쉽고 빠르게 할 수 있다.

 

 

 

JVM

자바 가상 머신(Java Virtual Machine)은 자바 가상 운영체제로 자바 프로그램을 시행해준다.

JVM 실행부분에서는 컴파일된 .class 파일을 어떤 처리를 거쳐 프로그램을 실행하는 과정이다.

JVM 실행 부분

 

 

 

JVM 동작 방식

자바 애플리케이션을 클래스 로더를 통해 읽어 자바 API와 함께 실행하는 것이다.

JVM 동작 방식

 

  1. 자바 프로그램을 실행하면 JVM은 OS로부터 메모리를 할당받는다.
  2. 자바 컴파일러(javac)가 자바 소스코드(.java)를 자바 바이트 코드(.class)로 컴파일 한다.
  3. 클래스 로더는 동적 로딩을 통해 필요한 클래스들을 로딩 및 링크 하여 Runtime Data Area(실질적인 메모리를 할당 받아 관리하는 영역)에 올린다.
  4. Runtime Data Area에 로딩 된 바이트 코드는 Execution Engine을 통해 해석된다.
  5. 이 과정에서 Execution Engine에 의해 Garbage Collector의 작동과 Thread 동기화가 이루어진다. 

 

Class Loader 메모리 적재
Runtime Data Area 각 영역 관리
Execution Engine 자바 바이트 코드 읽고 실행

 

 

 

 

JVM 구조

JVM 구조

 

JVM은 다음과 같이 구성되어 있다.

  • 클래스 로더(Class Loader)
  • 실행 엔진(Execution Engine)
    • 인터프리터(Interpreter)
    • JIT 컴파일러(Just-In-Time)
    • 가비지 콜렉터(Garbage Collector)
  • 런타임 데이터 영역(Runtime Data Area)
    • 메소드 영역
    • 힙 영역
    • PC Register
    • 스택 영역
    • 네이티브 메소드
  • JNI - 네이티브 메소드 인터페이스(Native Method Interface)
  • 네이티브 메소드 라이브러리(Native Method Library)

 

각각 하는 일에 대해서도 추후 공부해보자.

 

☕ JVM 내부 구조 & 메모리 영역 💯 총정리

저번 포스팅에서는 JRE / JDK / JVM에 대해서 간략하게 알아보는 시간을 가졌다면, 이번 포스팅에서는 JVM의 내부 구조에 대해 좀 더 자세하게 알아보도록 할 예정이다. JVM(자바 가상 머신)은 자바 언

inpa.tistory.com

 

 

 

JRE

자바 실행 환경(Java Runtime Envirenment)은 JVM을 생성해주는 부분으로 JVM에서 실행할 때 필요한 라이브러리 파일들과 기타 파일들을 포함한다.

 

 

 

JDK

자바 개발 도구(Java Development Kit)는 자바 프로그램을 생성할 때 도움이 되는 것들 JRE외에도 개발에 필요한 도구들을 가지고 있다.

 

 

 

Java 설치

jdk 17 download

x64 MSI Installer

https://www.oracle.com/kr/java/technologies/downloads/#jdk17-windows

 

Download the Latest Java LTS Free

Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts.

www.oracle.com

 

 

명령프롬프트 열어서 잘 다운 받아졌는지, 확인해준다.

cmd

 

 

 

통합 개발 환경(IDE) - eclipase 설치 (설치 이유: 무료)

홈페이지에 들어가서 Donwload Packages 클릭 > 우측 하단에 eclipase 2022-12 (4.26) 버전으로 클릭한다.

이후 Eclipse IDE for Enterprise Java and Web Developers 에서 각 운영체제에 맞게 다운로드해준다.

 

 

 

Eclipse IDE for Enterprise Java and Web Developers

https://www.eclipse.org/downloads/packages/release/2022-12/r

 

2022-12 R | Eclipse Packages

516 MB 379,399 DOWNLOADS Tools for developers working with Java and Web applications, including a Java IDE, tools for JavaScript, TypeScript, JavaServer Pages and Faces, Yaml, Markdown, Web Services, JPA and Data Tools, Maven and Gradle, Git, and more. Cli

www.eclipse.org

 

 

 

자바 프로그램의 구조

프로젝트 > 패키지 > 클래스 > 메소드 > 소스코드

출력 메소드 System.out.print 를 이용하여 콘솔에 출력해보자.

public class PrintTest1 {
	public static void main(String[] args) {

		System.out.println("Hello World!");
	}
}

 

  • .print(값)
  • .println(값)
  • .printf(서식문자열) f = format 서식

 

형식화된 출력 printf()

기본 출력문인 println()은 변수의 값을 그대로 출력하므로, 값을 변환하지 않고는 다른 형식으로 출력할 수 없다. 반면에 printf()은 지시자(서식문자)를 통해 변수의 값을 여러 가지 형식으로 변환하여 출력할 수 있다.

 

출력문 printf 를 이용하여 콘솔에 1 +1 = 2 를 출력해보자.

System.out.printf("출력 서식", 출력할 내용);

//1 + 1 = 2
System.out.printf("%d + %d = %d",1,1,1+1);

 

  • 출력 후 줄바꿈을 하지 않는다. 줄바꿈을 하려면 지시자 '%n'을 넣어줘야 한다.
  • 출력하려는 값의 수만큼 지시자도 사용해야 한다.
  • 출력될 값과 지시자의 순서는 일치해야 한다.
  • 지시자를 제외한 문자는 입력한 그대로 출력된다.

 

서식 문자

  • 출력을 나타내는 서식(틀)이다.
  • 따옴표 안에 존재한다.
  • %와 함께 쓰인다.
  • 타입이 맞지 않으면 오류가 발생한다.
지시자(서식문자) 설명
%b boolean 형식으로 출력
%d 정수 형식으로 출력
%o 8진수 정수의 형식으로 출력
%x 또는 %X 16진수 정수의 형식으로 출력
%f 소수점 형식으로 출력
%c 문자 형식으로 출력
%s 문자열 형식으로 출력
%n 줄바꿈 기능
%e 또는 %E 지수 표현식의 형식으로 출력

 

public class Printf {

	public static void main(String[] args) {
		
		int age = 20;
		String addr = "서울시 강남구";
		
		// %n 지시자 사용 X
		System.out.printf("줄");
		System.out.printf("바꿈");
		
		// %n 지시자 사용 O
		System.out.printf("줄%n");
		System.out.printf("바꿈%n");

		
		System.out.printf("나이는 %d살 입니다.%n", age);
		System.out.printf("나이는 %d살이고, %s에 살고 있습니다.%n", age, addr);
	}
}

출력값

 

  • 실행 결과 %n 지시자를 사용한 곳에서 줄바꿈 기능을 하는 것을 볼 수 있다.
  • 지시자의 수와 출력하려는 값의 수는 같아야 하며 출력하려는 값은 콤마로 구분한다.
  • 출력하려는 값은 지시자의 순서와 같아야 한다.
  • 지시자의 형식과 출력하려는 값의 형식이 같지 않으면 에러가 발생한다. 
    • 아래 사진과 같이 문자열 형식으로 출력하는 지시자 %s 를 사용하지 않아서 에러가 발생했다. 
    • IllegalFormatConversionException 로 포맷 문자열과 인자의 유형 불일치인 경우에 발생한다.

 

 

 

 

제어 문자

  • 출력을 제어해주는 문자이다.
  • \ 와 함께 쓰인다.
  • 따옴표 안에 존재한다.
  •  
제어 문자
\n 줄 바꿈, enter 기능
\t 탭 기능
\" 큰 따옴표(") 출력
\' 작은 따옴표(') 출력
\\ 역슬래시(\) 출력

 

 

 

변수

프로그래밍 언어에서 변수는 데이터를 저장할 수 있는 "메모리상의 공간"을 의미한다. 변수에는 데이터 타입과 일치하는 단 하나의 값만 저장할 수 있다.

 

자바의 데이터 타입은 기본형과 참고형으로 나뉘어진다. 이 두 가지를 통틀어 자료형(data type)이라고 표현한다. 

형태 예약어 크기(byte) 데이터 표현(저장) 범위
정수형 byte 1 -128 ~ 127
  short 2  
  int 4  
  long 8  
실수형 float 4  
  double 8  
문자형 char 2  
문자열 String ???  
논리형 boolean 1 bit true, false

 

  • bit : 0 또는 1을 담을 수 있는 저장 공간의 최소 단위
  • byte: 8bit, 의미를 가질 수 있는 최소 단위, 데이터의 최소 단위

 

 

 

입력 Scanner

자바에서는 Scanner 클래스를 사용하여 사용자로부터 값 입력받을 수 있다. 기본적인 데이터 타입을 모두 입력받을 수 있고, 토큰을 기준으로 데이터를 입력 받는다. 

* 토큰이란 공백 문자(Spacebar), 탭(Tab), 개행(Enter) 등으로 구분되는 요소이다.

Scanner 호출

Scanner 를 사용하기 위해서 import를 통해 호출한다. java.util 패키지에 포함되어 있으므로 다음과 같이 불러온다.

import java.util.Scanner;

 

Scanner 객체 생성

sc라는 객체를 생성하여 System.in으로 입력한 값을 바이트 단위로 읽는 것을 의미한다.

Scanner sc = new Scanner(System.in);

 

Scanner  메소드

Scanner 는 각 상황에 따라서 다양한 메소드를 제공한다. 

 

next()
통째로 사용자가 입력한 문자열 값으로 공백 또는 엔터를 구분점으로 판단하고 분리하여 입력받는다.
예를 들어, 홍 길동 : "홍", "길동" 로 분리하여 "홍" 만 입력받는다.

 

nextLine()

한 줄 통째로 사용자가 입력한 문자열 값을 받아온다. 

 

nextInt()

 사용자가 입력한 정수 값을 받아온다.

 

import java.util.Scanner;

public class ScannerEx {
	
	public static void main(String[] args) {
		// nextInt() 예시
		Scanner sc = new Scanner(System.in);
		System.out.print("숫자를 입력하세요: ");
		int num = sc.nextInt();
		System.out.println(num);
		
		
		// nextLine() 예시
		Scanner sc2 = new Scanner(System.in);
		System.out.print("이름을 입력하세요: ");
		String str = sc2.nextLine();
		System.out.println(str);
		
	}
}

출력값

 

 

 

개인적으로 공부할 내용

  • OS 운영체제
  • CS

 

 

 

참고한 블로그

 

☕ JVM 내부 구조 & 메모리 영역 💯 총정리

저번 포스팅에서는 JRE / JDK / JVM에 대해서 간략하게 알아보는 시간을 가졌다면, 이번 포스팅에서는 JVM의 내부 구조에 대해 좀 더 자세하게 알아보도록 할 예정이다. JVM(자바 가상 머신)은 자바 언

inpa.tistory.com

 

 

[Java 10] 자바의 출력문(println, printf)

No. 01 출력 - println() 개발자가 열심히 프로그래밍을 하더라도 결과를 볼 수 있는 명령문을 실행하지 않으면 절대 직접 눈으로 볼 수 없다. 결과를 봐야 이 프로그램이 내가 생각한대로 잘 돌아가

keep-cool.tistory.com

 

 

[Java/자바] Scanner 클래스 (입력받기)

Scanner 클래스란? Scanner란 사용자로 부터 입력을 받을 수 있도록 도와주는 것으로, 간단한 예시를 보자면, 사용자가 게임에 로그인하기 위해, 아이디와 비밀번호를 입력하는 것과 같습니다. Scanner

hstory0208.tistory.com