대학교 수업/Java

1.1 명품 자바 프로그래밍 1단원 (1)

kicdor 2024. 9. 27. 16:28
반응형

0. 키워드
(1) 하드웨어, 소프트웨어 프로그램, 4차 산업
(2) 기계어, 어셈블리어, 고급 언어, 객체 지향 언어
(3) 컴파일, .java, .class, 자바, 자바스크립트, JSP, 서블릿
(4) 선마이크로시스템스, 제임스 고슬링, 가전제품
(5) 자바, 오라클, WORA, 플랫폼 종속성
(6) 자바 가상 기계, 바이트 코드, 컴파일, 링크
(7) JDK, JRE, openJDK
(8) Java9, 모듈화, jmods 디렉터리, 자바API
(9) 통합 개발 환경, 이클립스, javac, workspace, 프로젝트
(10) 클래스


 
1.1 컴퓨터와 프로그래밍
1) 컴퓨터와 소프트웨어
(1) 하드웨어 (hardware)
: 컴퓨터 본체. 물리적으로 만질 수 있는 부분.
 
(2) 소프트웨어 (software) ( = 프로그램 (program) )
: 하드웨어를 작동시켜 특정 기능을 하게 하는 것.
과거에는 CD 등을 이용했지만 최근은 다운로드 됨. 
 
+) 앱 (APP) 
: 태블릿, 아이패드, 스마트폰에 작동하는 소프트웨어.
 
(3) 4차 산업
: 빅데이터, 인공지능, 무인 자동차, 로봇 등
(+ IoT, 클라우드 컴퓨팅, 생성형 AI 등) (지능정보기술의 융합)
 
 
2) 프로그래밍 언어
(1) 프로그래밍 언어
: 컴퓨터가 실행할 프로그램을 작성하는 언어
 
(2) 기계어 (machine language)
: 이진수 명령어로 구성된 언어. (컴퓨터의 CPU는 이진수만 이해함)
 
+) 이진수 (binary code)
: 0과 1로 구성
 
(3) 어셈블리어 (assembly language)
- 사람 기계어 작성 어려움  >> 어셈블리어 사용. 
- 기계어의 명령을 니모닉 기호일대일 대응시킴
- 이것도 사람이 다루기 어렵긴 함. 표현의 한계도 있음.
 
+) 니모닉 기호 (mnemonic symbol)
: ADD, SUB, MOVE 등 표현하기 쉬운 상징적인 기호.
 
(4) 고급 언어
- 사람이 이해하기 쉬움. 
- 복잡한 알고리즘, 프로그램, 자료를 효율적으로 표현할 수 있음.
 
(5) 객체 지향 언어
:규모가 큰 프로그램을 만들 때 사용. 
(고급언어 >> 절차 지향 언어 (C언어) >> 객체 지향 언어 1 (C++, C#) >> 객체 지향 언어 2 (Java, Python 등) )
 
(6) 절차지향언어
: 순서대로 프로그램이 실행됨. 
(순서대로 하다보니까) 프로그램이 방대해 질 수록 어려움. 무거워짐. 
 
 
3) 프로그램 컴파일과 실행
(1) 소스 프로그램 파일 ( = 프로그램 소스파일)
: 프로그래밍 언어로 작성된 텍스트 파일.
( 프로그래밍의 시작 = 컴퓨터 언어로 소스파일 작성하는 것 )
 
(2) 컴파일 (compile)
: 고급언어 코드 (소스 파일)를 기계어 코드로 변환.
(사람이 고급언어로 코드 작성 >> 컴퓨터가 해석 못함 >> 컴퓨터가 해석할 수 있도록 기계어 코드로 변환)
 
(3) 컴파일러 (compiler)
: 컴파일을 전담하는 소프트웨어.  (각 언어 전용 컴파일러 존재)
 
+) 자바 
- 소스 프로그램 확장자 : .java
- 자바 컴파일 후 : .class 
- .class 파일 : 자바 가상 기계에 의해 실행됨. 
 
(4) 자바 (java)
- 응용 소프트웨어 개발에 사용.
- 범용 언어
 
(5) 자바스크립트 (javascript)
- 컴파일 안 함. (웹 브라우저에 의해 번역, 실행됨)
- HTML 페이지 안에 소스 형태로 존재. (HTML 페이지의 동적인 변화를 보조하는 역할)
- 스크립트 언어
 
