본문 바로가기
국비학원 전 강의 필사/점프 투 자바

#01-02 자바의 특징 - <점프 투 자바>

by kkooHan 2022. 8. 17.

 

출처 : https://wikidocs.net/book/31

 

 

점프 투 자바

**초보 프로그래머를 위한 자바 입문서** 이 책은 문법위주의 지식보다는 이해중심의 지식을 전달하는 것을 주 목적으로 한다. 예를 들어 자바에서 잘 파악하기 힘든 개념 ...

wikidocs.net

 

 

 

 

 

 

필사 :

 

자바를 개발한 선 마이크로 시스템즈는

자바를 아래와 같이 정의하였다.

여기에 사용한 단어들이 자바의 특징을 잘 나타내 준다.

 

java : A simple, object-oriented, distributed, interpreted, robust, secure, architecture neutral,

     portable, high-performace, multithreaded, and dynamic language

 

 

간단하다 (Simple)

자바는 C++에 가깝지만 훨씬 간단하다.

자바는 고급 언어들에 들어 있는 여러 가지 요소들 중에서

반드시 필요하지 않다고 생각된 부분들은 모두 제거했다.

 

 

객체지향적이다 (Object-oriented)

자바는 숫자(int, float, long 등)나 논리값(true, false)을 제외한

거의 모든 것이 객체로 구성되어 있다.

실제로 자바는 Object 클래스에서 모든 클래스를 파생한다.

-> 한 번 검색해 봤었는데 정확히 기억이 안나네

 

 

인터프리터 언어이다 (Interpreted)

자바는 정확하게 말하면 컴파일 언어인 동시에 인터프리터 언어이다.

자바는 먼저 텍스트 소스를 컴파일하여 2진 파일(클래스 파일)로 만든 다음

자바 런타임이 클래스 파일을 인터프리트하면서 실행한다.

먼저 시스템에 무관한 2진 파일을 만듬으로써

자바는 컴파일 언어에 가까운 속도와 시스템 독립성을 동시에 얻을 수 있었다.

-> 조코딩님 파이썬 강의에서 한 번 들어봤는데 기억이 잘 안나네

 

 

강력하다 (robust)

자바는 포인터 연산을 지원하지 않는다.

이는 잘못된 주소를 가르킬 가능성을 사전에 없앤 것이다.

자바는 모든 메모리 접근을 자바 시스템이 관리하고 제한하며

또한 예외 핸들링을 하여 시스템 붕괴의 우려가 없다.

예를 들어 자바는 리소스 관리(garbage collection)를 하는데

사용이 끝난 리소스를 시스템이 메모리에서 삭제하는 방식을 채택하고 있어

메모리 누출에 대한 고민을 프로그래머가 할 필요가 없다.

-> 러스트 언어에 대해 알아보다가 비슷한 개념 들었었는데 기억이 안나네

 

 

안전하다 (Secured)

자바는 포인터 개념이 없고 유형 정의가 강고하여서

실행 전에 클래스 파일을 이용한 프로그램의 검사가 가능하다.

 

자바는 프로그램 작성 시 자료형 타입에 광장히 민감하다.

이것은 마치 코딩할 때 잔소리꾼이 끊임없이 따라다니며

잘못된 코드를 작성하지 않게끔 도와주는 역할을 한다.

그래서 자바는 일단 컴파일만 되면

실행 시 오류가 발생하는 경우가 다른 언어에 비해 현저히 낮다.

능숙한 프로그래머라면 자바의 이렇듯 유연성이 없는 고지식한 면을 싫어할 수도 있다.

 

하지만 자바의 이런 족쇄같은 타입체크는

코드를 매우 명확하게 만들어주는 힘이 있다.

컴파일이 되었다면 코드에 결정적인 문제는 없는 것이다.

 

 

플랫폼 독립적이다 (Platform independent)

자바의 실행 파일은 이진 코드(클래스) 파일이다.

따라서 자바 런타임이 설치된 시스템에서는 어디서나 자바 프로그램을 실행할 수 있다.

-> JRE?

 

자바에는 많은 특징이 있지만

가장 큰 특징이라면 한 번 작성한 프로그램은

