Java Intro

Dubiju·2022년 10월 31일
0

JAVA

목록 보기
1/2
post-thumbnail

JAVA

개요

https://www.tiobe.com/tiobe-index/

  • 썬 마이크로시스템즈(Sun Microsystems, Inc. 이하 썬)에서 개발하여 1996년 1월 공식 발표
  • 객체지향 프로그래밍 언어
  • 풍부한 클래스 라이브러리 (Java API)
  • 다양한 운영체제가 공존하는 웹 환경에 적합한, 전 세계에서 많이 쓰이는 언어

특징

✔️ 운영체제에 독립적으로 실행 가능
✔️ 객체지향 프로그래밍(Object Oriented Programming, OOP) 언어
✔️ 함수형 프로그래밍 지원
✔️ 자동 메모리 관리(Garbage Collection)
✔️ 네트워크와 분산처리 지원
✔️ 동적 로딩 지원

1. OS에 독립적

  • Write Once, Run Anywhere ('한번 작성하면, 어디서나 실행된다')
    : 자바로 작성된 프로그램은 운영체제와 하드웨어에 관계없이 실행 가능

JVM(Java Virtual Machine)

  • 자바를 실행하기 위한 가상 컴퓨터
  • 자바로 작성된 애플리케이션은 모두 JVM에서만 실행되기 때문에, 자바 애플리케이션이 실행되기 위해서는 반드시 JVM이 필요
  • 일반 애플리케이션의 코드는 OS만 거치고 하드웨어로 전달되는데 비해 Java 애플리케이션은 JVM을 한 번 더 거치기 때문에, 그리고 하드웨어에 맞게 완전히 컴파일된 상태가 아니고 실행 시에 해석(interpret)되기 때문에 속도가 느리다. (최근에는 JVM의 기능 향상되면서 속도의 격차를 많이 줄였다)
  • 일반 애플리케이션은 OS와 바로 맞붙어 있기 때문에 다른 OS에서 실행시키기 위해서는 애플리케이션을 그 OS에 맞게 변경해야 하지만, Java 애플리케이션은 JVM하고만 상호작용을 하기 때문에 OS와 하드웨어에 독립적이라 다른 OS에서도 프로그램의 변경없이 실행이 가능하다.
  • Java 응용프로그램은 JVM하고만 통신
  • JVM이 자바 응용프로그램으로부터 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달
  • 자바로 작성된 프로그램: 운영체제에 독립적
  • JVM: 운영체제에 종속적
    ➡️ 썬에서는 여러 운영체제에 설치할 수 있는 서로 다른 버전의 JVM을 제공

2. OOP (Object Oriented Programming, 객체 지향 언어)

객체(Object) : 세상에 존재하는 모든 것

프로그래밍에서의 객체: 데이터의 분산을 막기 위해 데이터와 기능을 하나로 묶은 그룹
ex) 컴퓨터(PC) = 데이터(본체, 모니터, 키보드, 마우스 ... 등) + 기능(화면, 소리, 입력, 출력 ... 등)

객체지향언어(OOP, Object Oriented Programming)

컴퓨터 프로그래밍의 한가지 기법으로 객체를 만들고 객체를 사용하는 프로그래밍 기법

객체지향언어 특징

객체지향언어의 특징은 크게 캡슐화, 상속, 다형성, 추상화 4가지로 나눌 수 있다.

1. 캡슐화
: 하나의 객체에 대해 그 객체가 특정한 목적을 위해 필요한 변수나 메소드를 하나로 묶는 것
2. 상속
: 상위 클래스의 모든 것을 하위 클래스가 모두 이어 받는 것
즉, 부모가 자식에게 유전자를 물려주듯이 부모의 특징을 자식에게 물려줌
3. 다형성
: 상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해줌
형태가 같은데 다른 기능을 함

오버로딩(Overloading): 메서드의 이름은 같고 매개변수의 갯수나 타입이 다른 함수를 정의하는 것
오버라이딩(Overriding): 상속받은 하위 클래스가 메서드의 내용만 변경(재정의)하는 것

4. 추상화
: 객체의 공통적인 속성과 기능을 추출하여 정의하는 것
실제로 존재하는 객체들을 프로그램으로 만들기 위한 공통적인 특성을 파악해서 필요 없는 특성을 제거하는 과정

객체지향언어 장점

1. 재사용성
: 상속을 통해 프로그래밍 시 코드의 재사용을 높일 수 있음
2. 생산성 향상
: 잘 설계된 클래스를 만들어서 독립적인 객체를 사용함으로써, 개발의 생산성을 향상할 수 있음.
3. 자연적인 모델링
: 생각하고 있는 것을 그대로 자연스럽게 구현 가능
4. 유지보수의 우수성
: 프로그램 수정 시 추가, 수정을 하더라도 캡슐화를 통해 주변 영향이 적기에 쉬운 유지보수 가능

객체지향언어 단점

1. 개발 속도 느림
: 모든 객체의 역할과 기능을 이해해야 하기 때문에 프로그래밍에 많은 시간이 소요
2. 실행 속도 느림
: 객체지향언어의 처리 속도는 절차지향언어보다 느림
3. 코딩 난이도 상승
: 객체지향언어는 대체로 난이도가 높음(특히 C++)

  • 다중 상속의 경우, 상속을 통해 중복을 없앨 수 있지만, 상위 클래스와 하위 클래스간의 관례를 인지하고 있어야 함

객체지향언어

