[Java] 특징, JVM, JDK, JRE, 객체지향, 클래스, 인스턴스

클라우드·2024년 4월 1일
0

Java

목록 보기
1/20
post-thumbnail

1. Java의 특징

  • JVM만 있으면 플랫폼과 상관없이 플랫폼에 독립적인 언어로써 돌아간다.
  • C 계열 언어보다는 배우기 쉽다.
  • 메모리 관리를 하지 않아도 된다.
    • 가비지컬렉터 - 메모리 관리를 자동적으로 수행함. 사용되지 않는 것이 자동으로 반환된다. (메모리 프레쉬 기능)
    • 코드 자체 로직에 대해 집중할 수 있다.
  • 멀티쓰레드를 Java 언어 차원에서 지원한다.
  • 강타입언어(Strong Type 언어)

2. JVM(Java Virtual Machine)

  • 플랫폼에 종속적, 독립적인 형태
  • C로 구현되어 있다.
  • JVM ↔ Java 애플리케이션 ↔ JVM ↔ OS(Windows) ↔ 컴퓨터(하드웨어)
  • 일반 애플리케이션 ↔ OS(Windows) ↔ 컴퓨터(하드웨어)
  • 참고
  • C보다 느리다.
  • 예전에는 속도가 문제가 되었는데 지금은 JIT와 같은 기술이 발전되어서 속도 문제 거의 해결!
    • JIT 컴파일(just-in-time compilation) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법이다.
  • 머신마다 쓰는 기계어가 다르기 때문에.. 컴파일 과정을 거친다..
  • 컴파일 하면 바이트 코드가 나온다. 그럼 JVM이 이걸 읽고 기계어로 변환하여 머신이 읽는다.

3. JDK, JRE, JVM

  • JVM JRE JDK
  • JDK Java Development Kit (JDK안에 JRE가 들어간다.)
    • Java를 사용하기 위한 필요한 모든 기능을 갖춘 Java용 SDK이다.
    • JRE 포함 컴파일러 javac와 jdb, javadoc 등의 도구도 있다.
    • 즉, JDK는 프로그램을 생성하고 컴파일할 수 있다.
  • JRE Java Runtime Environment (JRE안에 JVM이 들어간다.)
    • JVM, Java Class Library (API), Java Command 및 기타 인프라를 포함한 컴파일된 Java 프로그램을 실행하는 데 필요한 패키지
  • 포함관계
  • JDK 1.0부터 시작해서 버전업이 계속 되고 있다.
  • JDK 1.5 버전이 되었을 때 언어 자체가 한 단계 업그레이드가 됐다. → Java 5.0으로 명명
  • JDK 1.8은 당연히 Java 8이라고 부른다. (상당수가 Java 8을 기업에서 쓰고 있다.)
    • Java 9부터 패키지의 상위 개념인 모듈 개념이 생긴다.
    • 하위호환성 담보가 깨진다..
    • Java 11은 신규로 나온 곳이 많이 쓰고 있다고 함
    • 수업은 Java 8로 진행한다.
  • Java는 부분 유료
    • 기본 기능은 무료(GPL license) 여기에 오라클이 추가적으로 제공하는 글꼴, Java Web Start는 유료로 제공된다.

4. 객체지향의 기본적인 개념

  • 프로그래밍의 패러다임 변화부터 알아보자.
  • 프로그래밍 방법론의 변화
  • 함수형 프로그래밍 → 구조적 프로그래밍, 절차적 프로그래밍
  • 객체지향 프로그래밍

4.1 절차적 프로그래밍

  • 절차적 프로그래밍의 특징
    • 프로그램을 기능별로 세분화해서 함수로 나눠서 프로그래밍을 하는 방식
    • 프로그램을 기능 단위로 구현한다. 각 기능을 함수라는 실행 단위로 구현해서 그 함수를 모아 전체 프로그램을 완성
    • 장점: 프로그램의 설계가 쉽다. → 개발이 쉽다. → 개발 기간이 단축된다. → 비용 절감
    • 단점: 유지보수와 모듈(함수)의 재활용성이 떨어진다.
    • 이 단점을 해결하기 위해 나온 프로그래밍 패러다임이 바로 객체지향 프로그래밍이다.

4.2 객제지향 프로그래밍

  • 객체지향 프로그래밍의 특징
    • 현실세계, 구성요소를 프로그래밍 적으로 표현한다.
    • 각각의 객체로 표현하고 모델링한다.
    • 구현하고자 하는 현실세계의 문제를 구성하고 있는 구성 요소를 파악하고 이 구성 요소를 프로그램적으로 모델링해서 해당 구성 요소들이 데이터를 주고 받는 형태를 프로그래밍하는 방법
    • 장점: 프로그램의 유지보수와 재활용성에 장점이 있다.
    • 단점: 설계와 구현이 상대적으로 어렵다.
  • 현실 세계의 문제를 구성하고 있는 구성 요소를 파악하는 작업을 해야 한다.
    • Abstraction(추상화) 과정을 거쳐서 프로그램적으로 표현해야 하는 속성값, 행위로 표현한다.
    • 클래스라는 단위로 속성값 - 변수, 행위 - 함수로 표현한다.
    • 객체 모델링의 수단 - 클래스
    • 속성값은 변수로, 행위는 함수로, 프로그램적으로 표현해야 한다.
    • 이 2가지를 하나의 단위로 만들기 위해서 사용하는 개념이 바로 class.
    • 그래서 class의 의미 중 하나는 바로 객체 모델링의 수단
    • 변수는 필드 field라고 부른다.
    • class 내부에는 변수에 해당하는 field, 함수에 해당하는 method가 존재한다.
  • 인스턴스
    • 인스턴스화 Instanciation → 클래스로 표현한 것을 메모리 상에 할당을 해야 한다.
    • 인스턴스: 메모리 공간
    • instance는 class 안에 정의된 변수(field)를 실제 메모리 영역에 공간을 확보한 것.
    • class는 instance를 만들어내기 위한 수단
    • class도 하나의 데이터 타입 (ADT)
    • 클래스는 추상 데이터 타입 Abstract Data Type ADT라고도 불린다.
    • class 안에 정의된 field를 이용해서 메모리 공간을 확보하고 해당 공간에 대한 데이터 타입은 당연히 class 명으로 설정해야 한다.
    • class는 하나의 데이터 타입.
    • 즉, 우리가 임의로 만들 수 있는 데이터 타입이기 때문에 ADT(Abstract Data Type) 이라고도 불린다.
    • 추상화의 결과로 나온 것이 결국 class이다.
  • class란 무엇인가요?
    • 객체 모델링의 수단
    • 인스턴스를 만들어내기 위한 수단
    • ADT

5. Java program의 특징

  • 우리가 자바 프로그램을 작성할 때
    • 원칙적으로 하나의 Java Source File에 하나의 class만 정의한다.
      • 재활용성 + 유지 보수 때문에!
  • 소스 파일의 확장자는 .java를 사용
  • 여러 개의 source file(여러 개의 class)가 모여서 하나의 Java application을 구성한다.
  • Java program의 entry point(진입점)는 main() method이다.
profile
안녕하세요 :)

0개의 댓글