Java

김명건·2022년 10월 22일
0
post-custom-banner

Java?

자바(Java)는 1995년 미국의 '썬마이크로시스템즈'라는 회사가 개발했다. 현재는 '썬마이크로시스템즈'가 '오라클'에 인수되어 관리 및 배포 중에 있다.

자바는 객체지향 언어이다.

J2SE(Java 2 Standard Edition), J2EE(Java 2 Enterprise Edition), JRE(Java Runtime Environment), JDK(Java Development Kit) 등 자바 플랫폼을 사용한 개발 혹은 실행을 위한 API이다.

자바의 특징

  1. 쉬운 난이도
    • C, C++의 포인터, 다중 상속 등의 개념을 없애 문법적인 난이도를 낮췄다.
  2. Garbage Collector
    • 자동 메모리 정리 기능이 있다. 프로그램이 실행 중에 사용하지 않는 메모리를 자동으로 해제한다.
  3. JVM(Java Virtual Machine)
    • 운영체제마다 Native Language(C, C++, ...)의 실행 환경이 달라 정상적인 실행이 되지 않을 수 있다. 각 운영체제에 맞는 기계어로 Compiling 해야 한다. Java는 JVM이 중간 다리 역할을 해줌으로서 운영체제와 상관없이 프로그램을 실행시킬 수 있다.

JVM(Java Virtual Machine)

  1. Java Virtual Machine의 약자로 자바는 JAVAC Compiler를 통해 *.class 파일로 변환되고, JVM이 *.class 파일을 실행하는 방식으로 동작한다. 따라서 JVM이 없다면 Java 프로그램을 실행시킬 수 없다.
  2. JVM은 JRE(Java Runtime Environment)를 설치하면 자동으로 설치되며, JRE는 JDK를 설치하면 자동으로 설치된다. JRE에는 자바 클래스 라이브러리와 자바 클래스 로더, 자바 가상 머신 등이 포함된다.
  3. 자바 소스코드는 운영체제에 종속되지 않는 첫번째 Managed Language이다.
  4. Managed Language는 Native Language보다 실행 속도가 느린데, 이는 실행하려는 프로그램 코드를 각 운영체제에 맞는 언어로 변환시켜 주어야 하기 때문에 번역 과정을 거치기 때문이다.

SDT(Strict Data Type)

  1. Strict Data Type으로 자바 또는 Managed Language의 특징이다.
  2. 사용하고자 하는 자료형을 엄격하게(명확하게) 명시해야 하는 룰이다. C 계열 언어에서 1 또는 0을 if 조건문과 사용할 수 있는데, 자바에서는 boolean형이 필수적으로 요구된다.

Garbage Collector

  1. 컴퓨터 프로그램은 메모리를 사용하여 실행되는데, 이러한 과정에서 사용되지 않는 공간이 필연적으로 생기게 된다. 이러한 사용되지 않는 공간을 자동으로 비워주는 기능을 Garbage Collector라고 한다.
  2. C와 C++에서는 메모리의 크기를 직접 할당하고 사용하는데, 사용이 끝난 메모리를 적절하게 해제해 주어야 그 공간을 다시 사용할 수 있다. 만약 사용하고 방치된 메모리를 해제해주지 않는다면 할당할 공간이 부족해지는 Stack Overflow 오류를 만날 수 있다. 이렇게 메모리를 제대로 할당하지 않고 사용되지 않는 메모리가 방치되는 것을 Memory Leak이라 한다.
  3. Garbage Collector는 프로그램의 백그라운드에서 동작하며 구간 종료 시(해당 클래스의 사용이 끝났을 시 등) 필요없는 메모리를 강제로 반환하는 기능이다.