: JAVA, Objective-C, Swift, C++, Python, etc.

📌 절차지향언어(PP, Procedural Programming)

절차지향언어(PP, Procedural Programming)

개체를 순차적인 처리하여 프로그램 전체가 유기적으로 연결

절차지향언어 단점

  • 빠른 실행 속도: 초기 프로그래밍 언어로, 컴퓨터 처리구조와 비슷해 실행속도가 빠름

절차지향언어 단점

1. 유지보수 어려움
: 모든 구성요소가 유기적으로 연결되어 있어, 하나가 고장날 경우 시스템 전체가 고장. 유지 보수가 매우 까다로움.
2. 엄격하게 순서가 정해져 있어 비효율적
: 실행순서가 정해져 있기 때문에 코드의 순서가 바뀌면 결과가 달라짐.
즉, 언어의 융통성 부족하여 생산 효율 떨어짐
3. 과도한 전역변수 사용
: 모든 함수에 개방되어 있어 값을 잘못 설정하게 될 수 있음
4. 프로그램 이해가 어려워짐
: 함수가 많아지면 어떻게 상호 작용하는지 이해하기 어려워짐

절차지향언어

  • FORTRAN, COBOL, PASCAL, C, BASIC

3. 자동 메모리 관리 (Garbage Collection)

  • 자바로 작성된 프로그램 실행 시, Garbage Collection이 자동적으로 메모리를 관리해주기 때문에 프로그래머는 메모리를 따로 관리하지 않아도 됨.
  • 프로그래머가 보다 프로그래밍에 집중할 수 있도록 도움

4. 네트워크와 분산처리 지원

  • 풍부하고 다양한 네트워크 프로그래밍 라이브러리(Java API)를 통해 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발할 수 있도록 지원

5. 멀티쓰레드 지원

  • multi-thread의 지원은 사용되는 운영체제에 다라 구현 방법도 상이하며, 처리방식도 다름
  • Java에서 개발되는 multi-thread program은 시스템과 관계없이 구현가능, 관련된 라이브러리(Java API) 제공되어 구현이 쉬움
  • 여러 thread에 대한 스케쥴링(scheduling)을 자바 인터프리터가 담당

6. 동적 로딩 지원

  • 실행 시 모든 클래스가 로딩되지 않고, 필요한 시점에 클래스를 로딩하여 사용 가능
  • 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않아도 되며, 애플리케이션의 변경사항이 발생해도 비교적 적은 작업만으로도 처리할 수 있는 유연한 애플리케이션을 작성 가능

개발환경

IDE 설치하기

통합개발환경 Intergrated Development Environment의 약자

자바 프로그래밍을 도와주는 IDE 중 가장 많이 추천되는 툴

  • Intellij(인텔리제이) ✨✨
  • eclipse(이클립스)

JDK(Java Develoment Kit) 설치하기

★ 본인의 JDK 설치 디렉토리를 기억해 놓자.

  • 자바로 프로그래밍 하기 위해 필요한 도구 (자바 프로그램을 만들기 위해서는 누구나 이것을 설치해야 함)
  • JDK를 설치했다면 JDK가 설치된 디렉토리의 bin이라는 하위 디렉토리에 javac.exejava.exe 파일이 저장되어 있을 것이다.
    ※ 혹시라도 java.exe 만 있고 javac.exe 가 없다면 JDK가 아닌 JRE를 설치한 것이므로 JDK를 다시 설치하자

JDK의 bin 디렉토리에 있는 주요 실행파일

javac.exe: 자바 컴파일러, 자바 소스코드를 byte code로 컴파일
java.exe: 자바 인터프리터, 컴파일러가 생성한 byte code를 해석하고 실행
javap.exe: 역어셈블러, 컴파일된 클래스파일을 원래의 소스로 변환
- ‘-c’ 옵션을 이용해 바이트코드로 컴파일 된 내용도 볼 수 있음
javadoc.exe: 자동문서생성기, 소스파일에 있는 주석을 이용하여 Java API 문서와 같은 형식의 문서를 자동으로 생성
jar.exe: 압축프로그램, 클래스 파일과 프로그램의 실행에 관련된 파일을 하나의 jar 파일(.jar)로 압축하거나 압축해제
- 압축 : jar cvf Hello.jar Hello1.class Hello2.class
- 압축해제: jar xvf Hello.jar

  • JRE (Java Runtime Environment)
    • JDK보다는 작은 개념으로, 자바가 실행될 수 있는 최소한의 파일들이 설치되어있는 환경
    • JRE에는 javac.exe와 같은 자바소스를 컴파일하기 위한 도구는 설치되지 않음
    • JVM과 Java API 외에 자바를 개발하는데 필요한 프로그램들이 설치

JDK - 자바 개발 도구 (Java Developement Kit)
JRE - 자바 실행 환경 (Java Runtime Environment), 자바로 작성된 응용프로그램이 실행되기 위한 최소환경
JDK = JRE + 개발에 필요한 실행파일 (javac.exe 등)
JRE = JVM + 클래스 라이브러리(Java API)

Java API 문서 설치

: 자바에서 제공하는 클래스 라이브러리(Java API)를 잘 사용하기 위해서는 Java API 문서가 필수적이지만 다 외울 필요 없이 필요한 거 있으면 그때마다 보면 된다.
Java 8 API Java Platform SE 8

Java 11 API Overview (Java SE 11 & JDK 11 )

📚 Ref.

profile
Backend Developer

0개의 댓글