https://www.tiobe.com/tiobe-index/
✔️ 운영체제에 독립적으로 실행 가능
✔️ 객체지향 프로그래밍(Object Oriented Programming, OOP) 언어
✔️ 함수형 프로그래밍 지원
✔️ 자동 메모리 관리(Garbage Collection)
✔️ 네트워크와 분산처리 지원
✔️ 동적 로딩 지원
Write Once, Run Anywhere
('한번 작성하면, 어디서나 실행된다')
JVM(Java Virtual Machine)
- 자바를 실행하기 위한 가상 컴퓨터
- 자바로 작성된 애플리케이션은 모두 JVM에서만 실행되기 때문에, 자바 애플리케이션이 실행되기 위해서는 반드시 JVM이 필요
- 일반 애플리케이션의 코드는 OS만 거치고 하드웨어로 전달되는데 비해 Java 애플리케이션은 JVM을 한 번 더 거치기 때문에, 그리고 하드웨어에 맞게 완전히 컴파일된 상태가 아니고 실행 시에 해석(interpret)되기 때문에 속도가 느리다. (최근에는 JVM의 기능 향상되면서 속도의 격차를 많이 줄였다)
- 일반 애플리케이션은 OS와 바로 맞붙어 있기 때문에 다른 OS에서 실행시키기 위해서는 애플리케이션을 그 OS에 맞게 변경해야 하지만, Java 애플리케이션은 JVM하고만 상호작용을 하기 때문에 OS와 하드웨어에 독립적이라 다른 OS에서도 프로그램의 변경없이 실행이 가능하다.
독립적
종속적
객체(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)
개체를 순차적인 처리하여 프로그램 전체가 유기적으로 연결
1. 유지보수 어려움
: 모든 구성요소가 유기적으로 연결되어 있어, 하나가 고장날 경우 시스템 전체가 고장. 유지 보수가 매우 까다로움.
2. 엄격하게 순서가 정해져 있어 비효율적
: 실행순서가 정해져 있기 때문에 코드의 순서가 바뀌면 결과가 달라짐.
즉, 언어의 융통성 부족하여 생산 효율 떨어짐
3. 과도한 전역변수 사용
: 모든 함수에 개방되어 있어 값을 잘못 설정하게 될 수 있음
4. 프로그램 이해가 어려워짐
: 함수가 많아지면 어떻게 상호 작용하는지 이해하기 어려워짐
통합개발환경
Intergrated Development Environment의 약자
자바 프로그래밍을 도와주는 IDE 중 가장 많이 추천되는 툴
Intellij(인텔리제이)
✨✨ eclipse(이클립스)
★ 본인의 JDK 설치 디렉토리를 기억해 놓자.
javac.exe
와 java.exe
파일이 저장되어 있을 것이다.
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
JDK
- 자바 개발 도구 (Java Developement Kit)
JRE
- 자바 실행 환경 (Java Runtime Environment), 자바로 작성된 응용프로그램이 실행되기 위한 최소환경
JDK
= JRE + 개발에 필요한 실행파일 (javac.exe 등)
JRE
= JVM + 클래스 라이브러리(Java API)
: 자바에서 제공하는 클래스 라이브러리(Java API)를 잘 사용하기 위해서는 Java API 문서가 필수적이지만 다 외울 필요 없이 필요한 거 있으면 그때마다 보면 된다.
Java 8 API
Java Platform SE 8
Java 11 API
Overview (Java SE 11 & JDK 11 )