JAVA란?
자바의 특징
- C / C++ 모태로 만들어진 언어로 유사하지만 더 단순함
- 플랫폼에 독립적 => JAVA 플랫폼 설치되어 있으면 모든 운영체제에서 사용 가능
- 완전한 객체지향 언어 => 추상화, 캡슐화, 다형성, 상속성
- 변수의 자료형 검사 엄격 => 자료형 불일치로 발생하는 오류 줄일 수 있음
- 예외 처리 제공
- 자동 메모리 관리
- 멀티 쓰레드 제공(스레드 : 프로그램 내부에서 진행될 수 있는 세부 작업흐름)
- 웹 or 네트워크 프로그래밍에 관한 풍부한 라이브러리를 제공
C/C++ 에서 바뀐 것
객체 생성과 제거 ==========================> delete 키워드 제거
참조변수와 포인터 변수 ======================> 객체 포인터 제거
이차 이상의 포인터 문제 ======================> 모든 포인터 제거
데이터 구조를 정의하는 두 가지 방법 ==============> struct 키워드 제거
함수지향? 객체지향? ========================> 함수는 메소드로만 사용하도록 제약
컬렉션의 부재 =============================> 언어에 컬렉션을 포함
글로벌한 문자 데이터처리의 복잡성 ===============> 다양한 인코딩 문자열 기능 개선
자바 프로그램의 실행
자바소스파일(.java) ==> Compiler ==> 클래스파일(.class) ==> JVM(Java Virtual Machin) ==> 실행
- 컴파일 : 2진수로 변환시켜 컴퓨터언어로 변환하는 것으로 자바소스파일을 컴파일하면 바이트코드로 변환된다.
- 바이트코드 : java파일을 컴파일 한 결과물로 클래스파일(.class)이라고도 한다. 클래스파일은 자바 플랫폼의 JVM(Java Virtual Machin)에서 실행 가능한 코드다. 클래스 파일을 한 번 작성하면 어디에서나 실행 할 수 있다.
애플리케이션과 애플릿
- 애플리케이션 : JAVA 플랫폼에서 실행되는 프로그램으로 실행하기 위해서는 main() 함수가 필요하다.
- 애플릿 : HTML 웹페이지에 APPLET 태그로 포함되어 웹 브라우저를 통해 실행된다. 요즘은 익스플로우 브라우저에서만 지원 한다.
자바 플랫폼
플랫폼(platform)
프로그램의 실행을 위한 하드웨어와 소프트웨어 환경
JAVA 플랫폼
JAVA 프로그램의 개발과 실행을 위한 환경(소프트웨어환경)으로 운영체제에 맞는 JAVA 플랫폼을 설치해야 한다.
JAVA 플랫폼이 설치 된 곳이면 어디에서나 자바를 실행 할 수 있다.
버전과 함께 표기한다.
- JAVA VM(Virtual Machin) : JAVA 프로그램의 실행 환경을 제공하는 가상 기계로 구동 엔진이다. 실행에 필요한 사항을 관리하고 가비지 컬렉션(garbage collection)이라고 불리는 메모리 정리 작업을 자동으로 수행한다.
- JAVA API : 프로그램의 개발에 필요한 클래스 라이브러리로 패키지(클래스 묶음)들이 계층 구조로 분류되어 있다. JAVA 플랫폼에 기본으로 포함 된 기본(핵심) API와 별도의 설치 후 사용해야 하는 확장 API로 구분된다.
- JDK(Java Software Development Kit) : JAVA 컴파일러, JAVA VM, JAVA 기본 API를 묶은 것이다. 1.8버전이 마지막 무료 버전이기 때문에 제일 많이 사용한다.
자바 번역기 특징
자바코드 ==변역기==> 바이트코드 ==번역기==> 어셈블코드 ==번역기==> 기계(이진)코드
1단계(형태소분석)=>2단계(구문분석)=>3단계(의미분석)=>4단계(중간코드) =>5단계(최적화) =>6단계(물리코드)
========컴파일러 사용=================================>========인터프리터 사용====>
컴파일러 : 프로그래머 사용 번역기 / 인터프리터 : 사용자 사용 번역기
JAVA 프로그램 개발 환경 구축
JDK와 JRE 차이
- JDK(Java Development kit) : 자바 개발 버전으로 문법에 맞게 코딩하고 컴파일 후 실행까지 가능한 버전
- JRE(Java Runtime Environment) : 이미 개발이 완료 된 자바 프로그램을 테스트용으로 실행만 시키는 버전
OracleJDK와 OpenJDK
- OracleJDK : 유료버전 JDK
- OpenJDK : 무료버전 JDK
Oracle JDK와 Open JDK의 차이점 비교
Oracle JDK와 Open JDK를 비교하고자 합니다. JDK (Java Development Kit)는 Java 플랫폼 프로그래밍에 사용되는 소프트웨어 개발 환경입니다. 여기에는 개별 런타임이라고하는 완전한 Java Runtime Environment가 포
broccolies.com
JDK 설치
1. 자기 운영체제 정보 확인 : 내PC - 속성 - 시스템종류 확인 : Windows x86
2. 오라클 홈페이지 접속 : https://www.oracle.com/java/technologies/downloads
3. 운영체제 종류에 맞춰서 설치 : 'Java SE Development kit 15' (SE : Standard Edition으로 개인용, EE가 회사용)
4. 환경변수 path 설정 : 내PC - 속성 - 고급 시스템 설정 - 환경변수 - 시스템변수에 새로만들기 - Java설치 경로 추가
5. 환경변수 JAVA_HOME에 경로 대입
6. CMD 창에서 설치버전 확인 : java -version
Eclipse 설치
1. https://www.eclipse.org/downloads/packages
2. Eclipse IDE for Enterprise java and Web Developers 설치 => Java+Web 환경개발
3. 작업환경 설정 : workspace 지정, 글꼴 설정(windows-preprience-Appearance-Colors and Fonts - baxic - Text Font)
JAVA 프로그래밍
메모장으로 JAVA 프로그래밍하기
1. 메모장에 클래스명.java 파일 작성하기
2. cmd 창 : javac 클래스명.java (javac 명령으로 컴파일하기)
3. 클래스명.class(바이트코드) 생성 됐는지 확인하기
4. cmd 창 : java 클래스명
Java 프로그램 살펴보기
/**
* The Hello class implements an application that
* simply prints "Hello, Java Application!" to standard output.
*/
public class Hello {
public static void main(String args[]){ // main method
/* Display the string */
System.out.println("Hello, Java Application!");
}
}
주석(comments)
소스코드의 이해를 돕기 위해 작성하는 설명문으로 컴파일과 실행에 영향을 주지 않는다.
- /* ... */ : 여러 줄에 걸쳐 작성하는 주석으로 '/*' 와 '*/' 사이의 내용을 무시한다. C언어 주석과 같다.
- /** ... */ : 일반적으로 맨 앞 소스 코드에 대한 전반적인 설명을 적기 위한 주석이다. 컴파일러가 주석 사이의 내용은 무시하지만 'javadoc'이라는 유틸리티를 사용하면 이 주석 안에 있는 문장을 자동으로 추출하여 해당 소스 코드의 매뉴얼을 생성시킬 수 있다. 'javadoc을 이용한 API문서 만들기'로 검색하면 사용법을 알 수 있다.
- //... : 한 줄 주석으로 컴파일러가 //를 만나면 그 라인의 주석 이후 내용을 무시한다.
클래스(class)
작성법 : class 클래스이름 {...}
클래스 명명규칙 : 첫글자는 대문자 이후 소문자. 단어 변경시 첫글자는 대문자 사용. 영문자, 숫자, 기호를 조합해 사용
모든 자바 프로그램은 클래스 정의를 하나 이상 가지고 있어야 한다.
JAVA 소스 코드를 컴파일하면 클래스파일(바이트코드)이 생성된다. 이 때 소스 코드 안에 정의되어 있는 클래스 이름에 따라 클래스파일 이름이 만들어 지고, 여러개의 클래스가 정의되어 있는 소스코드를 컴파일하면 각 클래스 갯수만큼 클래스파일이 만들어진다.
JAVA 언어에서 메소드는 클래스 안에서만 정의 할 수 있다.
main() 메소드
사용법 : public static void main(String args[]){문장; 문장;}
main() 메소드는 JAVA프로그램을 실행 시킬 때 제일 먼저 실행되는 메소드를 의미한다.
main() 메소드 안에는 문법에 맞게 내용을 기술하면 되는데 자바의 모든 문장 끝에 세미클론(;)을 붙여줘야 한다.
System.out
표준출력을 담당하는 객체로 print(), println() 메소드를 수행한다.
반대로 표준입력을 담당하는 객체는 System.in
객체지향 프로그래밍
C언어와 JAVA 차이
- C언어 : 객체지향을 적용하지 않은 언어로 프로그램에서 다루어야 하는 대상은 데이터다. 데이터를 처리하는 기능을 함수로 정의하여 프로그램을 구성한다. (ex 도서검색프로그램 : 저자, 제목, 출판사, 가격 등 데이터를 정의하고, 데이터를 처리하는 함수를 따로 정의하여 프로그램을 작성 한 후 상황에 맞게 함수를 호출하여 기능을 수행한다.)
- JAVA : 객체지향 언어로 프로그래밍의 대상을 상태와 동작을 갖고 있는 객체라고 가정한다. 데이터와 함수를 분리하지 않고 클래스(class)로 통합하여 대상을 표현한다. 클래스를 통해 객체가 만들어지고 객체는 데이터를 의미하는 상태와 함수를 의미한 동작을 함께 프로그램이 갖게 된다.(ex 도서검색프로그램 : 도서 클래스에 데이터와 함수를 함께 담아 정의하고, 사용하고 싶을 땐 정의 된 클래스의 객체를 생성하여 사용한다.)
- JAVA 프로그래밍 : 프로그램 구성의 기본 단위는 클래스. 데이터(필드)와 알고리즘(메소드)이 클래스에 캡슐화되어 있다. 클래스 정의로부터 객체들이 만들어지고 객체들간의 상호작용으로 프로그램이 동작한다.
객체와 클래스
- 객체(object) : 세상에 존재하는 모든 대상으로 상태와 동작을 가진다. 독립적으로 존재하는 개별 대상 하나하나를 표현 한 것으로 클래스의 실체를 의미한다. 객체는 특정 클래스의 인스턴스이다. (ex 트럭객체 : 자동차 클래스를 가지고 실제로 다루어야 하는 대상인 특정 트럭을 객체로 생성하여 사용한다. 트럭객체는 자동차 클래스의 인스턴스이다.)
- 클래스(class) : 공통적인 특징이 있는 비슷한 대상을 묶고 정형화하고, 추상화시킨 개념을 만한다. 클래스는 대상들의 공통 상태값을 지정하는 변수인 필드(field)와 필드에 저장 된 상태값을 조회하고 변경하거나 특별한 동작을 수행하게 하는 메소드(method)로 구성된다. 객체를 만들기 위한 모형(틀)이다. (ex 자동차클래스 : 자동차에 관련 된 데이터(공통 상태값 지정하는 변수), 함수(공통 된 동작)를 정형화시키고 추상화 시켜 정의 한 것이다. 자동차클래스는 객체들을 만들어내는 모형이다.)
- 추상화 : 대상을 이해하는데 필수적이고 본질적인 요소들을 모아 그 사물을 대표하도록 표현하는 것이다. 사물의 구체적인 모든 사실이 아닌 추상적이고도 전형적인 사실만으로 사물을 표현하고 설명하는 모든 방식을 말한다. JAVA에서는 추상화 도구로 클래스를 사용한다.
상속(inheritance)
클래스와 클래스 간의 관계를 나타내는 용어
기존에 만들어진 클래스를 재사용하여 서브클래스를 쉽게 정의하고, 슈퍼클래스를 통해 서브클래스를 쉽게 이해 할 수 있다.
클래스A로부터 구성요소인 필드와 메소드를 물려 받아 클래스B를 정의 했을 경우(클래스A ==> 클래스B)
- 클래스B는 클래스A를 상속한다.
- 클래스B는 클래스A로부터 상속받는다.
- 클래스B : 클래스A의 서브(sub)클래스, 자식클래스, 파생(derived)클래스, 하위클래스
- 클래스A : 클래스B의 슈퍼(super)클래스, 부모클래스, 기반(base)클래스, 상위클래스
- 슈퍼클래스인 클래스A는 여러 서브클래스를 가질 수 있고, 여러 서브클래스들의 공통적인 특성 및 기능을 추상화하여 일반화시킨 것이다.
다형성
같은 코드라 하더라도 상황에 따라 다른 방식으로 동작하는 성질
대표적으로 오버라이딩과 오버로딩이 있다.
다형성으로 인하여 인터페이스를 구현한 객체를 실행 시점에서 유연하게 변경 할 수 있고, 클라이언트를 변경하지 않고 서버의 구현 기능을 유연하게 변경 할 수 있다.
- 오버라이딩(overriding) : 메소드 덮어쓰기(메소드 재정의). 입출력이 동일한 형태의 메소드를 재구현 및 확장해서 사용하는 것으로 오버라이딩 된 메소드가 기존의 메소드보다 더 높은 우선순위를 갖는다. 인터페이스는 구현시 오버라이딩이 강제된다.
- 오버로딩(overloading) : 같은 이름 사용하기. 입력항목의 자료형이나, 갯수가 다를 경우 동일한 이름을 가진 메소드를 생성 할 수 있다.(반환형태는 관계 없음) 하나의 클래스에 여러개의 입력항목이 다른 생성자를 오버로딩해서 만들 수 있다. 코드의 중복을 줄이고 가독성을 높일 수 있다.
'프로그래밍언어 > JAVA' 카테고리의 다른 글
[JAVA] 구조적인 프로그래밍 (0) | 2021.11.24 |
---|---|
[JAVA] 자바의 입출력 (0) | 2021.11.21 |
[JAVA] 자바의 연산자와 제어문 (0) | 2021.11.21 |
[JAVA] 자바 변수와 자료형 (0) | 2021.11.20 |
[JAVA] 자바 프로그램 기본 사항 (0) | 2021.11.20 |