본문 바로가기

Archived(CSE Programming)/Java

Java 언어의 특징

1. Java와 C의 비교

1) 객체지향 vs 절차지향

Java는 객체지향언어(OOP)로 이루어져 Class 중심으로 코드를 동작되는 반면에 C는 절차지향으로 함수 중심의 절차에 따라 코드가 동작된다.

 

2) JVM의 유무

Java는 Virtual Machine(VM)위에서 동작되므로 플랫폼 독립적으로 코드가 동작할 수 있다.

 

3) Garbage Collection

Java는 자동으로 Garbage Collection이 동작하여 빈 메모리를 비워주므로 개발자가 메모리 관리에 있어 편리함을 느낄 수 있는 반면에 C는 수동으로 Garbage Collection을 구성해야 한다.

 

4) 그 외

Unsigned int 지원 여부.

Java는 Call-by-Value(reference도 참조값을 복사함).

2. Java와 C++의 비교

1) 다중 상속

가장 큰 차이점이라고 할 수 있다. Java는 단일 상속만을 지원한다(Interface를 통해 유사 다중 상속을 구현할 수는 있다). C++은 다중 상속을 지원한다(다이아몬드 문제가 발생할 수 있다 -> 참고 : https://codingcoding.tistory.com/517).

 

2) 메모리 관리

Java는 객체 생성 시 메모리의 Heap 영역에만 할당된다. 그렇지만 C++은 Stack과 Heap 영역 모두 할당 가능하다. 추가로 Garbage Collection의 자동/수동 여부도 차이가 난다.

 

3) 문법적 차이

C++은 Friend keyword(접근제어의 수준을 무시하고 접근가능)가 존재.

Java는 동적 바인딩이 Default인 반면에 C++은 정적 바인딩이 Default(Virtual 키워드를 통해 동적 바인딩 가능)

(참고 : 동적 바인딩 vs 정적 바인딩 https://secretroute.tistory.com/entry/140819)

Java는 익명 클래스를 통해 함수형 PR 가능.

3. 객체 지향특징

참고 : https://gmlwjd9405.github.io/2018/07/05/oop-features.html

 

[Java] OOP(객체지향 프로그래밍)의 특징 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

객체지향 프로그래밍 이란 캡슐화, 다형성, 상속 을 이용하여 코드 재사용을 증가시키고, 
유지보수를 감소시키는 장점을 얻기 위해서 객체들을 연결 시켜 프로그래밍 하는 것 입니다.

출처: https://vandbt.tistory.com/10 [소프트웨어 디자인- Design Software by vandbt]

1) 추상화(Abstraction) : 객체들의 공통적인 성질(변수)과 기능(메소드)를 추출해내야 한다.

2) 캡슐화(Encapsulation) : 객체가 독립적으로 동작할 수 있도록 묶어주는 것(정보 은닉, 유지보수, 사용자 편의).

3) 상속(Inheritance) : 상위 클래스의 특징을 하위 클래스가 물려 받는다. 재사용성, 다형성의 토대.

4) 다형성(Polymorphism) : 특정 처리에 대해서 서로 다른 클래스가 각자의 방식으로 표현이 가능하다.

(참고 : 오버로딩 vs 오버라이딩)

4. JVM

참고 : https://preamtree.tistory.com/2

 

[IT 기술면접 준비자료] JVM(Java Virtual Machine)의 구조와 구동원리

JAVA라는 언어를 공부한 적이 있다면, JVM(Java Virtual Machine)에 대해 들어본 적 있을 것이다. 이번 포스팅에서는 평소에 간단하게 공부하고 지나치기 쉬운 JVM에 대해 알아보려고 한다. 그림1. 일반적인 윈도..

preamtree.tistory.com

JVM은 Java Virtual Machine의 약자로, Java의 주요한 특징 중에 하나이다.

요약하자면, 기존에 컴파일 -> 링킹 -> 로딩 -> 패치(명령어를 register에) -> 디코딩 등의 과정에서 JVM이라는 가상머신이 관여를 하여 동작한다.

https://preamtree.tistory.com/2

  • JVM은 Bytecode를 구동하고 있는 OS에 맞추어 BinaryCode로 해석(Interpret)한다. 그러므로 JAVA 프로그램은 OS에 독립적이다. (Platform Independence)
  • Bytecode는 클래스 단위(.class)로 생성되므로, 프로그램의 수정이 일어나더라도 전체 소스코드를 다시 컴파일할 필요가 없다.
  • 프로그램이 실행되는 도중에도 JVM은 OS로부터 메모리를 할당받아 스스로 관리한다. 대표적으로 GC(Garbage Collection)이 있다.

 

'Archived(CSE Programming) > Java' 카테고리의 다른 글

Java 컬렉션(Collection)  (0) 2019.11.03
Java 추상클래스, 인터페이스  (0) 2019.11.03
Java 오버로딩과 오버라이딩  (0) 2019.11.02
Java 멤버 변수, 접근제어자  (0) 2019.11.02
Java 자료형  (0) 2019.10.31