대학원 일기

자바(Java)의 특성 본문

Computer programming/java

자바(Java)의 특성

대학원생(노예) 2021. 12. 22. 20:24

서론

   개발도구로 자바를 사용하기 위해서는 자바의 특성을 알아야 한다. 이를 위해, 객체지향 프로그래밍, 플랫폼 독립성, 멀티스레드 지원, 동적 로딩 지원, 함수형 코딩 지원에 대해 알아보겠다.

 

 

 

자바(java) 언어의 특징

  • 플랫폼 독립성
  • 객체지향 프로그래밍
  • 멀티스레드 지원
  • 동적 로딩 지원
  • 함수형 코딩 지원

1. 플랫폼 독립성

 자바(java) 언어는 특정 하드웨어, 운영체제에 종속되지 않는 플랫폼 독립성을 가져서 운영체제와 관련없이 구현 가능해진다. 이는 자바가 JVM이라는 가상기기 위에서 움직이기 때문이다.

 

- JVM(Java Virtual Machine)

자바의 운영체제에 따른 컴파일 과정

  JVM은 자바 애플리케이션을 클래스 로더를 통해 읽어 자바 API와 함께 실행한다. 사진과 같이 JVM은 자바와 운영체제 사이에서 중개자 역할을 수행하여 자바가 운영체제에 구애받지 않고 재사용할 수 있게 해주고, 자바는 JVM이랑만 상호작용하기 때문에 운영체제와 하드웨어에 독립적이여서 다른 운영체제나 기기에서도 프로그램의 변경이 필요 없이 실행할 수 있어진다.

 

- 자바 애플리케이션(Java application)

   독립적으로 실행될 수 있는 일반 응용 프로그램. ex) 이클립스, intellij

 

- 자바 응용 프로그래밍 인터페이스(API : Application Programming Interface):

  • 많은 유용한 기능을 제공하는 라이브러리들의 모임
  • 자바 프로그래밍 언어의 핵심 기능을 제공
  • 네트워킹, 보안, XML 생성, 데이터베이스 접근에 필요한 기능 포함

 

 

2. 객체 지향 프로그래밍(OOP)

   자바는 객체 지향 프로그래밍(Object Oriented Programming)으로 객체 지향 프로그래밍은 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고, 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

 

객체지향의 특징(캡슐화, 상속, 다형성)

- 캡슐화

   캡슐화는 코드를 재수정 없이 재활용하는 것을 목적으로 일반적으로 연관 있는 변수와 함수를 클래스로 묶는 작업이다. 이러한 작업을 통해 객체가 외부에 노출하지 않아야할 정보 또는 기능을 접근제어자를 통해 적절히 제어 권한이 있는 객체에서만 접근하도록 하는 것이다. 이것을 은닉성이라고 한다. 즉, 캡슐화는 데이터와, 데이터를 처리하는 행위를 묶고, 외부에는 그 행위를 보여주지 않는 것이라고 할 수 있다.

 

캡슐화의 두 가지 측면

  1. 속성(Data filed)과 행위(Method)를 하나로 묶는 것.
  2. 실제 구현 내용 일부를 외부에 감추어 은닉화하는 것.

- 상속

  상속은 부모(슈퍼)클래스의 속성과 기능을 그대로 이어받아 자식(서브) 클래스에서 사용할 수 있게하고 기능의 일부분을 변경해야 할 경우 상속받은 자식(서브)클래스에서 해당 기능만 다시 수정(정의)하여 사용할 수 있게 하는 것이다. 객체지향에서 상속은 다중으로 상속하는 다중 상속이 불가능하다. 다중 상속은 클래스의 상속 관계에서 혼란을 줄 수 있기 때문에 상속(extend)은 반드시 하나만 해야하고, 필요에 따라 인터페이스를 사용하여 구현하면 된다.

 

  현실 세계에서 상속은 부모가 자식에게 물려주는 행위, 부모가 자식을 선택해서 물려주는 행위이지만, 객체지향 프로그래밍에서의 상속은 현실 세계와 반대로 자식이 부모를 선택해서 물려받는 것이다. 

 

