작은 고양이의 캣 타워

0 _2. 자바의 특징

by J4BEZ

+자바의 특징

Sun[ORACLE]사의 자바 백서에 나열된 '11가지 자바의 특징'(혹은 언어 설계 목표)에 대해 알아볼 거예요.

 

i). 단순함(Simple): 좀 복잡하고 짜증 난 건 빼고, 쓸만하고 필요한 건 보충하고

-> JavaC++에서 출발하였지만, 까다롭고 혼란을 일으킬 만한 부분들(포인터, 다중 상속, 연산자 중복. etc)은

삭제하고, 꼭 필요한 기능만 포함시켰어요.

 

 

ii). 객체 지향적(Objected-Oriented): 부품 조립

-> 자바는 처음부터 객체 지향적 언어로 설계되었고. 객체지향적 언어라면 제공해주어야 하는

추상화(Abstraction), 상속(Inheritance), 그리고 다형성(Polymorphism) 등과 같은 특성들을 모두 완벽히

제공해 주고 있어요.

 

-> 객체 지향객체별로 코드를 작성하고, 객체들을 조합하여 전체 프로그램을 완성하는 프로그램 설계 방법론입니다.

(<->절차 지향: 순서에 중요시)        객체 지향 VS 절차 지향에 대해 조금 더 쉽고 확실히 알아볼까요?

이러한 객체 지향적 특성 덕분에 소프트웨어 개발 시 보안 측면 과 재활용 측면 그리고 효율성 에서 많은 장점을 가지죠.

더보기

링크된 게시글에 매우 잘 나와있는 내용이지만 한번 더 정리해드릴게요!

아아 참고로 이 시간에 이해하지 못하셔도 다음에 클래스, 객체, 메소드를 다루는 파트에서 한번 더 확실히

집고 넘어갈 테니 안심하세요! 오늘은 단지 맛보기예요!

 

> I. 캡슐화(Encapsulation)

캡슐화란 관련된 데이터와 알고리즘이 하나의 묶음으로 정리된 것으로 연관된 데이터와 알고리즘을 하나의 객체로 보관하여

관리하거나 사용하기에 편리하게 함과 동시에 마치 가루약이 캡슐 안에 쌓여  실체를 볼 수 없는 것과 같이 

데이터를 외부로부터 직접적인 접근을 할 수 없게 하는 일종의 정보 은닉(information hiding)이라 할 수 있어요.

💊

중요한 데이터를 직접적으로 불러오고 변형시키는 것을 지양할 때 사용해요.

외부에서 접근할 때 '메소드'라는 친구를 이용하여 해당 데이터 값을 불러오고 설정해주는데

보통 값을 불러오는 메소드를 Getter , 값을 설정하는 메소드를 Setter 라고 불러요.

 

> II. 상속(Inheritance)

상속은 이미 작성된 클래스{} (캡슐화된 소스코드라구 보면 돼요)를 이어받아 새로운 클래스를 생성하는 기법이에요.

물려주는 클래스를 부모 클래스 또는 상위 클래스라 하고 이어받는 클래스를 자식 클래스 혹은 하위 클래스라고 해요
특별히 데이터나 메소드가 보호되지 않는다면 자식 클래스 부모 클래스로부터 상속 받은 데이터나 메소드를

사용할 수 있어서 코드 재활용에 용이 하죠!

 

>III. 다형성(Polymorphism)

다형성은 객체가 취하는 동작이 상황에 따라서 달라지는 것을 의미해요,

쉽게 말하자면, 서로 다른 객체가 같은 이름의 명령에 응답하여서 서로 다른 동작을 보여주는 것이 가능하죠.

🐈.speak() = "냐옹냐옹"

🐕.speak() = "멍 멍"

실제 동작은 다르더라도 개념적으로 동일한 작업을 해야 할 경우에 똑같은 이름을 부여해 줄 수 있으므로

이름 짓는 시간이 크게 줄어들게 돼요.

(실제로 코딩하다 보면 코딩하는 것보다 이름 짓는 게 시간이 더 오래 걸릴 때도 있어요. '오늘 점심 뭐 먹지'와 비슷합니다.)

