Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

브래의 슬기로운 코딩 생활

JAVA 프로그래밍 1주차 정리 본문

2-1/JAVA 프로그래밍

JAVA 프로그래밍 1주차 정리

김브래 2023. 3. 7. 21:13

강의 개요


강의 목표
대표적인 객체지향 언어인 자바에 대한 기본 개념과 유용한 클래스, 컬렉션, 스레드 등 학습을 통해 객체지향 개념에 대한 이해를 높이고, 실습을 통해 객체지향 프로그래밍 능력을 배양한다.

 

강의 방법
필요 지식 강의 (강의 교안, 참고 문헌)
주차별 실습 (강의 교안)
프로젝트 수행 및 발표
 
강의 평가

•출석(20%),

•실습평가(80%, 8주-30% 서술-실습, 15주-50% 실습)


주차 별 강의 계획


1주차 자바 개요

프로그램 개발을 위한 통합 개발 환경을 구축하고, 다양한 응용프로그램을 개발 및 실행하는 능력을 실습한다.
 
. 프로그래밍 개념 소개
. 자바 개요 소개
. 개발 환경 구축
. 개발 관련 도구 소개

 

2주차 어휘, 자료형, 형변환

자바로 작성된 프로그램을 구성하는 요소인 어휘, 자료형에 대하여 알아보고, 이를 실습한다.
 
. 어휘 실습
. 자료형 실습
. (기본형) 형변환 실습

 

3주차 연산자

자바로 작성된 프로그램을 구성하는 요소인 연산자에 대하여 알아보고, 이를 실습한다.
 
. 연산자의 종류 확인
. 산술, 논리 연산자 실습
. 관계 연산자 실습
 

4주차 제어 흐름

자바로 작성된 프로그램을 구성하는 요소인 문장, 제어흐름에 대하여 알아보고, 이를 실습한다.
 
. 배정문 실습
. 혼합문(블록) 실습
. 조건문 실습
. 반복문 실습
. 분기문 실습
. 표준입출력문 실습
 

5주차 클래스와 객체

객체지향의 주요 개념들과 클래스-객체에 대하여 알아보고, 이를 실습한다.
 
. 클래스 구성 확인
. 생성자 중첩 실습
. 접근 메소드 정의
. 커스텀 메소드 정의
. 객체 생성 및 사용 실습
. 다양한 매개 변수 처리

 

6주차 상속과 다형성

생산성과 검증된 코드 작성을 제공하는 상속과 유지보수의 용이성을 제공하는 다형성에 대하여 학습하고, 이를 실습한다.
 
. 상속과 접근 수정자 실습
. 상속과 재정의 실습
. Object 클래스와 final 수정자
 

7주차 추상클래스와 인터페이스

유연하고 확장성있는 프로그래밍을 위한 방법인 추상클래스와 인터페이스 등에 대하여 알아보고, 이를 실습한다.
 
. 추상 클래스 정의
. 인터페이스 선언 및 구현
. 중첩 클래스 선언 및 사용
. 지역 클래스 선언 및 사용
. 익명 클래스 선언 및 사용
. 람다식 정의, 특징 및 활용
 

8주차 패키지 활용

연관된 클래스와 인터페이스를 효율적으로 관리할 수 있는 방법에 대하여 알아보고, 이를 실습한다.
 
. 패키지 선언과 사용
. CLASSPATH 설정 및 기능 확인
. 절대 경로 vs. 상대 경로를 이용한 사용   . 디폴트 패키지 사용
. 콘솔에서 패키지 사용
. 콘솔에서 배포 파일 생성
 

9주차 중간고사

 

10주차 예외처리

실행시간에 발생할 수 있는 예외적인 상황을 효율적으로 처리할 수 있는 방법에 대하여 알아보고, 이를 수행함으로써 신뢰성 높은 프로그램을 작성하는 능력을 배양한다.
 
. 예외 정의, 예외 발생 원인
. 예외 분류, 사용자 예외 정의
. 예외 처리 실습
. 예외 전파 실습
 

11주차 유용한 클래스 활용

자바에서 널리 사용되고 있는 유용한 클래스들을 학습하고, 이를 실습한다.

 