(6) JSP (Java Server Page)
- 웹 서버에서 실행됨.
- 컴파일 됨 >> "서블릿 (Servlet) (= 자바 코드)" 으로 변환됨 >> 실행
- 스크립트 언어


1.2 자바의 출현과 WORA
1) 자바의 태동
(1) 개발자
: 제임스 고슬링 (James Gosling)
 
(2) 기업
: 선마이크로시스템스 (SUN Microsystems)   ( 그린 프로젝트 (Green Project) )
 
(3) 개발 과정
: 가정제품 사용을 위한 소프트웨어 개발 필요 (내장형 시스템 (embedded system)의 메모리 요구사항 충족 해야함)
>> 새로운 언어, 실행 체계 개발 ( = 오크 (oak) )  (플랫폼 독립적 (platform independent), 호환성, 메모리 사용랑 적음)
>> 오크 (oak)를 인터넷 환경에 적한하게 개선 ( = 자바 (java) )
>> 넷스케이프에 자바 기술 적용 >> 유명해짐 >> 오라클 사에서 인수
 
+) 넷스케이프 (Netscape)
: 당시 가장 많이 사용되던 브라우저. 
 
 
2) WORA (Write Once Run Anywhere)
(1) 플랫폼 종속성 (platform dependence)
: 자바 이전의 프로그래밍 언어 (C, C++)
>> 기계어 코드로 변환 시, 대상 컴퓨터의 플랫폼 (CPU, OS)에 종속적인 코드로 변환됨. 
>> 다른 플랫폼 (CPU, OS)에서 실행하려면, 해당 플랫폼에 맞도록 코드 수정 필요 (번잡, 귀찮)
 
(2) 자바 WORA (Write Once Run Anywhere)
: 한 번 작성하면, 어디에서나 실행시킬 수 있다. 
 
- 플랫폼 독립적
: 자바 가상 기계 (JVM)만 있으면 동일한 실행 환경 제공, 동일한 실행 결과 도출. 
 
- 웹 브라우저, 분산환경 지원
: 네트워크에 연결된 모든 클라이언트에서 실행 가능.
 
 
3) 자바 가상 기계와 바이트 코드
(1) 플랫폼 독립성
: (자바 가상 기계 + 바이트 코드) 가 있어서 가능
 
(2) 바이트 코드 (byte code, portable code, p-code)
- 기계어
- 바이너리 코드 (binary code) (모든 CPU가능)
- 자바 가상 기계에서만 실행됨.
- 자바 컴파일러 >> 자바 소스 프로그램 컴파일 >> 바이트 코드 클래스 파일 생성 >> 자바 가상 기계 (JVM)>> 인터프리터 방식으로 실행 (클래스 파일은 JVM만 있으면 어디서든 실행 가능)
 
(3) JDK (Java Development Kit)
: 도구 javap 제공  (자파 클래스 파일 >> 디어셈블 (disassemble, 분해) >> 바이트코드 볼 수 있음)
 
+) 디어셈블 (disassemble)
: (클래스 파일에 있는) 바이트 코드를 텍스트로 볼 수 있게 변환하는 작업.  (010110100...)
(JDK의 javap.exe 사용)
 
(4) 자바 가상 기계 (JVM, Java Virtual Machine)
- 소프트웨어. 다른 플랫폼에서도 동일한 환경을 제공(플랫폼 독립적)
- JVM 자체는 플랫폼 종속적. (JVM 자체는 플랫폼마다 다르게 작성됨. 자바 프로그램은 어떤 JVM이든 정상 실행됨.) 
(예시 : 리눅스에서 작동하는 JVM은 윈도우에서는 작동하지 않음.)
 
 
4) 자바의 실행 환경
(1) C/C++ 프로그램의 개발 및 실행
: 여러 개의 소스 파일에 나누어 프로그램을 작성
>> 각 소스 프로그램 컴파일 ( 목적 파일 생성 (.obj) )
>> 링크로 목적 파일들 연결(하나의 실행 파일 생성 (.exe) ) 
 
+) C/C++
- C     :   c    >>  .obj  >>  .exe
- C++ : .cpp  >>  .obj  >>  .exe
 
+) 링크 (link)
: 프로그램에서 호출한 함수들 확인 >> 라이브러리에서 함수 찾기 >> 함수들의 목적 코드 호출 >>  .exe. 파일에 삽입
 