실제로 다른 확장자를 가지고 모습도 다르지만,  모두  고양이 친구들이에오.

 

>IV. 추상화(Abstraction)

추상화란 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 만드는 기법이에요. 

공통된 친구들에 대해 필요 없는 정보는 빼고 간단한 뼈대 만 만들어서 효율적인 작업이 가능하게 하는 기법이에요.

 

나중에 예제와 함께 하나하나 자세히 파볼 거예요!!
오늘은 이 정도까지만 알아두는 걸로 해요!!

 

iii). 분산 환경에 적합(Distributed): 네트워크 환경에서 효율적인 분산처리 작업이 가능해요.

->자바는 인터넷 또는 네트워크를 통하여 효율적으로 수행될 수 있도록 설계되었어요.

http, ftp, tcp/ip 프로토콜 등과 연관된 라이브러리를 제공해주고,

다른 컴퓨터에 있는 원격 객체들을 호출할 수 있는 RMI(Remote Method Invocation)기능을 제공합니다.

 

 

iv). 견고(Robust): 어디서나 안정적으로

-> 자바한번 작성된 코드가 다양한 컴퓨터에서 실행되어야 해서 높은 신뢰성이 요구돼요.

-> 이 높은 신뢰성을 유지하기 위해서 다음과 같은 특징들을 가지게 되죠:

더보기

-1.: No Pointer: 포인터가 없어요!

포인터는 프로그램에서 메모리 접근이 자유롭게 해주는 친구지만,

오류 발생 빈도도 높일 수 있어요.  그래서 자바는 포인터를 없앴어요! 와우!

 

-2.: Automatic Garbage Collection: 메모리 자동 반납 시스템!

C언어에서는 메모리 할당을 하고, 해지를 해주어야 하는데, 자바는 해지를 자동으로 해줘요!

 

메모리 해지를 안 해주면, 필요 없는 프로세스의 메모리 크기가 지속적으로 커지면서

시스템의 메모리를 잡아먹게 되어 문제가 되죠.

 

-3.: Strict Type Checking: 타입 체크

코드를 읽을 때(컴파일)/프로그램이 실행될 때(런타임)에 클래스 타입의 체크가 가능해요.

자바에선 모두 클래스 단위로 동작하기 때문에, 이 기능을 통해 오류 파악이 수월해지죠.

 

-4.: Runtime Error Processing:  에.. 저기 이거 오류 있을 것 같아서 실행 못하겠는데요?

예외처리 기능을 의미하는 거예요. 장단점이 있는 기능이죠

불확실한 작업을 실행함에 있어선 예상되는 에러의 수는 수 도 없이 많을 텐데,

확실히 일어나면 안 될, 일어날 가능성이 있는 에러들을 Exception이라 생성을 해놓고

try~catch를 통해 걸러내고 임무를 수행하는 거죠!   try~catch문은 나중에 좀 더 자세히 알아볼 거예요!

 

 

v). 컴퓨터 구조에 중립: Write Once, Run Everywhere

-> 자바는 서로 다른 네트워크 환경에서 분산되어 실행될 수 있도록 설계되었는데,

이와 같은 환경에서는 응용 프로그램들이 다양한 플랫폼에서 실행될 수 있어야만 하죠.

-> 서로 다른 플랫폼에서 효율적인 코드 전송을 위해, 구조 중립적인 중간 코드 바이트코드를 생성합니다.

 

-> 자바는 컴파일(코드 실행)하게 되면, 컴파일러에서 소스코드를 자바 바이트코드(Java Bytecode)로 변환합니다.

-> 바이트 코드자바가상머신(JVM)에서 실행되기 위한 이진 파일로, 플랫폼에 구애받지 않고 독립적이에요.

-> 자바 가상 머신(JVM)에서 바이트 코드를 한 줄씩 해석하고, 특정 플랫폼에 그 결과가 실행되게 됩니다.

 

이 때문에, JVM을 설치할 수 있는 환경이라면,   그 어디라도 자바 프로그램을 실행할 수 있는 거죠!

 

 

vi). 안전(Secure): 보안에 강한 편이에요