. java.lang 패키지에 포함된 클래스
. java.util 패키지에 포함된 클래스

 

12주차 제너릭(Generic)과 열거형

자료형의 안정성과 코드의 간결하게 해주는 제너릭과 정의된 값만을 사용할 수 있게 해주는 열거형을 학습하고, 이를 실습한다.

 

. 제네릭 등장 배경 및 특징
. 제너릭 클래스 정의 및 사용
. 한정된 타입 파리미터와 와일드 카드 활용
. 열거형 특징과 활용

 

13주차 자바 컬렉션 프레임워크(Java Collection Framework, JCF)

자바에서 제공하는 컬렉션 프레임워크에 대한 이해를 향상시키고, 다양한 유형의 자료를 효율적으로 다룰 수 있는 능력을 배양한다.
 
. JCF 특징과 상속 관계
. List 인터페이스 관련 클래스 활용
. Set 인터페이스 관련 클래스 활용
. Map 인터페이스 관련 클래스 활용
 

14주차 람다와 스트림

자바에서 널리 사용되고 있는 람다와 스트림 클래스들을 학습하고, 이를 실습한다.
 
 
 
람다와 함수형 인터페이스 활용
 
스트림 개요, 종류 및 생성
 
스트림 연산 및 활용

 

15주차 스레드와 I/O

자바에서 널리 사용되고 있는 스레드 클래스들과 I/O를 학습하고, 이를 실습한다.
 
 
. 프로세스와 스레드 비교
 
. 스레드 생성, 실행, 제어
 
. 스레드 동기화
 
. 입출력 스트림, 바이트 스트림, 문자 스트림
 
. 파일 관리
 

 

16주차 기말고사


프로그래밍 기본 용어와 개념


자연어(natural language)

인간사회의 형성과 함께 자연적으로 생성되고, 세월의 흐름과 함께 진화하고 일상 생활 속에서 상호 의사소통을 위한 수단으로 사용되는 언어를 의미한다.

인공언어(artificial language)

특수한 목적에 따라 제한된 문법을 가지고 생성한 언어을 의미한다.

프로그래밍 언어(programming language)

프로그램 작성을 목적으로 생성된 인공 언어를 의미한다.
 
종류 : C, C++, Java, C#, JSP, ASP, PHP, VB, Fortran, Cobol, Assembly Language ...
 
프로그래밍 언어별로 특징을 가지고 있기 때문에 개발할 대상에 따라 선택해야 한다.

프로그래밍

간단하게 프로그램을 작성하는 과정을 의미하지만 구체적으로는 문제 해결 방법, 즉 알고리즘을 프로그래밍 언어로 변환하는 일련의 과정을 의미한다.
프로그램 설계, 구현, 테스팅, 디버깅, 문제해결 및 유지보수등의 전 과정을 의미한다.
일반적으로 소스 코드는 기존의 코드를 수정하거나 완전히 새롭게 작성된다.

프로그래머

프로그램을 작성하는 능력을 보유한 주체(subject)를 의미한다.

프로그램

대상 기계(target machine)에게 특정한 작업을 수행하도록 하기 위해 작성한 일련의 명령들(sequence of instructions)을 의미한다.
프로그램은 자료에 대하여 입력, 처리, 저장 등의 다양한 작업을 수행하여 문제를 해결하는 일련의 명령들의 집합을 의미한다.

프로그램 형태별 분류

소스코드(source code, source program)
- 사람에게 친숙한 형태의 프로그래밍 언어로 작성된 프로그램을 의미한다.
- .c, .java

목적 코드(object code, object file)

해당 운영체제가 이해할 수 있는 번역된 코드를 의미한다.
.obj , .class

실행 가능한 코드(executable code)

해당 운영체제에서 실행 가능한 코드를 의미한다.
번역된 코드가 항상 실행이 가능한 것을 아니다.
.exe (windows 계열), binary file(linux  계열)

기계어 코드(machine code)

기계가 이해할 수 있는 코드를 의미한다.

컴파일러(compiler)

소스프로그램을 목적코드로 번역해주는(compile, 컴파일) 프로그램을 의미한다.
 
cl.exe, gcc, gcc-++, javac

링커(linker)

