Don't Panic
in Java ☕ 7분 읽기

[Java] java 기초

목차

01. 자바 프로그래밍 시작하기

프로그래밍이란?

  • 프로그래밍: 컴퓨터가 일을 수행하도록 프로그래밍 언어로 명령어 집합(프로그램)을 만드는 일
  • 컴파일: 프로그래밍 언어를 컴퓨터가 실행 가능한 기계어로 만드는 일
  • 컴파일러: 기계어로 바꾸어 주는 프로그램 (예: 자바 컴파일러, gcc)

자바 프로그래밍

  • 자바의 역사: 1991년 제임스 고슬링을 비롯한 선 마이크로시스템스 연구원들이 처음 개발했다. 가전, 휴대용 장치에 사용되는 소프트웨어 언어로 개발되어 안정성이 중요했다.
  • 자바 프로그래밍의 특징
    • 플랫폼에 영향을 받지 않으므로 다양한 환경에서 사용할 수 있다.

자바 가상 머신(JVM) 구조

  • 객체 지향 언어이기 때문에 유지보수가 쉽고 확장성이 좋다.
  • 프로그램이 안정적이다.
  • 풍부한 기능이 제공되는 오픈 소스이다.

객체 지향 프로그래밍이란?

  • 프로그램의 구현을 시간의 흐름 순이 아닌, 객체 간의 관계와 협력을 기반으로 프로그래밍하는 것이다.
  • Object Oriented Programming(OOP)이라고 한다. (cf. 절차 지향 프로그래밍, procedural programming)
  • 사용하는 언어: Java, C++, C#, Python, JavaScript, Ruby 등 다수

자바로 프로그래밍을 하면 좋은 이유 (객체 지향 프로그래밍의 장점)

자바를 사용하는 이유

자바를 활용한 프로그래밍

  • 웹 서버 구현
  • 안드로이드 프로그래밍
  • 게임 프로그래밍

이 과정에서 배워야 할 내용

  • 자바 언어 익히기 (문법)
  • 객체 지향 프로그래밍 개념을 익히고 자바로 구현하기
  • 자료 구조의 필요성을 이해하고 구현하기
  • 자바 언어의 정확한 이해를 통한 문제 해결하기 (객체지향, 알고리즘 문제 등)

용어 정리

용어설명
JDK (Java Development Kit)자바에서 제공되는 개발용 라이브러리. 계속 버전이 올라가고 있음
JRE (Java Runtime Environment)자바 프로그램이 실행되는 환경. 8.0까지 무료로 제공됨
JVM (Java Virtual Machine)자바 가상 머신. 실행 환경인 JRE가 설치되어 있어야 함

02. 자바와 이클립스 설치하기

1. 자바 설치하기

자바는 유료화 이후 JRE는 8.0까지만 무료로 제공된다.

2. 이클립스 설치하기

이클립스는 지속적으로 업그레이드된다.


03. 자바 첫 프로그램 만들고 실행하기

첫 프로그램 “Hello, Java” 출력하기

package ch01;

public class HelloJava {

	public static void main(String[] args) {
		System.out.println("Hello, Java");
	}
}

04. 컴퓨터에서 자료 표현하기

2진수로 표현

  • 0과 1로만 데이터를 저장한다.
  • bit(1비트): 컴퓨터가 표현하는 데이터의 최소 단위로, 2진수 하나의 값을 저장할 수 있는 메모리의 크기
  • byte(바이트): 1byte = 8bit

2진수와 10진수

2진수와 10진수

2진수와 8진수, 16진수

2진수와 8진수, 16진수

8비트로 5를 표현해 보면…

8비트로 5 표현하기

비트로 나타낼 수 있는 수의 범위는?

  • 1개의 비트로 나타낼 수 있는 수: 0, 1 (2개)
  • 2개의 비트로 나타낼 수 있는 수: 00, 01, 10, 11 (4개)
  • 3개의 비트로 나타낼 수 있는 수: 000, 001, 010, 011, 100, 101, 110, 111 (8개)

2진수, 8진수, 16진수를 프로그램에서 사용하는 예제

package ch04;

public class BinaryTest {

	public static void main(String[] args) {
		int num = 10;
		int bNum = 0B1010;
		int oNum = 012;
		int xNum = 0XA;


		System.out.println(num);
		System.out.println(bNum);
		System.out.println(oNum);
		System.out.println(xNum);
	}
}

05. 변수(Variable)는 변하는 수입니다

변수는 언제 쓰나요?

  • 프로그램에서는 항상 변하는 값을 나타낼 필요가 있다. (예: 학생의 성적, 합계, 게임의 레벨, 회원 주소 등)
  • 표현하려는 수에 맞는 데이터 타입(자료형)을 이용하여 변수를 선언한다.
  • 표현하려는 자료가 숫자, 문자, 문자열 등 다양할 수 있으므로 그에 맞는 자료형을 사용한다.

