Java?
자바(Java)는 1995년 미국의 '썬마이크로시스템즈'라는 회사가 개발했다. 현재는 '썬마이크로시스템즈'가 '오라클'에 인수되어 관리 및 배포 중에 있다.
자바는 객체지향 언어이다.
J2SE(Java 2 Standard Edition), J2EE(Java 2 Enterprise Edition), JRE(Java Runtime Environment), JDK(Java Development Kit) 등 자바 플랫폼을 사용한 개발 혹은 실행을 위한 API이다.
자바의 특징
- 쉬운 난이도
- C, C++의 포인터, 다중 상속 등의 개념을 없애 문법적인 난이도를 낮췄다.
- Garbage Collector
- 자동 메모리 정리 기능이 있다. 프로그램이 실행 중에 사용하지 않는 메모리를 자동으로 해제한다.
- JVM(Java Virtual Machine)
- 운영체제마다 Native Language(C, C++, ...)의 실행 환경이 달라 정상적인 실행이 되지 않을 수 있다. 각 운영체제에 맞는 기계어로 Compiling 해야 한다. Java는 JVM이 중간 다리 역할을 해줌으로서 운영체제와 상관없이 프로그램을 실행시킬 수 있다.
JVM(Java Virtual Machine)
- Java Virtual Machine의 약자로 자바는 JAVAC Compiler를 통해 *.class 파일로 변환되고, JVM이 *.class 파일을 실행하는 방식으로 동작한다. 따라서 JVM이 없다면 Java 프로그램을 실행시킬 수 없다.
- JVM은 JRE(Java Runtime Environment)를 설치하면 자동으로 설치되며, JRE는 JDK를 설치하면 자동으로 설치된다. JRE에는 자바 클래스 라이브러리와 자바 클래스 로더, 자바 가상 머신 등이 포함된다.
- 자바 소스코드는 운영체제에 종속되지 않는 첫번째 Managed Language이다.
- Managed Language는 Native Language보다 실행 속도가 느린데, 이는 실행하려는 프로그램 코드를 각 운영체제에 맞는 언어로 변환시켜 주어야 하기 때문에 번역 과정을 거치기 때문이다.
SDT(Strict Data Type)
- Strict Data Type으로 자바 또는 Managed Language의 특징이다.
- 사용하고자 하는 자료형을 엄격하게(명확하게) 명시해야 하는 룰이다. C 계열 언어에서 1 또는 0을 if 조건문과 사용할 수 있는데, 자바에서는 boolean형이 필수적으로 요구된다.
Garbage Collector
- 컴퓨터 프로그램은 메모리를 사용하여 실행되는데, 이러한 과정에서 사용되지 않는 공간이 필연적으로 생기게 된다. 이러한 사용되지 않는 공간을 자동으로 비워주는 기능을 Garbage Collector라고 한다.
- C와 C++에서는 메모리의 크기를 직접 할당하고 사용하는데, 사용이 끝난 메모리를 적절하게 해제해 주어야 그 공간을 다시 사용할 수 있다. 만약 사용하고 방치된 메모리를 해제해주지 않는다면 할당할 공간이 부족해지는 Stack Overflow 오류를 만날 수 있다. 이렇게 메모리를 제대로 할당하지 않고 사용되지 않는 메모리가 방치되는 것을 Memory Leak이라 한다.
- Garbage Collector는 프로그램의 백그라운드에서 동작하며 구간 종료 시(해당 클래스의 사용이 끝났을 시 등) 필요없는 메모리를 강제로 반환하는 기능이다.
POP(Procedure Oriented Program)
- C, VB, PASCAL 등이 POP 개념을 사용하고 있으며, 프로그램이 시작하면 프로그래밍 된 순서대로 진행하고, 모든 순서가 종료되면 프로그램 또한 종료된다.
- 기능이 우선시되어 OOP에 비해 빠른 프로그래밍이 가능하다.
- 대부분의 함수가 프로그램 내부에서 어디서든 사용 가능한 전역 데이터를 사용하기 때문에, 데이터 접근이 용이하다.
- 데이터 접근이 유용한 만큼 보안성이 낮다.
- 데이터의 모듈화가 어렵다. 모듈화는 프로그램을 기능 단위로 분리하여 관리하기 쉽도록 하는 것인데, POP의 경우 데이터 및 기능을 추가해야 할 때 기존에 작성된 프로그램을 수정해야 하며, 프로그램의 크기가 커질수록 유지보수가 어렵다.
OOP(Object Oriented Program)
- 객체라는 개념을 통해 데이터 및 함수를 모듈화하여 프로그램의 유지 보수와 보안성을 강화하였다. OOP를 사용하는 언어는 JAVA, C++, C#, .NET 등이 있다.
- 캡슐화
데이터를 캡슐화(은닉화)하여, 프로그램 외부에서 접근 가능한 데이터를 지정할 수 있다. 캡슐화를 통해 사용사의 편리한 사용을 돕고 데이터 보안성을 증가시킨다.
- 추상화
객체의 기본적인 틀만 만들어 놓고 사용할 수 있는 기능, 예를 들어 동물이라는 객체를 통해 개, 고양이, 돼지 등의 구체적인 객체를 만들어 사용할 수 있다.
- 상속
부모 클래스(상속해준 클래스)의 데이터 및 함수를 그대로 이어받아 사용할 수 있는 기능이다. 코드의 재사용성을 높인다.
- 다형성
객체가 다양한 형태로 표현될 수 있다는 개념으로, 추상화된 객체와 같이 틀을 가진 객체가 구체화된 객체로 표현할 수 있다는 뜻이다. 동물 객체가 고양이로 지정되어 야옹을 쓸 수 있다는 뜻이다.
Memory
- Register
CPU 내부에서 사용되는 저장공간으로, 속도가 가장 빠르지만 메모리 용량이 적다.(따로 사용되는 목적이 있었던 것 같다. 어셈블리를 공부해보자)
- Storage
가장 큰 용량을 가지며 하드 드라이브(HDD)라고 불린다. 속도가 매우 느리다. SDD도 스토리지에 속한다.
- Memory
RAM이 담당하는 공간이며, 스토리지보다는 빠르지만 레지스터보다는 느리다.
- 스토리지는 CPU의 처리 속도를 맞출 수 없기 때문에 프로그램은 스토리지에 저장되어 있다가 운영체제가 프로그램을 메모리에 로드하게 되는데 이때 메모리에 로드된 프로그램의 단위를 프로세스(Process)라 한다.
Variable(변수)
import java.io.*;
class Main {
public static void main(String[] args) {
int a;
a = 10;
}
}
변수란 값이 변할 수 있는 수를 의미하며 변수를 생성하고 값을 넣고 변경하는 데는 메모리가 사용된다. 변수 선언을 통해 메모리에 데이터가 저장될 수 있는 공간을 만들고, 변수 초기화(정의)를 통해 변수에 값을 넣어 값을 직접 넣지 않더라도 변수를 통해 값을 사용할 수 있다. 이 때 변수는 값이 들어가 있는 메모리 주소를 가리킨다.
변수는 사용하려는 값에 따라 정해진 데이터 타입이 존재한다. 사용하려는 값과 걸맞는 데이터 타입을 변수 선언 시 정해 주어야하며, 데이터 타입이 지정된 변수에는 해당 데이터 타입 이외의 값이 들어가는 경우 오류가 발생한다.
변수명에 대한 규칙
- 첫 글자에는 영문자, 달러($), 언더라인(_)만 사용할 수 있다.
- 대소문자는 구별된다.
- 예약어는 사용할 수 없다.
예약어란 자바에서 기본으로 사용하는 예약된 단어를 뜻한다.
(this, if, class, for, abstract 등)
Constant(상수)
import java.io.*;
class Main {
public static void main(String[] args) {
final int a = 2;
System.out.println(a);
}
}
상수란 값이 변하지 않는 데이터 공간으로 변수 앞에 final을 붙여 사용한다. 상수로 선언된 자료형은 내부의 값을 바꿀 수 없다. 따라서 선언과 동시에 초기화되어야 한다.
Data Type(자료형)
자료형은 C와 같으므로 기술하지 않겠다.
1. integral: int, short, long
2. floating point: float, double
3. character: character
4. Boolean: boolean