+) 실행 파일 (.exe)
- 실행에 필요한 모든 코드가 있음
- 파일이 매우 큼 + 컴 메모리 작음  >> 실행 불가능
 
(2) 자바 프로그램의 개발 및 실행
: 여러 개의 소스 파일 (.java)에 나누어 프로그램을 작성
>> 각 소스 프로그램 컴파일 ( 클래스 파일 생성 (.class) )
>> (링크 과정 없음)
>> 클래스 파일 중 하나 실행
>> JVM이 클래스 파일 메모리에 로딩, 실행. 
(실행 중에 다른 클래스 파일, 자바 API의 클래스 파일 등이 필요하면, 해당 클래스 파일을 로딩, 실행)
(컴 메모리 적어도 큰 자바 응용프로그램 실행 가능)
(main() 메소드를 가진 클래스의 main()에서 실행 시작)
 
+) 자바 API 
: JVM + 자바 플랫폼의 다양한 클래스 라이브러리 
 
+) java
- 자바 : .java  >> .class
- 하나의 플랫폼. (언어, 컴파일러, JVM 등 실행 환경을 모두 갖춤)
 
+) jar
: 자바가 클래스 파일을 하나로 압축시킨 파일 형태. (클래스 파일을 베포하기도 하고, jar 파일을 베포하기도 하고)
 
 
5) 자바 vs C/C++
(1) 자바
- 컴파일러 >> 바로 바이트 코드 (기계어)
- 링크 없음
- 바이트 코드는 JVM에서만 사용 가능
- 실행 시 필요한 클래스는 JVM이 링크, 로딩(클래스 로더), 실행
- 클래스 로더 (classloader)로 개발자가 직접 로딩 가능
- 다중상속 기능 삭제
- 연산자오버로딩 (동일)
- 메모리 관리 자동
- 클래스 라이브러리 충분
- 분산환경에 적합
- 인터프리터 형식. 컴파일 불필요
- 호환성 좋음
- 보안성 뛰어남
 
(2) C/C++
- 컴파일러 >> 목적 코드 (.obj) >> 링커 >> 실행 파일 (.exe)
- 링크 필요 (링커가 필요한 라이브러리 링크)
- 플랫폼 종속적. (목적 코드 (.obj), 실행 파일 (.exe) )
- 정적 라이브러리 : 실행 파일에 포함. (실행 파일 커짐.)
- 동적 라이브러리 : 실행 시간에 링크.
- 다중상속 기능 
- 연산자오버로딩 (동일)
- 메모리 관리 수동
- 클래스 라이브러리 불충분
- 분산 환경에 부적합
- 컴파일 필요
- 호환성 비교적 나쁨
- 보안성 안 좋음


1.3 개발 도구와 자바 플랫폼
1) JDK와 JRE
(1) JDK (Java Development Kit)
- 자바 개발자를 위한 상업용 소프트웨어. 
- 구성 : 개발 도구 + JRE
 
+) JDK 구성

출처 - 《명품 자바 프로그래밍》 - 생능 출판사

 
+) bin 디렉터리 구성

출처 - 《명품 자바 프로그래밍》 - 생능 출판사

 
(2) JRE (Java Runtime Environment)
- 자바 응용프로그램이 실행될 떄 필요한 소프트웨어들.
- 자바 프로그램을 실행시키기만 하는 일반 사용자가 사용. (JRE만 따로 다운 받을 수 있음)
- 예시 : 자바 API, 자바 가상 기계 (JVM)
 
+) 자바 API
: 이미 컴파일 된 클래스 라이브러리. 
 
 
2) 자바의 배포판
: 10여 가지 종류의 JDK들. (응용에 따라 JDK가 다름).
 
(1) Java SE (Standard Edition)
: 자바 표준 배포판. 데스크톱 응용프로그램, 서버 응용 프로그램 개발에 사용.
 
+) Java SE 구성

출처 - 오라클 (https://www.oracle.com/)

 
(2) Java ME (Micro Edition)
: 모바일용 배포판. 작은 하드웨어 자원(제한된 리소스)를 갖는 장치에 적합. (IoT, TV, 블루레이, 패드, 스마트폰, 셋톱박스)
(가장 작은 메모리 풋프린트)
(스마트폰, 고해상도 TV 등은 안드로이드가 차지하고 있음)
 
(3) Java EE (Enterprose Edition)
: 기업용 배포판. 자바 다중 사용자, 대규모 기업 응용프로그램 개발에 사용. 
 
 
3) Java 9부터 시작된 모듈 프로그래밍
(1) Java 9
: 모듈화 (modularity) 됨. 
(자바 응용프로그램을 필요한 모듈끼리 연결하는 방식으로 구성)
(>> java9부터 Java SE의 모든 클래스들을 모듈들로 재설계, 재정리) 
 
