-
[JAVA] 개발자 지망생 스터디 - 29일차(2)스터디/KAKAOCLOUDSCHOOL 2022. 12. 12. 17:13
JAVA
1. JAVA
> Sun Micro Systems 에서 만든 프로그래밍 언어
> 여러 플랫폼에서 실행되는 프로그램을 한 번만 작성하기 위해서 플랫폼 독립적인 언어를 개발하기 위해서 탄생
#C++과 가장 큰 차이점
<C++>
플랫폼 종속적 - 운영체제 별로 소스 코드를 다르게 작성해야 함
컴파일러가 운영체제에서 실행되는 코드를 생성(운영체제가 달라지면 다르게 작성)
<JAVA>
플랫폼 독립적 - 여러 운영체제에서 실행되는 프로그램을 한 번만 작성
컴파일러가 JRE(JVM)가 이해할 수 있는 코드를 생성 - 운영체제 별로 별도의 JRE를 설치해서 JE가 해석해서 운영체제에서 실행되는 프로그램을 생성해서 실행1) Java를 사용하는 이유
☑︎ 오픈 소스 프로젝트가 많이 구현되어 있음 - 뛰어난 Echo System
> 자바 개발에 편리한 라이브러리 - apache common
> 서버 개발에 편리한 프레임워크 - spring, struts
> 검색 엔진 개발 - Lucene
> NoSQL - Cassandra
> 분산 파일 시스템 - Haddop
☑︎ 플랫폼으로서의 역활 : JVM 기반의 언어가 많음
> Jython, Scala, Kotlin, Closure, Jruby, Groovy 등
> 소스코드를 작성하고 난 후 컴파일 하면 JRE가 이해할 수 있는 코드로 번역2) Java 개발 플랫폼
#J2SE (Standard Edition)
> PC용 애플리케이션 개발을 위한 플랫폼
> J2SE만으로만으로는 웹 프로그래밍을 할 수 없음
> J2EE에서 웹에 관련된 API를 가져오면 웹 프로그래밍이 가능해짐
(보통은 WAS Application 이나 Spring 같은 프레임워크가 제공)
#J2ME (Micro Edition)
> Embedded 관련 애플리케이션 개발을 위한 플랫폼으로 J2SE에서 많은 기능을 제거 (용량을 줄이기 위해)
#J2EE (Enterprise Edition)
> 가장 많은 기능을 가진 유료 버전이었는데 지금은 Eclipse 재단으로 소유권이 이전되면서 Open Source 가 됨3) Java 환경
#JDK(Java Devlopment Kit) :자바 개발 도구
> Java API : Java로 프로그램을 만들 수 있도록 제공되는 클래스의 집합
> JVM(Java Virtual Machine) : Java Program을 실행할 수 있도록 추상화 한 영역, Java Program이 실행될 때 메모리 영역 (Register, Stack, Heap, Method 영역 등)을 구분해서 확보
> 개발에 관련된 프로그램 : " bin " 디렉토리
#JRE(Java Runtime Environment) : 자바 실행 환경, 자바로 만든 프로그램을 실행하기 위한 플랫폼
> JVM : JVM이 라이센스가 있음 (Oracle 의 Hot Spot과 Open Source 버전이 OpenJDK)
> glue : 플랫폼 고유의 라이브러리와 JNI
> byte code : JDK를 이용해서 개발한 후 Compile을 하게 되면 생성되는 JRE가 이해가능한 코드,
Kotlin 도 동일한 byte code를 생성4) JVM 구성
> Navtive Method 영역 : 운영체제에게 전달할 메서드를 소유한영역
> Register 영역 : CPU에게 전달할 코드 영역
> Stack: 메서드를 호출했을 때 메서드에게 할당 되는 영역
> Heap : 객체가 사용하는 메모리 영역 (Young Generation, Old Generation - Garbage Collection의 대상이 되지만 실제 Garbage Collector는 이 영역을 Young 영역보다 적게 참조, Permanent - 클래스 정보)
> Method 영역 : 클래스에 메서드가 사용하는 영역 (Static 한 영역이라고도 하고 Class 영역이라고도 함)2. 개발 환경
1) JDK
> SE버전을 설치
> 버전 번호는 현재는 8, 11, 17 버전을 많이 사용
Java 8 : 람다와 스트림이 적용, 전자 정부 프레임워크가 이 버전 기반
Java 11 : Spring이 사용하는 버전 , 최신 Eclipse 도 이 버전부터 사용 가능
Java 17 : 최신 버전
> 오라클에서 JDK 11버전을 다운 받아서 설치
Windows 에서는 JDK의 bin 디렉토리를 path에 추가
> 확인은 터미널에서 수행 - path 설정을 한 경우는 터미널을 다시 열어야 함
java -version : JRE 버전을 확인하는 명령어로 path 설정을 하지 않아도 가능
javac -version : JDK 버전을 확인하는 명령어로 path 설정이 안되면 없는 명령어라고 나옴2) IDE
#Eclips : Opne Source
> 플로그인 형태로 별도의 라이브러리를 가진 형태로 제공되기도 함 - 전자 정부 프레임워크, Spring Tool Suite, 애니 프레임워크
#intelli J : 상업용 버전이 별도로 존재 - 웹프로그래밍은 상업용 버전에서만 가능3. 작성 및 실행
1) 과정
> source code 작성 (파일의 확장자는 java)
PC에서 실행되는 Application을 만들 때는 static void main 메서드(entry point)를 가진 클래스가 있어야 함
> compile 수행 (javac 명령)
JVM이 인식할 수 있는 코드를 만들어주는 과정
문법 검사를 수행
compile이 실패하면 문법적인 오류
> build(javaw 명령)
운영체제나 하드웨어가 인식할 수 있는 코드를 만들어주는 과정
실패하면 구조적인 문제
> run(java 명령)
메모리 할당을 한 후 실행
오류가 발생하면 메모리 오류나 예외가 발생2) IDE 사용
> 모든 과정을 한 번에 수행
> 코드를 작성하고 저장을 하는 순간마다 compile을 수행해서 문법적인 오류가 발생하면 특별한 표시를 해줌3) Eclipse 에서 애플리케이션 생성 및 실행
> workspace : 동일한 환경 설정을 사용하는 단위
> PC용 Application 생성 : [File] - [New] - Other - Java - Java Project
> 소스 코드 작성 : Java는 완전한 객체 지향 언어라서 모든 코드가 클래스 안에 들어가야 하고 클래스 이름과 파일 이름이 일치
#구조
package 자신이 속한 패키지 이름 - 생략되거나 한 번만 나와야 함
import 이름을 줄여쓸 패키지 나 클래스 이름 - 0번 이상 무제한
class 클래스 이름 { 코드 }
#실행
[Run] - [Run]4) 작성 시 유의 사항
> 대소문자 구별
> 한 번에 실행되어야 하는 문장의 끝은 ;
블럭을 만드는 명령(클래스, 메서드, 제어블럭, try ~ catch등) 에는 ;을 마지막에 하지 않아도 됨
> 행의 개념이 없으므로 한 줄에 여러개의 명령어를 사용해도 됨
> 블럭(영역)의 생성은 { }4. 명명 규칙
> 데이터와 메서드 그리고 클래스에 붙이는 이름(Identifier)을 만드는 규칙
> 예약어는 이름으로 만들 수 없음
> 동일한 영역에 이름을 중복해서 만들 수는 없음
package > class > 변수 와 메서드의 원형 > 메서드 안에 변수 와 블럭더보기void method()
void method(int) // 가능
void method1 (int x)
void method1 (int y) // 불가능5. 구성 요소
> Keyword : java가 정해준 기능
> 데이터 : variable(데이터에 이름을 붙이고 데이터를 변경할 수 있도록 해놓은 것) 과 constant(데이터에 이름을 붙였는데 데이터를 변경하지 못하도록 해놓은 것) 그리고 literal (사용자가 직접 입력하는 데이터)
variable : 소문자로 시작
constant : 모두 대문자로 함
> Operator
> Control Statement
> Array : 동일한 모양을 갖는 데이터의 연속적인 모임
> Class 와 Instance, Interface : 데이터와 Method(기능)을 같이 소유하고 있는 것
> Annotation : @로 시작하는 명령어로 자주 사용하거나 복잡한 구문을 하나의 이름으로 대신 사용할 수 있도록 만든 것
java에서는 class로 취급
> Comment : 주석'스터디 > KAKAOCLOUDSCHOOL' 카테고리의 다른 글
[JAVA] 개발자 지망생 스터디 - 31일차 (0) 2022.12.14 [JAVA] 개발자 지망생 스터디 - 30일차 (0) 2022.12.13 [React] - 개발자 지망생 스터디 - 29일차(1) (0) 2022.12.12 [React] 개발자 지망생 스터디 -28일차 (0) 2022.12.11 [React] 개발자 지망생 스터디 - 27일차 (0) 2022.12.08