컴파일 된 목적 코드와 동작을 위해 필요한 라이브러리를 연결하여 실행가능한 형태로 만들어 주는 과정(링킹, linking)을 수행하는 프로그램을 의미한다.

로더(loader)

실행 파일을 메인 메모리에 적재하는 프로그램을 의미한다.

프로그램의 형태별 저장 위치


소스 프로그램

프로그래밍 언어로 작성된 상태 - 하드디스크
 

목적 프로그램

컴파일된 상태 - 하드디스크
 

실행가능한 프로그램

링킹 또는 링킹 준비 완료 - 하드디스크
 

실행 중인 프로그램, 프로세스

메인 메모리
실행단계 1. Fetch - 메모리상에 존재하는 명령어를 CPU로 가져온다.
실행단계 2. Decode - 가져온 명령어를 CPU가 분석한다.
실행단계 3. Execution - 해석된 명령어를 CPU가 실행

Java


정의

대표적인 범용(general-purpose) 객체지향 프로그래밍 언어

활용

애플리케이션, 웹 애플리케이션, 개발에 활용되고 있으며, 클라이언트와 서버측 개발에 활용되고 있다.

Java 등장 배경 및 발전


1990

그린 프로젝트 – Sun Microsystems
 
가전 제품들에 내장되는 소프트웨어를 효과적으로 개발
다양한 하드웨어 장비들에 대하여 작고, 빠르고, 효과적이며 이식성이 좋은 프로그래밍 언어에 대한 요구 증가
 

1991

객체지향 프로그래밍 언어, 범용 프로그래밍 언어
오크(Oak)’ -> 자바(Java)
Write Once, Run anywhere
 

1995 - Sun World, Official Announced

 


자바의 특징


simple : 간단한 언어이다.

No Pointer Operation (포인터 연산이 없다.)
No Multiple Inheritance (다중 상속을 지원하지 않기 때문에 모호성 발생을 줄일 수 있다.)
No Memory Management (메모리 관리를 하지 않아도 Garbage Collector가 관리하여 견고(robust)하고 안전(secure)하다.)

 

oop : 객체지향 언어이다.

캡슐화(Encapsulation) - 자료 추상화(data abstraction) 기반으로 정보은닉(Information Hiding)을 제공하도록 하나의 단위로 구성하는 것
상속성(Inheritance) - 기존의 클래스가 가지고 있는 자료 구조와 연산을 기반으로 새로운 클래스를 정의하는 기능
다형성(Polymorphism) - 적용되는 객체에 따라 연산의 의미가 달라지는 것을 의미한다.
 

architecture neutral : 플랫폼 독립적이다.

Windows, Linux, Solaris, Mac 등 다양한 플랫폼 지원한다.
WORA(Write Once Run Anywhere) : 플랫폼에 독립적인 코드를 생성하기 때문에 가능하다.

 

dynamic linking : 동적 링킹을 지원한다.

정적 링킹은 실행에 필요한 라이브러리의 코드가 실행 파일에 포함된다.
- 소스 뿐 아니라 라이브러리가 변경되어도 컴파일-링킹을 다시 수행해야한다.
 
실행에 필요한 라이브러리에 대한 인터페이스 정보만 포함하여 코드를 생성한다.
- 라이브러리가 변경되어도 컴파일을 다시 수행할 필요가 없다.

- 라이브러리를 공유할 수 있기 때문에 자원을 절약할 수 있다

 

multithread : 멀티스레드를 지원한다.

멀티스레드는 하나의 프로세스안에 다수의 스레드가 존재하는 것을 의미함
프로세스(process) - 실행 중인 프로그램, 1개 이상의 스레드
스레드(thread)
- 경량(light-weight) 프로세스라고도 하며, 같은 프로세스에 포함된 스레드들은 메모리, 상태 정보 등 다양한 자원을 공유하며, 주소 공간을 공유한다. 또한 스레드 간 통신이 용이하고, 스레드간 신속한 컨텍스트 스위칭(context switching)이 가능하다.
- C/C++의 경우 운영체제 지원과 라이브러리가 필요함

자바 기본 개념


자바 컴파일러 (javac.exe)