변수 선언과 사용하기 예제

  • 변수 선언은 자료형 변수명 형태로 한다.
  • 선언과 동시에 초기화할 수 있다.
package ch05;

public class VariableTest {

	public static void main(String[] args) {
		int age, count;
		age = 10;

		int level = 10000;
		System.out.println(age);
		System.out.println(level);
	}
}

변수 이름을 만들 때

  • 변수 이름은 영문자(대문자, 소문자)나 숫자를 사용할 수 있고, 특수문자 중에는 $_만 사용할 수 있다. (예: count100, _master)
  • 변수 이름의 시작은 숫자로 할 수 없다. (예: 27days(X), 1abc(X))
  • 자바에서 이미 사용하고 있는 예약어는 사용할 수 없다. (while, break 등)
  • 변수 이름은 그 용도에 맞고 가독성이 좋게 만드는 것이 중요하다. (예: int numberOfStudent;)

06. 자료형(data type) - 정수는 어떻게 표현하나요?

변수와 메모리

  • 변수를 선언하면 해당 자료형의 크기만큼 메모리가 할당된다.
  • 변수는 할당된 메모리를 가리키는 이름이다.
int level = 10; // 4바이트 정수형 메모리가 level 이라는 이름으로 할당 됨

기본 자료형(primitive data type)의 종류

기본 자료형의 종류

정수 자료형의 종류와 크기

정수 자료형의 종류와 크기

byte와 short

  • byte: 1바이트 단위의 자료형. 동영상, 음악 파일, 실행 파일의 자료를 처리할 때 사용
  • short: 2바이트 단위의 자료형. C/C++ 언어와 호환 시 사용

int

  • 자바에서 사용하는 정수에 대한 기본 자료형
  • 4바이트 단위의 자료형
  • 프로그램에서 사용하는 모든 숫자(리터럴)는 int로 저장됨
  • 32비트를 초과하는 숫자는 long 자료형으로 처리

long

  • 8바이트 자료형
  • 숫자의 뒤에 알파벳 L 또는 l을 써서 long 형임을 표시함
  • 예시:
int num = 12345678900;        // 오류
long lnum = 12345678900;      // 오류
long lnumber = 12345678900L;  // ok

07. 자료형(data type) - 실수는 어떻게 표현하나요?

부동 소수점 방식

  • 실수는 정수보다 정밀하기 때문에 정수와는 다른 방식으로 표현해야 한다.
  • 부동 소수점 방식으로 실수 값 0.1을 표현한 예시:

부동 소수점 방식 표현

  • 지수부와 가수부로 표현한다.
  • 컴퓨터에서는 밑수를 2로 사용한다.
  • 정규화: 가수가 밑수보다 작은 한 자리까지 가수로 표현되는 것
  • 컴퓨터에서는 밑수가 2이므로, 정규화를 하면 가수 부분의 첫 번째 자리 숫자는 항상 1이다.
    • 예) 0.2 표현: 0.4 X 2-1 → 정규화하면 1.6 X 2-3

float형과 double형

float형과 double형

자바에서 실수의 기본 타입은 double을 사용한다.

float와 double 예제

   package ch07;

   public class DoubleTest {

	   public static void main(String[] args) {
		   double dnum = 3.14;
		   float fnum = 3.14F;

		   System.out.println(dnum);
		   System.out.println(fnum);
	   }
   }

부동 소수점 방식의 오류

지수와 가수로 나타내는 부동 소수점 방식에서는 지수부가 0을 표현할 수 없기 때문에 약간의 오차가 발생할 수 있다.

   public class DoubleTest2 {

	public static void main(String[] args) {

		double dnum = 1;

		for(int i = 0; i<10000; i++) {
			dnum = dnum + 0.1;
		}
		System.out.println(dnum);
	}
}

출력 결과:

부동 소수점 오차 출력 결과


08. 자료형(data type) - 문자는 프로그램에서 어떻게 표현하나요?

문자도 정수로 표현합니다

  • 어떤 문자를 컴퓨터 내부에서 표현하기 위해 특정 정수 값을 정의한다.
  • 예: A는 65

문자 인코딩

  • 문자세트(character set): 각 문자를 얼마로 표현할 것인지, 코드 값을 모아둔 것 (예: ASCII, euc-kr, utf-8, utf-16)

자바에서는 문자가 어떻게 표현되나요?

  • 자바는 문자를 나타내기 위해 전 세계 표준인 UNICODE를 사용한다.
  • utf-16 인코딩을 사용한다. (모든 문자를 2바이트로 표시)