POP(Procedure Oriented Program)

  1. C, VB, PASCAL 등이 POP 개념을 사용하고 있으며, 프로그램이 시작하면 프로그래밍 된 순서대로 진행하고, 모든 순서가 종료되면 프로그램 또한 종료된다.
  2. 기능이 우선시되어 OOP에 비해 빠른 프로그래밍이 가능하다.
  3. 대부분의 함수가 프로그램 내부에서 어디서든 사용 가능한 전역 데이터를 사용하기 때문에, 데이터 접근이 용이하다.
  4. 데이터 접근이 유용한 만큼 보안성이 낮다.
  5. 데이터의 모듈화가 어렵다. 모듈화는 프로그램을 기능 단위로 분리하여 관리하기 쉽도록 하는 것인데, POP의 경우 데이터 및 기능을 추가해야 할 때 기존에 작성된 프로그램을 수정해야 하며, 프로그램의 크기가 커질수록 유지보수가 어렵다.

OOP(Object Oriented Program)

  1. 객체라는 개념을 통해 데이터 및 함수를 모듈화하여 프로그램의 유지 보수와 보안성을 강화하였다. OOP를 사용하는 언어는 JAVA, C++, C#, .NET 등이 있다.
  2. 캡슐화
    데이터를 캡슐화(은닉화)하여, 프로그램 외부에서 접근 가능한 데이터를 지정할 수 있다. 캡슐화를 통해 사용사의 편리한 사용을 돕고 데이터 보안성을 증가시킨다.
  3. 추상화
    객체의 기본적인 틀만 만들어 놓고 사용할 수 있는 기능, 예를 들어 동물이라는 객체를 통해 개, 고양이, 돼지 등의 구체적인 객체를 만들어 사용할 수 있다.
  4. 상속
    부모 클래스(상속해준 클래스)의 데이터 및 함수를 그대로 이어받아 사용할 수 있는 기능이다. 코드의 재사용성을 높인다.
  5. 다형성
    객체가 다양한 형태로 표현될 수 있다는 개념으로, 추상화된 객체와 같이 틀을 가진 객체가 구체화된 객체로 표현할 수 있다는 뜻이다. 동물 객체가 고양이로 지정되어 야옹을 쓸 수 있다는 뜻이다.

Memory

  1. Register
    CPU 내부에서 사용되는 저장공간으로, 속도가 가장 빠르지만 메모리 용량이 적다.(따로 사용되는 목적이 있었던 것 같다. 어셈블리를 공부해보자)
  2. Storage
    가장 큰 용량을 가지며 하드 드라이브(HDD)라고 불린다. 속도가 매우 느리다. SDD도 스토리지에 속한다.
  3. Memory
    RAM이 담당하는 공간이며, 스토리지보다는 빠르지만 레지스터보다는 느리다.
  4. 스토리지는 CPU의 처리 속도를 맞출 수 없기 때문에 프로그램은 스토리지에 저장되어 있다가 운영체제가 프로그램을 메모리에 로드하게 되는데 이때 메모리에 로드된 프로그램의 단위를 프로세스(Process)라 한다.

Variable(변수)

import java.io.*;
class Main {
  public static void main(String[] args) {
    int a; //변수 선언
    a = 10; //변수 초기화(정의)
  }
}

변수란 값이 변할 수 있는 수를 의미하며 변수를 생성하고 값을 넣고 변경하는 데는 메모리가 사용된다. 변수 선언을 통해 메모리에 데이터가 저장될 수 있는 공간을 만들고, 변수 초기화(정의)를 통해 변수에 값을 넣어 값을 직접 넣지 않더라도 변수를 통해 값을 사용할 수 있다. 이 때 변수는 값이 들어가 있는 메모리 주소를 가리킨다.
변수는 사용하려는 값에 따라 정해진 데이터 타입이 존재한다. 사용하려는 값과 걸맞는 데이터 타입을 변수 선언 시 정해 주어야하며, 데이터 타입이 지정된 변수에는 해당 데이터 타입 이외의 값이 들어가는 경우 오류가 발생한다.

변수명에 대한 규칙

  1. 첫 글자에는 영문자, 달러($), 언더라인(_)만 사용할 수 있다.
  2. 대소문자는 구별된다.
  3. 예약어는 사용할 수 없다.
    예약어란 자바에서 기본으로 사용하는 예약된 단어를 뜻한다.
    (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

post-custom-banner

0개의 댓글