자바는 1996년 1월에 나온 객체지향 프로그래밍(Object Oriented Programming, OOP) 언어이다.
운영체제에 독립적
자바 이전의 언어들은 특정 CPU에서만 작동하거나 특정 OS에 따라 다르게 작성해야하는 (C,C++ 등) 언어들이 대부분이었다. 이 문제를 해결하기위해 JRE(Java Runtime Environment: JVM(자바 가상머신) + 표준 클래스 라이브러리)가 설치되어있는 모든 운영체제에서 실행 가능하도록 만들었다.
객체 지향언제
자바는 객체지향 프로그래밍(Object Oriented Programming, OOP) 개념을 사용하는 언어이다.
객체는 쉽게말해 프로그램이 동작하는 부품이다. 여러 부품을 만들고 조립하여 하나의 프로그램을 실행하는 개념이 OOP이다. 객체 지향적으로 설계한 프로그램은 유지보수가 쉽고 확장성이 높다.
함수형 프로그래밍 지원
자바 8버전부터 함수형 프로그래밍을 지원하는 문법인 람다식과 스트림이 추가되었다. 이를 사용하면 컬렉션의 요소를 필터링, 매핑, 집계 처리하기 쉬워지고 코드가 간결해지는 장점이 있다.
자동 메모리 관리(Garbage Collection)
C,C++의 경우 메모리의 생성과 소멸을 개발자가 직접 설계해야 했지만, 자바는 가비지 컬렉터(Garbage Collector)를 실행시켜 자동으로 사용하지 않는 메모리를 수거한다. 이를 통해 개발자는 메모리를 관리하는 수고를 덜고 핵심 코드에 집중할 수 있게 되었다.
자바는 컴파일러를 통해 기계어로 변환되는 언어이다.
*컴파일: 특정 프로그래밍 언어를 기계가 이해할 수 있도록 옮기는 번역과정
여기서 자바 언어를 JVM이 이해할 수 있는 코드를 변환하고, JVM은 운영체제에 맞는 기계어로 변환해준다.
JVM은 자바 코드로 작성한 프로그램을 해석해 실행하는 별도의 프로그램이다. 즉, 프로그램을 실행하는 프로그램이다.
JVM의 경우 JDK나 JRE를 설치하면 자동으로 설치된다. 자바는 JVM을 거치기 때문에 C나 C++에 비해 속도는 느린 편이지만 JVM 내부의 최적화된 JIT 컴파일러를 통해 속도를 크게 개선해나가고 있다.
컴퓨터는 메모리에 데이터를 저장한다. 메모리는 1byte 크기의 데이터를 저장할 수 있는 메모리 셀들이 모여서 만들어지며, 각 메모리셀에는 고유 번호가 오름차순으로 매겨져있다. 이처럼 메모리셀에 붙여져 있는 고유 번호를 메모리 주소라고 한다.
메모리는 아파트와 구조적으로 유사하다.
메모리 | 아파트 |
---|---|
메모리셀의 집합체 | 집의 집합체 |
각 메모르셀에 데이터를 저장할 수 있다. | 각 집에 사람이 들어가 살 수 있다. |
각 메모리셀을 가리키는 주소가 있다. | 각 집을 가리키는 호수가 있다. |
예: Oxf38d2a6c | 예: 1401호 |
class Main {
public static void main(String[] args) {
int num; // 변수 선언
}
}
num
이라는 변수에 정수형의 숫자를 저장할 수 있게 되었다.
class Main {
public static void main(String[] args) {
int num; // 변수 선언
num = 1; // 값 할당
}
}
num
에 1을 할당했으며, num
을 선언하고 나서 처음으로 값을 할당하는 것을 초기화라고 한다. 그리고, 초기화가 이루어진 후 다시 다른 값을 할당하는 것을 재할당이라고 한다.
class Main {
public static void main(String[] args) {
int num; // 변수 선언
num = 1; // 값 할당(초기화)
num = 2; // 값 할당(재할당)
}
}
변수를 선언하는 동시에 초기화할 수도 있다.
class Main {
public static void main(String[] args) {
int num = 1; // 선언과 동시에 초기화
}
}
변수 이름을 지을 때 지켜야하는 룰이 있다.
자바에서 변수명은 일반적으로 카멜 케이스(camelCase)를 사용한다. 카멜 케이스란 낙타 모양을 닮았다고 해서 붙여진 이름으로, 두 번재 단어부터 대문자로 시작해 구분한다.
int camelCase;
변수명으로 영문자, 숫자, _
,$
를 사용할 수 있으며, 영문자는 대소문자가 구별되어 인식된다. 즉, a
와 A
는 다른 문자로 인식된다.
// 아래의 모든 변수의 변수명은 허용되는 변수명이다.
int num;
int NUM; // num과 다른 변수입니다.
int num_1;
int num$1;
숫자로 시작하는 변수명은 사용할 수 없다.
int 10Age; // Error
자바에서 이미 사용 중인 예약어(reserve word)는 변수명으로 사용할 수 없다.
int byte; // Error
int class; // Error
좋은 코드는 잘 동작할 뿐만 아니라, 사람에게도 잘 읽히는 코드를 의미한다.
간단히 말해, 재할당이 금지된 변수다.
// 기존 코드
final double CALCULATOR_PI = 3.14;
// 변경된 코드
final double CALCULATOR_PI = 3.14159;