Notice
Recent Posts
Recent Comments
05-17 09:12
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Byeol Lo

Computer Language - Java instruction and features 본문

Programming Language/Java

Computer Language - Java instruction and features

알 수 없는 사용자 2023. 2. 27. 12:08

 Java의 소개에 앞서 사전 개념들을 먼저 소개한다.

 

Machine Language

 오로지 Machine만 읽을 수 있는(readable) 코드이다. 특징으로는 Binary(0 or 1)로 되어 있으며, CPU만 오로지 이 코드들을 이해할 수 있는 언어이다.

 

Programming Language

 사람들이 읽을 수 있는 코드들을 프로그래밍 언어라고 부른다. 컴퓨터에게 명령을 하려면 Machine Language를 써야 하는데, 우리는 이에 대해 정확히 알지 못할 뿐더러 쓰기 난해하고 복잡하다. 따라서 우리는 Machine 과 Human을 이어주는 하나의 의사소통 수단인 Programming Language를 쓰게 된다. 따라서 Bridge between a machine and a human이라고 할 수 있다.

 이때, 프로그래밍 언어를 구상했다고 해서 무작정 CPU가 읽을 수 있는 것은 아니다. 프로그래머가 프로그래밍 언어를 통해 코드를 짰다고 하더라도 컴퓨터는 0, 1 밖에 모르기 때문에 우리의 언어를 이해할 수 없다. 따라서 해당 Programming Language를 컴퓨터가 이해할 수 있도록 Compiler를 사용한다.

 

Level of Abstraction Hierarchy According to Language

 언어가 추상화 정도에 있어서 어느 정도에 있는지 볼 수 있는 그림이다. 위로 갈수록 추상된 정도가 높다. 여기서 Java는 High-level language라고 할 수 있는 정도에 있다. 여기서 어셈블리 어는 기계어와 1:1로 대응되는 Low-level language이며, 이는 같은 실행이더라도 Computer architecture에 따라 다른 기계어를 쓰기 때문에 그에따라 어셈블리어도 다를 수 밖에 없다. 따라서 운영체제들과 컴퓨터 구조에 따라 지원이 되는 언어, 안되는 언어들이 있을 수 있고, 프로그램을 만들때 해당 프로그램이 특정 컴퓨터에게만 사용되어지는 것은 확장성에 있어서 매우 떨어진다. 따라서 Java는 그런 단점을 극복하고, 어떤 컴퓨터이던 간에 JRE만 잘 설치된다면 java코드를 전부 실행시킬 수 있는 막강한 언어이다.

프로그래밍을 하기 전 다음의 개념 정의를 보자.

개념 정의
Source file  프로그래머가 프로그래밍 언어를 써서 코드를 짠 해당 텍스트 파일을 Source file이라고 정의한다.
Compile  high-level langauge를 low-level language로 번역시키는 것을 compile한다 라고 말한다. Source code를 Machine instructions의 형태로 바꾸는 것이다.

 

Java의 작동 방식

 WORA (Write Once Run Anywhere : 한 번의 작성만으로 어느 곳에서든 작동함) 의 특성으로 인해 Java의 작동방식은 조금 특이하다. Java의 Source 파일을 작성하고 해당 java source 파일을 컴파일러가 "Bytecode"라는 파일로 변환한다. 해당 파일은 .class로 되어 있으며, 이 바이트 코드는 JVM(Java Virtual Machine)이 독립된 환경에서 실행하게 된다. 따라서 이 소프트웨어(Java)는 cross-platform이라고 할 수 있다.

 

Java의 properties

 OOP(Object Oriented Programming)의 형태를 띄는 잘 짜여진 객체 지향적인 코드들은 다음의 특성들을 띈다.

  • Encaptulation(캡슐화) : 데이터와 특정 데이터를 다루는 메서드를 하나의 단위로 묶어서 외부에서 직접적으로 액세스하지 못하도록 하는 것
  • Inheritance(상속) : 기존의 클래스에서 정의한 필드와 메소드를 다른 클래스에서 재사용하는 것을 의미하며 이를 통해 코드의 재사용성을 높이고, 객체들 간의 계층구조를 이룰 수 있도록 한다.
  • Polymorphism(다형성) : 객체지향 프로그래밍의 중요한 개념 중 하나이며, 이는 메소드나 클래스가 다양한 형태로 동작할 수 있음을 의미한다.
  • Abstraction(추상화) : 객체의 복잡한 내부 동작을 감추고, 필요한 부분만 의도에 따라 노출시키도록 하는 것. 크게 Abstract Class와 Interface 로 나뉜다.

 Memory Management : Garbage Collector가 자동으로 메모리를 관리해주며, new 연산자를 사용하여 객체를 생성할 때, heap 메모리 영역에 객체가 할당이된다. 이 때, GC는 JVN에서 실행중인 프로그램에서 사용되지 않는 객체들을 탐지하여 heap 메모리에서 해제한다. GC는 주기적으로 실행되고, 객체가 언제 사용중인지 파악하기 위해 Reference Counting 기법을 사용하여 객체를 참조하는 레퍼런스 수를 세어서 해당 객체를 사용하는 레퍼런스가 없을때 GC의 대상으로 간주된다. 이때 순환 참조 같은 상황이 발생한다면 메모리 누수가 발생할 수 있는데, 이를 해결하기 위해 Reachability(도달 가능성) 기반 GC 알고리즘을 사용한다.

 Multi-threaded : 여러 개의 스레드가 동시에 실행될 수 있는 프로그래밍 환경을 말하는데, 각 스레드는 자신만의 실행 흐름을 가지고, 프로그램의 여러가지 작업을 동시에 처리할 수 있다. Thread Class를 상속받아 새로운 스레드를 만들거나 Runnable 인터페이스를 구현하여 스레드를 생성할 수 있다. 멀티 스레드는 작업을 병렬로 실행시켜 실행 시간을 단축시키는 장점이 있다. 하지만 복잡성이 증가하며 synchronized 키워드를 사용하여 스레드 간의 경합 상황을 제어하고, Lock 인터페이스를 사용하여 더 세밀한 제어를 할 수 있다. 또한 이 외에도 멀티 스레드를 제어할 수 있도록 wait(), notify(), notifyAll() 메소드와 Thread-safe한 컬렉션을 제공한다.

 

 Opensource Libraries

 Java를 설치할 때는 자기가 뭘하고 싶은지에 따라 맞는 버전을 설치해야한다. java를 개발하고 싶다면 Java Development Kit을 개발은 필요없고 실행만 시키고 싶으신 분은 JRE 버전을 다운받아준다.

  • JDK ( Java Development Kit )
    • Environment for developing and executing Java programs
    • JRE + Development Kit
  • JRE ( Java Runtime Environment )
    • ENvironment for executing Java programs
    • JVM + Java standard class libraries

 

API/API Reference
 Application Programming Interface ( API )란 자바 프로그램을 개발하는 데 사용할 수 있는 라이브러리, 클래스, 메소드, 인터페이스 등의 모음을 말한다. 다양한 패키지로 구성되어 있고, 특정 기능을 수행하는 클래스와 인터페이스들을 개발자들에게 제공해준다.

Comments