문자형 변수 선언과 사용하기

  • 문자를 위한 데이터 타입은 char이다.
char ch = 'A';
  • 내부적으로 숫자로 표현되므로 숫자를 넣어도 문자가 출력될 수 있다.
char ch2 = 66;
package ch08;

public class CharacterTest {

	public static void main(String[] args) {

		char ch1 = 'A';
		System.out.println(ch1);
		System.out.println((int)ch1);

		char ch2 = 66;
		System.out.println(ch2);

		int ch3 = 67;
		System.out.println(ch3);
		System.out.println((char)ch3);

		//char ch4 = -66;  음수는 대입 할 수 없음

    		char ch5 = '한';
		char ch6 = '\uD55C';

		System.out.println(ch5);
		System.out.println(ch6);
	}
}

참고하세요

용어설명
character set문자를 숫자로 변환한 값의 세트
encoding문자가 숫자로 변환되는 것
decoding숫자에서 다시 문자로 변환되는 것
ASCII code알파벳, 숫자, 특수 문자 등을 1바이트에 표현하는 데 사용하는 문자세트
UNICODE전 세계 표준으로 만든 문자 세트
UTF-81바이트에서 4바이트까지 다양하게 문자를 표현할 수 있음
UTF-162바이트로 문자를 표현

한글 유니코드 표


09. 자료형(data type) - 논리형과 자료형 없이 변수 사용하기

논리형

  • true(참), false(거짓) 두 가지만 나타낸다.
  • 1바이트를 사용한다.
  • 값이 존재하는지, 배열이 비었는지, 결과가 참인지 거짓인지 등을 표현한다.
package ch09;

public class BooleanTest {

	public static void main(String[] args) {

		boolean isMarried = true;
		System.out.println(isMarried);
	}
}

지역 변수 자료형 없이 사용하기 (자바 10부터 지원)

  • Local variable type inference(지역 변수 타입 추론)
  • 추론 가능한 변수에 대한 자료형을 선언하지 않는다.
  • 한번 선언하여 추론된 변수는 다른 타입의 값을 대입할 수 없다.
  • 지역 변수만 사용 가능하다.
 package ch09;

public class LocalVariableType {

	public static void main(String[] args) {

		var i = 10;
		var j = 10.0;
		var str = "hello";

		System.out.println(i);
		System.out.println(j);
		System.out.println(str);

		str = "test";
		//str = 3;
	}
}

10. 변하지 않는 상수와 리터럴, 변수의 형 변환

상수(constant) 선언하기

  • 상수는 변하지 않는 수다. (예: 원주율 3.14, 1년 12개월 등)
  • final 예약어를 사용하여 선언한다.
  • 상수를 사용하면 변하지 않는 값을 반복하여 사용할 때 의미 있는 문자로 인식하기 쉽고, 혹 값이 변하더라도 선언한 부분만 변경하면 되므로 여러 부분을 수정할 필요가 없다.
package ch10;

public class ConstantTest {

	public static void main(String[] args) {

		final int MAX_NUM = 100;
		final int MIN_NUM;

		MIN_NUM = 0;

		System.out.println(MAX_NUM);
		System.out.println(MIN_NUM);

		//MAX_NUM = 1000;
	}
}

리터럴(literal)

  • 프로그램에서 사용하는 숫자, 문자, 논리값을 뜻한다.
  • 리터럴은 상수 풀(constant pool)에 있다.
  • 정수 리터럴은 int로, 실수 리터럴은 double로 저장된다.
    • 정수의 범위가 넘어가는 경우는 L, l을, float로 사용하려는 경우는 F, f 식별자를 써줘야 한다.

형 변환 (type conversion)

  • 서로 다른 자료형 간에 연산 등의 수행을 위해 하나의 자료형으로 통일하는 것이다.
  • 묵시적 형 변환(자동 형 변환)과 명시적 형 변환(강제 형 변환)이 있다.
  • 바이트 크기가 작은 자료형에서 큰 자료형으로의 형 변환은 자동으로 이루어진다.
  • 덜 정밀한 자료형에서 더 정밀한 자료형으로의 형 변환은 자동으로 이루어진다.

형 변환의 방향

byte bNum = 10;
int iNum = bNum;  

int iNum1 = 20;
float fNum = iNum2;

int iNum = 10;
byte bNum = (byte)iNum;

double dNum = 3.14;
int iNum2 = (int)dNum;

연산 중 형 변환 예제

package ch10;

public class TypeConversion {

	public static void main(String[] args) {

		double dNum = 1.2;
		float fNum = 0.9F;

		int iNum1 = (int)dNum + (int)fNum;
		int iNum2 = (int)(dNum + fNum);

		System.out.println(iNum1);
		System.out.println(iNum2);
	}

}