JAVA

Java의 특징과 객체지향에 관한 글

sogummi 2023. 3. 20. 09:28

먼저 Java의 가장 큰 특징은 완전한 객체지향 언어라는 점! 그리고 C++과 유사한 개념이 있어서 C/C++ 기본지식있으면 배우기 편함 대충 이정도 연관성이랄까.. C와 C++을 배웠다면 비교해서 공부해보삼 

C 절차적 프로그래밍 메모리 할당/반납 필요 유기적 구조   
C++ 하이브리드 객체지향  메모리 할당/반납 필요 클래스와 캡슐화   
Java 완전 객체지향 언어 자동 메모리 관리    

*하이브리드 객체지향 : 객체지향 프로그래밍과 절차적 프로그래밍 모두 지원 

절차지향 언어와 객체지향 언어의 간단한 비교(개념잡기) 

  특징 장점 단점
절차적 언어 1. 프로그램 전체의 유기적 구조(순차적 특성) 
2. 컴퓨터 구조와 유사한 순서

1. 빠른 실행속도
2. 메모리 관리에 좋음

1.어려운 유지보수
2. 낮은 코드 재사용성(모듈화의 어려움)
3.융통성 부족으로 인한 비효율성(순서중요)
객체지향 언어 1.데이터와 메소드를 객체단위로 묶어서 처리하는 특징
2.캡슐화,다형성,상속 개념
3. 객체 단위 프로그램 설계
1. 코드 재사용 가능
2. 유지보수에 용이
3. 상대적으로 디버깅 쉬움
1. 상대적으로 느린 실행속도

  • Java의 특징
    1. 완전한 객체지향 언어
    2. 플랫폼에 독립적
    3. 엄격한 자료형 검사 -> 컴파일 필요
    4. 멀티 스레딩 지원 
    => Java는 멀티스레드를 지원하기 때문에 여러 개의 독립적인 실행흐름을 동시에 실행시킬 수 있음 
    5. 예외 처리 기능

- 프로세스(실행중인 프로그램)안에서 존재하는 독립적인 작은 실행 : 스레드
- Java 플랫폼 다운 후 운영체제 내에 설치하면 개발 툴 중에 하나로써 컴파일러가 존재하고 그 컴파일러를 이용하여 소스를 컴파일함 
- Java 소스 프로그램 확장자 : .Java (자바 소스파일)
  • Java 프로그램 실행 과정


<바이트 코드(Bytecode)> 
- .Java를 컴파일하면 .class 파일이 생성됨 (자바 바이트코드) 
  => Java소스를 컴파일한 결과물: 바이트 코드 또는 class파일
- 어떤 운영체제를 사용하던지 간에 거기에 맞는 자바 플랫폼이 존재하면 바이트코드는 어디서든지 실행이 가능함 (플랫폼에 독립적)  
- Java는 컴파일하면 바이트코드가 생성되고(*엄밀히 말하면 바이트코드는 기계어코드가 아닌
자바 실행환경인 자바플랫폼=JavaVM에서 실행가능함.. (JavaVM기준에선 기계어코드)) 
*Java 가상 기계(Java VM; Java Virtual Machine) 
(참고: C언어로 프로그램 작성 후 컴파일하면 object파일 생성되고 여러 개의 object파일을 연결시켜 실행 파일을 생성한다. 그 실행 파일은 해당 운영체제에서 직접 실행이 가능한 기계어 코드가 된다.)

  • 애플리케이션과 애플릿
    1. 애플리케이션(운영 체제에서 직접 실행되는 소프트웨어 프로그램
    - Java 플랫폼에서 실행되는 프로그램
    - 실행을 위해 main()함수가 필요함

    2. 애플릿 
    - 웹 브라우저를 통해 실행되는 소프트웨어 프로그램 
    - 요즘에는 잘 안쓰임 
  • Java 플랫폼
    *플랫폼이란?
    - 프로그램 실행을 위한 하드웨어와 소프트웨어 환경
    - 플랫폼에는 운영체제, 라이브러리, 프레임워크 등이 있다. (모바일 플랫폼 - 안드로이드,iOS 등 / 웹 플랫폼 - 웹 브라우저, 서버, 프레임워크 등) 

    - 애플리케이션을 구축하고 실행하는데 필요한 기술적 요소를 제공함 
    - Java플랫폼은 Java프로그램의 구축과 실행을 위해 필요한 요소를 제공하는 환경임(운영체제에 맞는 플랫폼 설치)

    1.  Java VM
    - Java 프로그램의 실행 환경을 제공하는 가상 기계
    - Java 프로그램의 구동 엔진
    - 자바의 장점인 "Write once, run anywhere"의 개념을 실현해줌
      => JVM은 다양한 플랫폼에서 작동하기 때문에 바이트코드로 작성된 파일은 어디서든지 작동가능함(=플랫폼 독립적)
    - 운영체제와 독립적으로 동작 
    - 실행에 필요한 사항을 관리 => 쓰레드 관리, 예외처리, 코드 최적화 등! 
    - 메모리 정리를 자동으로 수행 (C/C++ 에서는 new연산자 또는 delete연산자를 이용해서 메모리를 할당받고 운영체제로 반납했어야 했는데 JavaVM이 자동으로 해주기 떄문에 프로그래머가 신경쓰지 않아도 됨) 

    2. Java API(Application Programming Interface)
    - 프로그램의 개발에 필요한 클래스 라이브러리(C는 함수단위 라이브러리)
    - 패키지(클래스 묶음)들이 계층 구조로 분류되어 있음 
    - 자주 사용되는 기능을 추상화하고 캡슐화하여 코드를 간결하게 작성하도록 도와준다.