+) 모듈 (module)
: 자원 (자바 패키지, 이미지, XML 파일 등)을 묶은 단위. 
 
+) 모듈화 (modularuty)의 목적
: 자바 응용프로그램 실행에 필요 없는 모듈 배제 >> 작은 크기로 배포 가능.
(소형 IoT 등 성능 유지 가능)
(세밀화)
 
+) 기존 방식을 사용해도 상관없긴하다.
 
 
4) 자바 API (Application Programming Interface)
- 미리 만들어 놓은 자바 클래스 집합. 
- Java 9 (모듈화 정책)부터 계층화
(모든 자바 API 클래스들은 서로 관련된 클래스끼리 패키지로 묶음  >>  다른 패키지들을 모듈로 묶음)
- 광범위함  >> 쉽고 빠르게 자바 프로그램 개발 가능
 
+) 자바 패키지
: 서로 연관, 호환된 것들끼리 묶어놓은 것. (계층 구조)
 
 
5) 자바 IDE (Integrated Development Environment)
: 통합 개발 환경 (소프트웨어). (소스 코드 편집, 컴파일, 디버깅을 모두 할 수 있음)
 
(1) IntelliJ IDEA
: 자바 응용 프로그램 개발에 자주 사용되는 IDE. 상용/무료 버전 있음.
 
(2) 이클립스 (eclipse)
: 자바 응용 프로그램 개발에 자주 사용되는 IDE. 오픈 소스 응용프로그램.
다양한 언어, Pc, IoT 등의 환겨에서 프로그램 개발을 지원. 통합 개발 환경(IDE).


9.20
 
자바 응용의 종류 : 서블릿 응용프로그램
1) 서블릿 (servelt)
2) 백앤드
참고로 보고 넘어가
사용자와 대화하는 웹 브라우저 (스크립트 모드, 대화형 모듈 = 파이썬)
서블릿(Pc만 됨) 이랑 거의 유사한데 (백앤드가 모바일까지 가능 (서블랫보다 활용 범위 넓음) )
3)  안드로이드
- 앱인벤터 : (일반프로그램은 소스 넣어서 만드는데) 소스 말고 블록을 넣음 (얘도 숨은 웹브라우져를 사용할 수 있음)
- 지도 길찾기, 전철 노선도 등이 (소스보다는) 앱 인벤터의 소스를 떙겨서 받아서 사용 (실시간 데이터DB를 받아서 폰에 보여주는 것)
(안드로이드에서는 잘 되는데 아이폰에서는 충돌이 일어날 때 많음). 그래서 책도 안드로이드만 있는듯
 
 
자바의 특성/특징
- 플랫폼 독랍성 
- 객체지향
- 클래스로 캡슐화 (클래스 내에 모든 변수(필드), 함수(메서드), 구현해야함)
- 클래스 안에서 새로운 클래스(내부 클래스) 작성 가능.
- 소스(.java), 클래스 파일(.class) : 하나의 소스 파일에 여러 클래스 파일 있음.
- 실행코드 배포
- 자바 응용 프로그램의 실행은 메인 메소드는 하나 밖에 없다. (하나의 클래스 파일에 두개 이상의 메인 메소드 불가능)
- 패키지 : 서로 관련 있는 여러 클래스 패키지로 묶어서 관리. (폴더 개념)
- JDK는 멀티 스레드 가능 (어떤 Os  도움 없이 멀티 스레드 지원 가능)
- 가비지 컬렉션 : 사용하지 않는 메모리는 JVM에 의해 자동으로 반환시킴
- 자바는 안전 (포인터 개념이 없고(프로그램 작성 쉬움), 타입체크(컴 시스템이 멈추거나 안 함)가 엄격.)
- GUI (그래픽 지원) 등 다양한 라이브러리 지원>>프로그램 작성 쉬움
- JIT 컴파일 : 실행 중에 바이트 코드를 기계어 코드로 컴파일하여 기계어를 실행하는 기법
- 대화형 모듈 (한줄씩 번역), 인터프리터 방식 사용
 

반응형