[Java] java 기초
목차
01. 자바 프로그래밍 시작하기
프로그래밍이란?
- 프로그래밍: 컴퓨터가 일을 수행하도록 프로그래밍 언어로 명령어 집합(프로그램)을 만드는 일
- 컴파일: 프로그래밍 언어를 컴퓨터가 실행 가능한 기계어로 만드는 일
- 컴파일러: 기계어로 바꾸어 주는 프로그램 (예: 자바 컴파일러, gcc)
자바 프로그래밍
- 자바의 역사: 1991년 제임스 고슬링을 비롯한 선 마이크로시스템스 연구원들이 처음 개발했다. 가전, 휴대용 장치에 사용되는 소프트웨어 언어로 개발되어 안정성이 중요했다.
- 자바 프로그래밍의 특징
- 플랫폼에 영향을 받지 않으므로 다양한 환경에서 사용할 수 있다.
- 객체 지향 언어이기 때문에 유지보수가 쉽고 확장성이 좋다.
- 프로그램이 안정적이다.
- 풍부한 기능이 제공되는 오픈 소스이다.
객체 지향 프로그래밍이란?
- 프로그램의 구현을 시간의 흐름 순이 아닌, 객체 간의 관계와 협력을 기반으로 프로그래밍하는 것이다.
- 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진수와 8진수, 16진수

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형

자바에서 실수의 기본 타입은 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-8 | 1바이트에서 4바이트까지 다양하게 문자를 표현할 수 있음 |
| UTF-16 | 2바이트로 문자를 표현 |
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);
}
}