-> 자바네트워크 환경에서 작업하도록 만들어진 언어이고, 그만큼 보안성에 중점을 둔 언어예요.

-> 또한 메모리에서 데이터에 접근을 제한 가능하여, 허가 없이는 앱의 데이터에 접근을 할 수가 없어요.

 

 

vii). 이식성(Portable): 다른 환경, 같은 코드

-> CC++ 과는 다르게 자바는 구현 환경에 따라 달라지는 자료의 크기(스펙)가 없습니다.

//ex). int형 자료의 크기:: -C / C++: 상황에 따라 16bit or 32 bit  -Java: 언제나 32bit

//자바는 실행환경이 자바 가상 머신(JVM)으로 동일하기 때문이죠!

이로 인해 다른 CPU, 다른 환경에서도 같은 코드를 사용할 수 있어요.

 

 

viii). 인터프리트 언어(Interpreter): 한 줄씩 해석하고 실행해요

-> 자바 언어로 작성된 자바 프로그램을 중간 언어인 형태인 자바 바이트코드컴파일 하고,

이 자바 바이트 코드를 자바 인터프리터가 한 줄씩 해석함으로써 프로그램이 실행되게 돼요.

-> 이러한 방식 덕분에 바 인터프리터런타임 시스템(실행 환경)이 이식된 모든 플랫폼에서

자바 바이트 코드를 직접 실행할 수 있죠. 

-> 자바는 인터프리트 기능이 있는 컴파일러 언어예요. 자세한 정보는 여길 클릭해보세요!

 

 

ix). 높은 수행성능(High Performance): 런타임 환경 검사 불필요

->자바에서는 인터프리터가 런타임 환경을 검사할 필요 없이 실행될 수 있도록 구성하였기 때문에

뛰어난 성능을 제공해 줍니다.

-> 또한 위에서 말했던 쓰레기 수집기(Garbage Collector)가 자동으로 낮은 우선순위의

백그라운드 스레드로 실행되어 메모리가 필요할 때에만 동작하도록 관리해줌으로 써,

자바 가상 머신(JVM) 무리를 주지 않게 하며 보다 나은 수행성능을 제공해줘요.

*스레드(Thread)란?: 프로그램에서 실행되는 작업들의 실행 과정에 대한 작은 단위를 말해요!

 

-> 만약 JVM에 무리를 줄만한 방대한 양의 계상을 수행하는 프로그램이 실행된다면,

계산이 많은 부분을 본래의 플랫폼(Window, Linux, ...)에 해당하는 기계어 코드(바이트코드 X)로 재작성하여

실행한 후 자바 프로그램과 상호작용 할 수 있도록 하였어요

 

 

 

x). 다중 스레드 지원(Multithreaded): 여러 가지 작업을 동시에!!

-> 자바는 프로그래밍 언어 안에서 여러 가지 작업을 동시에 실행하는 기능인 '다중 스레딩'을 지원해줘요.

-> 자바제공하는 도구 모음집(API)에는 스레드를 지원해 주기 위한 Thread 클래스가 있으며, 

자바 런타임 시스템(자바 실행 환경)에서는 모니터와 조건 잠금 함수를 제공합니다.

 

xi). 동적(Dynamic): 동적 로딩 지원

-> 자바는 인터넷과 같이 동적으로 변화하는 환경에 적응하도록 설계되었어요.

-> 기존의 C C++ 프로그램들은 라이브러리들이 변경되면 소스파일들을 다시 컴파일, 링크하여

새로운 실행파일을 생성해야만 했었지만, 자바는 실행되기 직전에 필요한 라이브러리를 필요할 때 불러와서

적재할 수 있어요! 이 것을 동적 로딩이라 하죠.

 

 

자.. 그럼 다음 시간에는 자바가 호환성 짱이 되게 해준 JVM이 어떤 친구인지 조금 더 자세히 알아보도록해요

도움받은 글: fate****님의 지식인 답변 , 프리 워커님의 지식인 답변 , 위시켓님 블로그

블로그의 정보

작은 고양이의 캣 타워

J4BEZ

활동하기