JAVA란 무엇일까?

JIHYE·2022년 1월 5일
0
post-thumbnail

모의 면접에서 JAVA개발자로서 JAVA에 대해 설명을 해보라고 하셨는데 하나도 정리가 되어있지않아서 제대로 답변을 못했다. 이참에 우리의 좋은 친구 JAVA에 대해 알아보려한다.

JAVA?

JAVA는 썬 마이크로시스템즈(Sun Microsystems, Inc.)에서 개발하여 1996년 1월에 공식적으로 발표한 객체지향 프로그래밍 언어이다.
원래의 목표는 C++을 확장하여 가전제품에 탑재될 소프트웨어를 제작하는 것이었는데, C++로는 불가능하다는것을 깨달은 진성컴공들(제임스 고슬링, 아서 밴 호프)이 C++의 장점을 도입하고 단점을 보완한 새로운 언어를 개발한것이 JAVA이다.
운영체제의 종류에 관계없이 실행이 가능하다.

JAVA의 특징

01 운영체제에 독립적

JVM(Java Virtual Machine)을 통해 운영체제와 상관없이 동작가능하다.
JAVA application은 운영체제나 하드웨어가 아닌 JVM하고만 통신을 하고 JVM이 운영체제가 이해할 수 있도록 변환하여 전달한다.
한번 작성하면, 어디서나 실행된다(Write once, run anywhere)

02 객체지향언어

객체지향 프로그래밍언어의 특징인 상속, 캡슐화, 다형성이 잘 적용된 순수한 객체지향 언어이다.

객체지향 프로그래밍(Object-Oriented Programming, OOP)

  • 인간 중심적 프로그래밍 패러다임
  • 현실 세계를 프로그래밍으로 옮겨와 프로그래밍하는 것
  • 현실 세계의 사물들을 객체라고 보고 그 객체로부터 개발하고자 하는 애플리케이션에 필요한 특징들을 뽑아와 프로그래밍 하는 것(추상화)

OOP의 장점

  • 이미 작성한 코드에 대한 재사용성이 높음
  • 자주 사용되는 로직을 라이브러리로 만들어두면 계속 사용할 수 있음
  • 신뢰성 확보 가능
  • 내부적으로 어떻게 동작하는지 모르더라도 라이브러리가 제공하는 기능을 사용할 수 있기때문에 생상성이 높음
  • 객체 단위로 코드가 나눠져 작성되기 때문에 디버깅이 쉽고 유지보수에 용이
  • 데이터 모델링을 할 때 객체와 매핑하는 것이 수월하기 때문에 요구사항을 보다 명확하게 파악하여 프로그래밍 할 수 있음

OOP의 단점

  • 객체 간의 정보 교환이 메시지 교환을 통해 일어나므로 실행 시스템에 많은 overhead가 발생(하드웨어의 발전으로 많이 보완됨)
  • 객체가 상태를 갖게 되기 때문에 애플리케이션 내부에서 버그를 발생시킴(함수형 패러다임이 주목받고 있음)
    출처 : JaeYeopHan/Interview_Question_for_Beginner

OOP의 특징

  • 캡슐화(Encapsulation)
    → 데이터와 코드의 형태를 외부로부터 알 수 없게하고, 데이터의 구조화 역할, 기능을 하나의 캡슐형태로 만드는 방법

  • 상속(Inheritance)
    → 상위 클래스의 모든걸 하위 클래스가 모두 이어받는 것

  • 다형성(Polymorphism)
    → 한 객체가 다른 객체로 재구성 되는 것(Overriding, Overloading)

    Overriding

    하위 클래스가 부모 클래스의 기본적인 동작방법을 변경하는 것

    Overloading

    같은 이름을 가진 메서드가 파라미터의 수나 자료형이 다른 것

  • 추상화(abstraction)
    → 객체의 공통적인 속성과 기능을 추출하여 정의하는 것

03 비교적 배우기 쉬운 언어

연산자와 기본구문은 C++에서, 객체지향관련 구문은 small talk이라는 객체지향언어에서 가져왔다.
장점은 취하면서 복잡하고 불필요한 부분은 과감히 제거하여 단수화함으로서 쉽게 배울 수 있다.

04 자동 메모리 관리(Garbage Collection)

가비지 컬렉터(garbage collector)가 자동적으로 메모리를 관리해주기 때문에 프로그래머는 메모리를 따로 관리 하지 않아도 된다.

05 네트워크와 분산처리를 지원

Java API를 통해 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발할 수 있도록 지원한다.

06 멀티쓰레드(Multi-Thread)

시스템과는 관게없이 멀티쓰레드 구현이 가능하며, Java API가 제공되므로 구현이 쉽다.

07 동적 로딩(Dynamic Loading) 지원

실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다.
일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않아도 된다.

출처 : 남궁성 <Java의 정석>

profile
초보개발자의 개발일기

0개의 댓글