OS에 상관없이 어디서든 돌려볼 수 있다는 점일 것이다.

이것은 자바 프로그램이 Virtual Machine에 의해서 실행되기 때문이다.

처음에 이 방식은 Virtual Machine을 실행시켜서 프로그램을 돌려야 하기 때문에

좀 느리고 부담스러웠다. 하지만 지금은 하드웨어의 눈부신 발전과 여러 기술들의 개발로

이러한 단점들이 대부분 사라져버린 상태이다.

 

 

멀티 쓰레딩을 지원한다 (Multithreaded)

멀티 쓰레드를 지원할 경우 하나의 프로그램 단위가 동일한 쓰레드를 동시에 수행할 수 있다.

특히 자바는 멀티 프로세서 하드웨어를 지원하도록 설계되었으므로

멀티 CPU 시스템에서 높은 효율을 낼 수 있다.

 

 

동적이다 (Dynamic)

자바 인터페이스를 이용하면

하나의 모듈을 갱신할 때 다른 모듈을 모두 갱신할 필요가 없다.

이것은 인터페이스가 모든 인스턴스 변수와 도구의 실행문을 배제한 채

객체 간의 상호 작용을 정의하기 때문이다.

 

 

 

 

느낀점 : 

 

인터프리터 -> 한 문장씩 바로 바로 번역한다.

느리지만, 중간에 실수가 있더라도 바로잡을 기회가 있다.

=> 느리게 실행되고, 바로 시작하고, 어떻게 일이 진행되는지 볼 수 있다.

inter = between -> 항상 프로그램과 컴퓨터 사이에 있으면서 한 줄씩 번역.

 

컴파일러 -> 한꺼번에 모두 번역.

번역까지는 시간이 걸리지만 이후 아주 빨리 진행된다.

실수가 있으면 고치기엔 너무 늦었다.

=> 실행하기 전 준비시간이 좀 더 걸리지만, 그 후 부터는 아주 빠르고 효율적으로 실행

compile : 차곡차곡 쌓다 -> 전체 프로그램을 차곡차곡 쌓아서 한 번에 번역.

 

<참고자료 출처>

https://wikidocs.net/132948

https://youtu.be/Dx2tSsd3aFchttps://wikidocs.net/132948

 

 

 

객체 지향 프로그래밍이란? 

우리가 실생활에서 쓰는 모든 것을 객체라 한다.

객체 지향 프로그래밍은 프로그램 구현에 필요한 객체를 파악하고

각각의 객체들의 역할이 무엇인지를 정의하여

객체들 간의 상호작용을 통해 프로그램을 만드는 것을 말한다.

 

객체는 클래스라는 틀에서 생겨난 실체(instance)이다.

따라서 객체 지향 프로그램은

객체와 객체 간의 연결로 되어 있으며

객체 안에 자료구조와 알고리즘이 들어있는 것이다.

 

절차 지향

절차 지향 모델링은 프로그램을 기능 중심으로 바라보는 방식으로

"무엇을 어떤 절차로 할 것인가?"가 핵심이 된다.

즉, 어떤 기능을 어떤 순서로 처리하는 가에 초점을 맞춘다.

 

객체 지향

객체 지향 모델링은 기능이 아닌 객체가 중심이 되며

"누가 어떤 일을 할 것인가?"가 핵심이 된다.

즉, 객체를 도출하고 각각의 역할을 정의해 나가는 것에 초점을 맞춘다.

 

절차 지향 VS 객체 지향

 - 대형 프로그래밍의 경우 많은 기능을 수반하기 때문에 절차 지향보다는 객체 지향이 적합

   - 각 객체가 하는 역할이 많아도, 많은 역할을 개체로 묶을 수 있기 때문 

 - 소형 프로그래밍의 경우 작은 기능을 수반하기 때문에 객체 지향보다는 절차 지향이 적합

  - 작은 기능을 개체별로 나눌 경우, 오히려 복잡해질 수 있기 때문

 

<참고자료 출처>

http://www.incodom.kr/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5#h_8518e25c0e2cd7cac88e609e7b3bf070

 

 

 

 

예시를 통한 용어의 정의 설명이 가능하다면 그것에 대해 아는 것이다.

 

 

 

 

 

 

댓글