Java/Basic

[Java-Basic] Java 언어의 특징 및 OOP의 특징

Jeong Jeon
반응형

자바는 제임스 고슬링 형님이 만든 대표적인 객체지향언어이다.

자바의 특징을 5가지로 나누어본다면

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

2). 자동 메모리 관리 (Garbage Collector)

3). 운영체제에 독립적 실행 -> JVM

4). 멀티쓰레드 지원

5). 동적 로딩 지원

 

한가지씩 살펴보자

 

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

객체지향프로그래밍의 대표적인 특징을 빼놓을 수 없을것이다.

대표적 특징에는 상속, 캡슐화(은닉화), 다형성, 추상화 가 있다.

 

객체지향 프로그래밍은 저러한 특징들을 이용하여 코드의 재사용성을 좋게 하고, 유지보수를 용이하게 만들며 개념별 관리가 편리하다.

 

1). 상속 : 부모 클래스의 변수 및 메서드 등을 자식 클래스가 전부 물려받아 사용(접근) 할 수 있는 성질

-> 자식클래스는 부모클래스에 정의 되어있는 부모의 재산을 가져다가 사용할 수 있음

 

2). 캡슐화 : 객체 내부의 변수나 메서드를 외부 객체가 마음대로 접근하여 건드리지 못하게 감싸놓는 성질.

-> 외부 객체가 객체 내부에 접근하기 위해서는 내부객체가 허락한 메서드를 통해 접근을 해야 한다.

대표적으로 getter/setter 등이 있다.

 

3). 다형성 : 하나의 객체가 여러가지 타입을 가질수 있는 성질

-> 동일 요청에 대해 다른 응답 방식을 지원할 수 있는데, override나 overloading을 통해 같은 메서드이지만,

다른 로직을 수행 할 수 있는것이 대표적이다.

 

4). 추상화 : 대상의 특성 중 불필요한것을 제외하고 공통의 속성, 기능을 묶어놓는 성질

-> 추상클래스, 인터페이스를 통해 개념을 정해놓고 해당 개념을 가져다가 사용할 수 있다.

 

자동 메모리 관리 (GC)

Java는 JVM이 지속적으로 메모리를 감시하면서 한동안 사용하지 않거나 더이상 사용하지 않는 메모리를 해제시켜주는 기능이 있다. C or C++등은 직접적으로 개발자가 메모리를 해제시켜야되는데, Java는 Garbage Collector라는 아이가 메모리를 자동으로 관리해준다.

만약 직접적으로 개발자가 메모리 해제를 시켜주고 싶은경우, 객체를 null로 만들어주어 GC가 관리하도록 하게 하거나,System.gc();로 직접적으로 GC를 호출하여 사용할 수 있다.

 

운영체제에 독립적

사실상 굉장히 강력한 내용이지 않을까 싶다.

자바의 개발환경과 배포환경이 다를경우 어플리케이션을 다시 컴파일 할 필요없이 실행할 수있다.

어떻게 가능한 것일까?

Java는 기본적으로 JVM(Java Virtual Machine) 위에서 구동되는데, 이 JVM이 java Compiler를 통해 코드를 컴파일 한다.  무슨 말이냐.. 함은 java는 OS에 의존적인것이 아닌 JVM에 의존적이다 라고 볼수있는데, 이 JVM은 각 OS를 모두 지원하여 Java가 맞추는것이 아닌 JVM이 OS에 맞추어준다 라는 것이다.

JVM

 

멀티쓰레드 기능

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

C 나 C++은 운영체제의 도움을 받아 멀티 쓰레드 동작을 하지만, 자바는 운영체제 지원없이 멀티스레드 프로그래밍이 가능합니다. 멀티쓰레드에 대한 정보는 필자의 Thread란 글을 보면 나와있다....

 

동적로딩 지원

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

동적로딩(Dynamic Loading)은 클래스 일부 변경 시 재컴파일하지 않아도 되는 이점이 있다.

또한, 비교적 적은 작업으로 처리할 수 있는 유연성을  동적로딩이 제공한다.

반면 그때 그때 메모리에서 불러오기 때문에 프로그램 실행 속도가 정적로딩에 비해 느리다.. 그래서 Static을 사용해서 메모리에 계속 올려두고 쓰는 방식도 사용한다.

 

정적 로딩(Static Loading)이란?

정적 로딩은 프로그램 실행 시 모든 실행파일이 메모리에 적재되어 실행되는 로딩방법이다.

대표적으로 C언어가 있습니다. 정적로딩은 모든 파일이 메모리에 적재되어 메모리를 많이 차지하지만, 빠르게 가져와 사용할 수 있다는 장단점이 있다.

 

가장 기본적인 것들이 가장 어렵게 다가온다.

가장 기본적인 것들로 인해 코드가 바뀔수있음을 잊지말자...!

반응형