250x250
Notice
Recent Posts
Recent Comments
관리 메뉴

탁월함은 어떻게 나오는가?

Java 언어의 특징 본문

[Snow-ball]프로그래밍(컴퓨터)/java

Java 언어의 특징

Snow-ball 2021. 6. 22. 23:21
반응형

java 언어의 특징

 

 

1.이식성이 높은 언어

- java 언어로 개발된 프로그램은 소스 파일을 다시 수정하지 않아도, 자바 실행환경(JRE: Java Runtime Environment)이 설치되어 있는 모든 운영체제에서 실행 가능합니다. 따라서 자바 언어는 이식성이 높은 프로그래밍 언어라 할 수 있다.

 

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

- 프로그램을 개발하는 기법으로 부품에 해당하는 객체들을 먼저 만들고, 이것들을 하나씩 조립 및 연결해서 전체 프로그램을 완성하는 기법이다.객체를 만들기 위해 설계도인 클래스를 작성해야 하고, 객체와 객체를 연결해 목적에 맞는 프로그램을 만들어 낸다. 자바는 아무리 작은 프로그램이라도 객체를 만들어 사용하게 된다.

 

객체지향 언어가 가져야 할 대표적인 특징에는 캡슐화(은닉), 상속, 다형성, 추상화가 있다. 이러한 OOP는 4가지 특징을 활용해 코드의 재사용성을 증가하규 유지보수를 용이하게 만든다.

 

객체지향프로그래밍의 대표적 특징

1) 상속(Inheritance) :

부모 클래스의 변수와 메서드를 자식 클래스가 전부 물려받는다.

 

2) 캡슐화(Encapsulation, Information Hiding) :

1. 객체의 변수 및 메서드를 외부 객체가 함부로 건드리지 못하게 감싸는 개념

2. 클래스의 getter/setter 등을 통해 은닉한다.

 

3) 다형성(Polymorphism) : 

1. Poly(다양한) + morphism(변형, 변신)의 합성어이다.

2. 하나의 객체가 여러가지 타입을 가질 수 있는 것을 의미한다.

3. 자바에서는 한 레퍼런스 변수가 다른 형태의 객체를 참조할 수 있음을 말한다.

4. 오버로딩, 오버라이딩, 업캐스팅, 다운캐스팅 등의 방법이 있다.

 

4) 추상화(Abstraction)

1. 자바에서 공통의 속성, 기능을 묶어 이름을 붙이는 것을 의미한다.

2. 자바에서 추상화는 추상클래스, 인터페이스를 통해 구현한다.

3. 추상클래스 : 추상메서드를 하나 이상 포함한 추상 클래스

4. 인터페이스 : 추상메서드만을 포함한 추상 클래스, 다중 상속 가능

* JAVA8부터는 인터페이스 안에 default 선언을 하면 바디가 있는 메서드도 선언 가능해졌다.

* https://github.com/akdl911215/philoarteTotalResult/blob/master/leejunghyunshop/src/main/java/api/philoarte/leejunghyunshop/artist/service/ArtistService.java 링크들어가서 보면 인터페이스 안에 default 메서드를 사용한다. 

 

 

 

 

 

 

 

 

3.함수적 스타일 코딩을 지원

- 자바는 함수적 프로그래밍을 위해 람다식 자바8부터 지원한다. 람다식을 사용하면 컬렉션의 요소를 필터링, 맵핑, 집게처리하는데 쉬워지고, 코드가 매우 간결해진다.

 

4.자동 메모리 관리 

- C++은 메모리에 생성된 객체를 제거하기 위해 개발자가 직접 코드를 작성해야 한다. 만약 이 작업을 잘 처리하지 않으면 프로그램은 불완전해지고 갑자기 다운되는 현상을 겪게 된다.

 