자바 소스 프로그램(.java)을 바이트코드(Bytecode)로 변환해주는 프로그램
바이트코드 : 자바 가상 기계가 이해할 수 있는 기계 코드
 

자바 인터프리터(java.exe)

바이트 코드(.class)를 해석해서 실행해주는 프로그램
 

자바 가상 기계(JVM, Java Virtual Machine)

바이트 코드를 기계어로 사용하는 가상 기계
 
구성
 
-클래스 로더(class loader) : 실행시간에 클래스를 로딩한다.
 
java.lang.ClassLoader
JarFileClassLoader, NetworkClassLoader, AppletClassLoader
 
- 실행시간 데이터 영역(runtime data area)
 
- 실행 엔진(execution engine)

일반적인 프로그램과 자바 프로그램의 차이


운영체제에 따른 자바 가상머신의 차이


자바 기본 개념


Java SE APIs

자바 APIs
 

JRE(Java Runtime Environment)

자바 실행 환경 : JVM, Java SE APIs Deployment
 

JDK(Java Development Kit)

자바 개발 환경 : JRE,  Development Tools, Tool APIs


자바 프로그램 동작


자바 소스 프로그램은 클래스들로 구성된다.

자바 소스 프로그램은 .java 확장자를 가지는 파일이고, 하드 디스크에 저장된다.
 

자바 소스프로그램을 컴파일하면 바이트코드(bytecode)가 생성된다.

바이트코드는 .class 확장자를 가지는 파일이고, 하드 디스크에 저장된다.
JVM상에서 java.exe에 의해 인터프리터 방식으로 동작한다.
 

자바 프로세스(실행 중인 프로그램)는 하나 이상의 스레드로 구성된다.

메모리에 적재된 객체들이 상호작용하면서 주어진 문제를 해결한다.

하나의 스레드안에는 다수의 객체들이 존재할 수 있다.

자바 플랫폼의 종류


Java SE

데스크톱에서 실행되는 애플리케이션을 작성할 때 사용되는 자바 플랫폼을 의미한다.
Java™ SE 17 LTS
JDK 11 (Java™ SE Development Kit 11)
JRE 8 (Java™ SE Runtime Environment 8)

Jave EE -> Jakarta EE

기업용 애플리케이션을 작성하는데 필요한 분산 객체, 트랜잭션, 높은 이식성과 같은 기능을 지원하는 자바 플랫폼을 의미한다.
Java™ EE 8 SDK, Jakarta EE 8, Jakarta EE 9, Jakarta EE 10
 

Java ME

모바일 기기, 임베디드 장치, TV, Java Card 등에서 동작하는 애플리케이션을 작성할 때 사용되는 자바 플랫폼을 의미한다.
Java™ ME 8.3 SDK

자바 애플리케이션 종류


데스크톱 애플리케이션

JRE가 설치되어 있는 환경에서 실행이 가능한 애플리케이션
로컬의 모든 자원을 활용할 수 있음
 

서블릿

서버에서 실행되는 애플리케이션, 웹 애플리케이션이라고 함
 

모바일 애플리케이션,

임베디드 기기, 휴대폰, 스마트폰 등에서 실행되는 애플리케이션
안드로이드(자바 기반 모바일 플랫폼)'Dalvik'이라는 자바 가상 머신을 사용하지만 자바를 사용함

 

애플릿 (Java SE 11 지원 안함, 17에서 Deprecated)

웹 브라우저가 자바 가상 머신과 연동하여 실행하고 제어되는 애플리케이션
배포가 용이하지만 로컬 자원 활용에 대한 제한이 있음

 

웹 스타트(Java SE 11부터 지원 안함)

다운로드하여 실행되는 애플리케이션으로 배포, 실행, 관리가 용이하지만 실행하기 까지 시간이 많이 소요됨

JDK(Java Development Kit)


정의

JVM(Java Virtual Machine) 상에서 실행되는 프로그램을 개발하는 데 필요한 툴들을 모아놓은 소프트웨어 패키지
 
오라클사가 출시한 자바 SE, 자바 EE, 또는 자바 ME 플랫폼 중 하나를 구현한 것
 
