먼저 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는 함수단위 라이브러리)
- 패키지(클래스 묶음)들이 계층 구조로 분류되어 있음
- 자주 사용되는 기능을 추상화하고 캡슐화하여 코드를 간결하게 작성하도록 도와준다.