자바(Java)의 특징: 객체지향언어

최원준·2021년 11월 24일
0

요즘 회사일에 치여산다.
그래도 시간을 틈틈이 내서 공부를 계속 하자.
오늘은 자바의 특징을 간략하게 다시 정리해보려고 한다.


1. 객체지향 언어(Object-Oriented Language)

객체(Object)란, 세상에 존재하는 모든 것을 의미한다. 객체를 만들고, 객체를 사용하는 프로그래밍 방법으로 사용하는 프로그램 언어를 의미한다. 프로그램을 그저 데이터와 처리방법으로 나누는 것이 아니고, 프로그램을 다수의 '객체'를 만들어서, 그것들이 상호작용을 통해 만든다는 것이다. 각 객체들은 역할이 나뉘여져있고, 사용하고자 하는 부분에서 각 객체들이 작동한다. 고장이 나더라도 해당 객체만 수정 및 교체를 하면 간단하게 해결할 수 있어 유지보수 면에서 쉽고 편하다.

우선, 객체지향의 특징에 대해 간단하게 알아보자.

1-1. 객체지향의 특징

  • 캡슐화(Encapsulation)

데이터와 코드를 외부에서 알 수 없게하고, 데이터의 구조와 역할, 기능을 하나의 캡슐 형태로 마드는 방식이다.

  • 상속(Inheritance)

상위클래스의 모든 하위클래스가 이어받는다. 부모가 자식에게 유전자를 물려주듯 부모의 특징을 자식에게 물려주는 특징이 있다.

  • 다형성(Polymorphism)

상송과 연관이 있는 개념인데, 한 객체가 다른 여러형태(객체)로 재구성되는 것을 말한다. 쉽게 비유하면, 한 부모 밑에서 태어난 자식이 똑같지는 않다는 것과 같다. 자바의 오버로드(Overload) 또는 오버라이드(Override)가 다형성의 대표적인 예라고할 수 있다.

  • 추상화(Abstraction)

객체의 공통적인 속성과 기능을 추출하여 정의하는 것을 말한다. 즉, 실제로 존재하는 객체들을 프로그램으로 만들기 위한 공통적 특성을 파악해서 필요없는 특성을 제거하는 과정을 말한다.


1-2. 객체지향의 장점

  • 재사용성

상속을 통해 프로그래밍시 코드의 재사용성이 높다.

  • 생산성

잘 설계된 클래스를 만들어서 독립적인 객체를 사용함으로 개발의 생산성이 향상된다.

  • 자연적인 모델링

우리 일상생활의 모습의 구조가 객체에 자연스럽게 녹아들어있기 때문에 생각하고 있는 것을 그대로 자연스럽게 구성할 수 있다.

  • 유지보수의 우수성

프로그램 수정시 추가, 수정을 하더라도 캡슐화를 통해 주변 영향이 적기때문에 유지보수가 쉽다.


1-3. 객체지향의 단점

  • 개발속도

객체가 처리하려는 것에 대한 정확한 이해가 필요하기에 설계단계부터 많은 시간이 필요하다.

  • 실행속도

절차지향언어에 비해 실행속도가 느린편에 속한다.

  • 난이도

다중 상속이 지원되는 C++같은 경우는 상대적으로 복잡하게 느껴질 수 있다.


1-4. 객체지향언어의 종류

자바, 오브젝티브-C, 비주얼베이직 닷넷, C++, C#, 파이썬, 루비, 액션스크립트, ASP, 스위프트 등등.


2. 자동메모리 관리

자바에서는 JVM이 지속적으로 메모리를 감시하면서 더이상 사용되지 않는 메모리를 해제시켜준다. C/C++등 다른 언어의 경우 더이상 사용하지 않는 메모리는 재사용가능하게 개발자가 직접 메모리를 해제해야 한다. 그러나 자바는 Garbage Collection을 통해 메모리 관리를 자동으로 수행되기 때문에 개발자가 신경 쓸 필요가 없다.

만약 개발자가 직접 메모리를 해제하고 싶은 경우 System.gc(); 로 Garbage Collector를 호출하여 해제할 수 있다.


3. 운영체제에 독립적

자바는 운영체제에 독립적이다. 자바의 개발환경과 배포환경이 다를 경우, 프로그램을 다시 컴파일 할 필요 없이 실행가능하다. 이는 자바가 Java Virtual Machine 위에서 돌아가기 때문이다. Java Virtual Machine에서 별도의 Java Compiler를 통해 사용자 코드를 Byte 코드로 변환한다. 따라서 모든 자바 프로그램은 이론적으로 CPU나 운영체제의 종류와 무관하게 동일하게 동작한다.


4. 멀티쓰레드 프로그래밍 가능

자바는 하나의 프로그램에서 여러개의 쓰레드가 동시에 실행할 수 있는 환경을 지원한다. C/C++은 운영체제의 도움을 받아 멀티 쓰레드를 수행하지만, 자바는 운영체제 지원없이 멀티스레드 프로그래밍이 가능하다.

멀티스레드란?

여러 스레드(프로그램의 실행단위)를 동시에 싱행시키는 응용 프로그램을 작성하는 기법. 장점은 프로세스 내 메모리 공유를 통해 시스템 자원 소모가 줄어든다는 점이지만, 반면에 자원을 공유하기 때문에 충돌이 일어날 수 있다.

멀티스레드 구현방법

  1. Thread 클래스 (화이트박스 방식)
    자바에서 스레드를 만들기 위해 Thread 클래스를 상속하여 스레드를 생성.
  2. Runnable 인터페이스 (블랙박스 방식)
    Thread 클래스와 같이 자바에서 스레드 실행시키는 인터페이스.
    다중상속이 지원되기 때문에 Thread 클래스보다 많이 쓰인다.

5. 동적 로딩(Dynamic Loading)을 지원

자바는 어플리케이션이 실행될 때 모든 객체가 생성되지 않고, 객체가 필요한 시점에 클래스를 동적 로딩하여 생성한다. 동적로딩은 클래스 일부 변경시 다시 컴파일하지 않아도 되는 이점이 있다. 또한 비교적 적은 작업으로도 처리할 수 있는 유연성을 동적 로딩이 제공한다. 반면, 그때그때 메모리에서 불러오기 때문에 프로그램 실행속도가 정적로딩에 비해 느리다. (느린 속도를 해결하기 위해 static 키워드를 사용한다.)

정적로딩(Static Loading)이란?

프로그램 실행 시 모든 실행파일이 메모리에 적재되어 실행하는 로딩방법. 대표적으로 c언어가 있다. 메모리를 많이 차지하는 단점이 있지만, 빠르게 가져와 사용할 수 있다는 장점이 있다.

profile
Lv.01 개발자

0개의 댓글