Java 플랫폼이 소개된 이후 가장 널리 사용되는 소프트웨어 개발 (SDK : Software Development Kit)
- Linux, macOS, Windows 상에서 자바 개발자를 대상으로한 바이너리 제품 형태로 제공
 

OpenJDK

2006년부터 Sun Microsystems의 노력 결과물
 
Java SEfree, open-source 구현체
 
JDK 7을 기반으로 함

대표적인 JDK


종류

Oracle JDK
- OpenJDK : https://jdk.java.net

 

Azul JDK - https://www.azul.com
Amazon Corretto
Redhat OpenJDK
 

출시 정보

https://www.java.com/releases/


환경 변수


정의

명령어 해석기가 특별할 용도로 미리 약속해놓은 단어
시스템의 사용을 편리하게 하기 위해 특별한 용도로 시스템에서 미리 약속해놓은 단어 또는 시스템 사용자가 특정한 용도를 지정한 단어
사용자 계정마다 다른 설정 값을 가질 수 있다.

 

종류

PATH : 실행 프로그램을 검색할 때 찾아볼 경로, 디렉터리 목록을 지정하기 위해 사용하는 환경 변수
JAVA_HOME : JDK 설치 경로를 저장하는 환경 변수, 사용자 설정 환경 변수이다.
CLASSPATH : 클래스를 검색할 때 찾아볼 경로를 지정하기 위해 사용하는 환경 변수
 

[시스템 속성]-[고급]-[환경 변수(N)]에서 설정

JAVA_HOME
JDK 설치 경로 - C:\Program Files\AdoptOpenJDK\jdk-11.0.10.9-hotspot\

PATH
실행 파일 위치 설정
%PATH%;%JAVA_HOME%\bin

CLASSPATH
클래스 파일 경로 설정
%CLASSPATH%;.;JAVA_HOME%\jre\lib\ext
 

설정 확인

$ echo %JAVA_HOME%
 
$ javac -version

JDK 주요 개발 도구


javac.exe

자바 소스 코드를 자바 클래스 파일, 즉 바이트코드로 번역해주는 프로그램
javac [옵션] <자바 소스 파일 이름>.java

java.exe

자바 클래스 파일을 입력받고, 자바 가상 머신을 실행하여 자바 프로그램을 실행하는 프로그램
java [옵션] <자바 클래스 파일 이름> [명령 라인 매개 변수 목록]
ü[명령 라인 매개 변수 목록]main(String[] args)args에 저장됨
 

javaw.exe

콘솔(console) 없이도 자바 애플리케이션을 구동할 수 있는 프로그램. java.exe와 동일한 기능을 수행

 

jar.exe

자바 클래스 파일을 압축한 자바 아카이브 파일(JAR, Java ARchive)을 생성하고 관리하는 프로그램
 

javadoc.exe

자바 소스 파일에 ‘/** ~ */’에 기술된 내용을 HTML 형식의 자바 API 문서로 생성하는 프로그램

Intellij IDEA Ultimate 설치


정의

개발자의 생산성을 극대화하도록 설계된 JVM 기반 통합 개발 환경
 

단계별 설치

설치 마법사 실행
경로 설정
설치 옵션 설정
시작 메뉴 추가
설치 시작
설치 마법사 종료

Reboot now | I want to manually reboot later


대표적인 Java IDE


IDE(Integrated Development Environment)

코딩, 디버그, 컴파일, 배포 등 프로그램 개발에 관련된 모든 작업을 하나의 프로그램 안에서 처리하는 환경을 제공하는 소프트웨어

 

종류

JetBrains IntelliJ IDEA 2022.3.2 - https://www.jetbrains.com/idea/
Java, Spring 활용, Android Studio IDE, Kotlin 앱 개발 강점
 
Eclipse IDE 2022‑12 - https://www.eclipse.org
Java, Spring 웹 애플리케이션 개발 강점

 

Spring.io Spring Tool Suite 4.17.2 - Spring 개발 강점, https://spring.io
 
Microsoft Visual Studio Code 1.76 - https://code.visualstudio.com/
JavaScript, TypeScript, Node.js 기본 지원
다양한 언어(C++, C#, Java, Python, PHP, Go) 및 런타임(: .NET Unity)을 위한 풍부한 확장 에코시스템