상속의 효과

  • 부모 클래스를 재사용해서 자식 클래스를 빨리 개발할 수 있다.
  • 반복된 코드의 중복을 줄여준다.
  • 유지 보수의 편리성을 제공해 준다. (부모 클래스를 한 번만 수정함으로써 자식클래스를 수정할 필요가 없음)
  • 객체의 다형성을 구현할 수 있다.

- 다형성(오버로딩, 오버라이딩, 제네릭(템플릿))

  • 하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것
  • 하나의 클래스나 메소드가 다양한 방식으로 동작이 가능 한 것

오버라이딩: 부모클래스의 메서드와 같은 이름, 매개변수를 재정의 하는것.

오버로딩: 같은 이름의 함수를 여러개 정의하고, 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있게 하는 것.

제네릭(템플릿): 일반적인 코드를 작성하고, 이 코드를 다양한 타입의 객체에 대하여 재사용하는 것

- 클래스를 정의할 때, 구체적인 타입(type)을 적지 않고 변수 형태로 적어 놓는 것이다

 

제네릭 타입 선언

class 클래스 이름 <타입매개변수>{
//필드
//메서드
}

 

타입 매개변수 설명
E 원소 (Element)
K 키 (Key)
N 숫자 (Number)
T 타입 (Type)
V 값 (Value)

 

 

- 다형성 예시 참고

https://webclub.tistory.com/406?category=501048 


객체 지향 프로그래밍의 장단점

- 장점

  • 코드 재사용에 용이하다.
  • 유지보수가 쉽다.
  • 대형 프로젝트에 적합하다.

- 단점

  • 처리속도가 상대적으로 느리다.
  • 객체가 많으면 용량이 커질 수 있다.
  • 설계 시 많은 시간과 노력이 필요하다.

 

3. 멀티스레드 지원

  자바는 하나의 프로그램에서 여러 개의 쓰레드가 동시에 실행할 수 있는 환경을 지원한다. 

스레드란?

  • 프로그램(프로세스) 실행의 단위
  • 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미
  • 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행

 

 

4. 동적 로딩 지원

자바는 애플리케이션이 실행될 때 모든 객체가 생성되지 않고, 객체가 필요한 시점에 클래스를 동적 로딩하여 생성한다. 

 

동적 로딩의 장점과 단점

-일부 클래스가 변경되어도 전체 어플리케이션을 다시 컴파일 하지 않아도 된다.
-변경사항이 발생해도 비교적 적은 작업만으로도 처리할 수 있는 유연한 어플리케이션을 작성할 수 있다.
-C언어와 다르게 코드 블럭이 이곳 저곳에 위치해 있어도 된다.
-다형성과 같은 객체지향 개념이 적용될 수 있게 해준다.
-실행 시 연결된 부분에 대한 판단을 해야하므로 속도 측면에서는 불리하다.

 

클래스 동적 로딩의 종류

- 로드 타임 동적 로딩 : 하나의 클래스를 로딩하는 과정에서 필요한 다른 클래스를 동적으로 로딩하는 것
- 런타임 동적 로딩 : 코드를 실행하는 순간에 필요한 클래스를 로딩하는 것 

 

 

5. 함수형 코딩 지원(함수적 스타일 코딩을 지원)

최근 함수형 프로그래밍(Functional programming)이 대용량 데이터의 병렬 처리와 이벤트 지향 프로그래밍에 적합하기때문에 다시 부각되고 있는데, 자바는 이를 위해 람다식(Lambda Expressin)을 자바 8부터 지원한다.

 

람다식을 사용하면 필터링, 매핑, 집계 등의 처리가 쉽고 코드가 간결해진다는 장점이 존재한다.

 

Comments