자바는 개발자가 직접 메모리에 접근할 수 없도록 설계되었으며 메모리는 자바 JVM이 지속적으로 메모리를 감시하면서 더 이상 사용되지 않는 메모리를 해지하면서 관리하게 된다. 객체 생성 시 자동적으로 메모리 영역을 찾아서 할당하고, 사용이 완료되면 가비지 컬렉터(Garbage Collector)를 실행시켜 자동적으로 사용하지 않는 객체를 제거해준다. 따라서 개발자는 메모리 관리의 수고를 덜고, 핵심기능 코드 작성에 집중할 수 있다.

 

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

 

5.운영체제에 독립적

- 자바는 운영체제에 독립적이다. 이것의 의미는 무엇일까?

 

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

 

그렇기 때문에 자바는 윈도우, 리눅스, 유닉스 등 다양한 운영체제에서 실행되는 프로그램을 개발 할 수 있다. 단순한 콘솔 프로그램부터 클라이언트용 윈도우 애플리케이션, 서버용 웹 애플리케이션 그리고 모바일용 안드로이드 앱에 이르기까지 거의 모든 곳에서 실행되는 프로그램을 개발할 수 있다.

 

Java Virtyal Machine 구조

 

 

 

 

 

 

 

 

 

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

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

멀티쓰레드란? 여러 쓰레드(프로그램의 실행 단위, 프로세스 내 주소공간 및 자원 공유함)을 동시에 실행시키는 응용프로그램을 작성하는 기법이다.

 

C/C++은 운영체제의 도움을 받아 멀티 쓰레드를 수행하지만, 자바는 운영체제 지원없이 멀티스레드 프로그래밍이 가능하다.

그렇기 때문에 하나의 프로그램이 동시에 여러 작업을 처리해야 하는 경우와, 대용량 작업을 빨리 처리하기 위해 서브 작업으로 분리해서 병렬처리하려면 멀티쓰레드 프로그래밍이 필요하다.

 

자바는 쓰레드 생성 및 제어와 관련된 라이브러리 API를 제공하고 있기 때문에 실행되는 운영체제에 관계없이 멀티 쓰레드를 쉽게 구현 가능하다.

 

멀티쓰레드 장,단점

장점 : 프로세스 내 메모리 공유를 통해 시스템 자원 소모가 줄어든다.

단점 : 자원을 공유하기 때문에 충돌이 일어날 수 있다.

 

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

- 자바 애플리케이션은 여러개의 객체가 서로 연결되어 실행되는데, 이 객체들은 클래스로부터 생성된다.

 

애플리케이션이 실행될 때 모든 객체가 생성되지 않고, 객체가 필요한 시점에 클래스를 동적로딩해서 객체를 생성한다. 그리고 비교적 적은 작업으로 처리할 수  있는 유연성을 동적로딩이  제공한다.

 

또한 개발 완료 후 유지보수가 발생하더라도 해당 클래스만 수정하면 되므로 전체 애플리케이션을 다시 컴파일 할 필요가 없다. 즉, 유지보수를 쉽고 빠르게 진행하 수 있다.

 

반면에 그때 그때 메모리에서 불러오기 때문에 프로그램 실행 속도가 정적로딩에 비해 느리다. 이 문제를 해결하기 위해 static 키워드를 사용한다.

 

반대의미인 정적 로딩(Static Loading)은 무엇일까?

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

 

8.오픈 소스 라이브러리가 풍부

- 자바는 오픈소스 언어이므로 자바 프로그램에서 사용하는 라이브러리 또한 오픈소스가 많다. 고급 기능을 구현하는 코드를 직접 작성할 경우 시간과 노력이 필요하고, 실행 안전성을 보장할 수 없지만 검증된 오픈소스 라이브러리를 이용하면 개발기간을 단축하며 안정성이 높은 애플리케이션을 쉽게 개발할 수 있다.

 

 

 

 

 

 

 

 

베타존 : 네이버쇼핑 스마트스토어

나를 꾸미다 - 인테리어소품 베타존

smartstore.naver.com

 

반응형
Comments