SlideShare a Scribd company logo
Java tutorial
Javacafe 지대철
소개
• Job : 4학년
• Email : puri8467@gmail.com
• Blog : https://blog.naver.com/puri8467
• 발표 예제 : https://github.com/Danpatpang/javacafe
목차
1. 자바를 배워야 하는 이유
2. 자바의 역사와 변화
3. 자바의 동작 과정
4. 자바 기초 문법
자바를 선택한 이유
Naver 지식in
Stackoverflow
자바를 배워야 하는 이유
1. 자바를 배우기 위한 수많은 자원
2. 많은 취업의 기회
3. 객체 지향 프로그래밍 언어
4. 자바는 오픈 소스
5. 풍부한 API
6. 강력한 개발 툴
7. 전세계적으로 사용
8. 커뮤니티의 훌륭한 지원
9. 실세계의 다양한 애플리케이션에서 사용
10. 배우기 쉬움 (C에 비해)
https://www.youtube.com/watch?v=lh934b4ds-4
TIOBE 프로그래밍 언어 사용 순위
https://www.tiobe.com/tiobe-index/
Github 2018 octoverse
https://octoverse.github.com/projects#languages
개발자 구인 현황
잡코리아 키워드 검색 결과 Computerjobs에서 조회
개발자 구인 현황
언어 잡코리아 사람in
Java 5442건 2273건
C, C++, C# 4623건 1865건
Python 733건 646건
JavaScript 1708건 696건
PHP 1179건 807건
SQL 1947건 833건
<2019년 4월 2주차 기준>
자바가 아닌 다른 언어를 배워야 하는 이유
1. 자바가 주류 언어가 되기까지 - 오픈 소스 진영과의 불편한 동거
2. 오라클 시대의 자바, 자바스크립트의 반격
3. JCP를 통한 관리, 다른 언어에 비해 느린 발전 속도
자바의 역사와 변화에 대해 알아보자.
자바의 역사와 변화
1991년
Sun Microsystems사의
제임스 고슬링 외 4인이 개발 “Oak”.
1995년
“Java”로 명칭 변경.
2009년
Sun Microsystems가 오라클과 인수 합병.
2017년
Java EE 포기.
이클립스 재단에서 JakartaEE로 변경.
C, C++와의 차이점
기존의 C에 객체지향 기능을 추가하여 C++을 만들어보자.
→ 포인터도 가져오고~ 객체지향도 추가하고~
→ 이거 어떻게 만들어? 너무 복잡한데...
→ 좀 어색해... 처음부터 객체 지향으로 만들자.
→ 포인터 포기하자... 복잡해지면 안 돼!
플랫폼 독립적인 언어를 만들자!
Write Once Run Anywhere!
자바의 철학
폭발적 성장
Tiobe 과거 프로그래밍 언어 순위
인터넷과 자바의 만남
자바의 세부 부분 개발되고 있을 무렵, WWW의 출현.
(1991년 뉴스를 통해 대중화, 1993년 서버 수 50대 → 500대)
이식 가능한 언어를 찾습니다.
(인터넷은 다양한 컴퓨터, OS, CPU로 넘쳐나는 광대한 분산 시스템)
가전 제품에서 인터넷으로 초점 변경.
Java 주요 릴리즈 히스토리
Version Date Issues
1.0 1996년 1월 Oak로 출시, 1.0.2 버전부터 Java로 불리기 시작
1.1 1997년 2월 AWT, Inner class, JDBC, RMI, JIT 컴파일러, 유니코드 통합
1.2 1998년 12월 애플릿, Swing GUI, Collections 추가, J2SE 1.2로 표기
1.3 2000년 3월 HotSpot JVM, JNDI, JavaSound 추가
1.4 2002년 2월 정규 표현식, NIO, XML 파서 통합, IPv6 지원, Java Web Start
1.5 2004년 9월 Generics, Autoboxing/Unboxing, Enumerations, static imports
1.6 2006년 12월 Security, JavaSE 1.6으로 표기
1.7 2011년 7월 Multi Exception catch, Type Inference, Null safe Method
invocation, String in Switch, Automatic Resource Management
1.8 2014년 3월 Lambda Expression, Streams, Method Reference
1.9 2017년 9월 Jshell, HTTP/2, private 인터페이스 메서드
업데이트가 늦어진 이유
Java 에디션 분류
Java SE
자바 표준 에디션.
Jakarta EE (구 JavaEE)
기업에서 운영하는 서버 페이지에 특화된 에디션.
Java ME
임베디드 시스템 환경에 특화된 에디션.
Java FX
데스크톱 앱 개발 및 배포를 위한 에디션. (GUI 라이브러리 제공)
Jakarta EE(Java EE)
오라클 소프트웨어에서 2017년 8월 포스팅 2014년 10월 ~ 2016년 3월 오라클이 해결한 EE 이슈
자바 유료화?
자바의 미래
자바 언어는 오픈소스로 누구나 무료로 사용할 수 있다.
오라클은 JDK 과금 방식을 변경했다. (영구 라이선스 → 구독 모델)
자바는 무료지만, JDK는 유료였다.
구독 요금
릴리즈의 주기별 업데이트
유료화에 대한 대응
1. 기존에 라이선스를 사서 구매하던 기업은 큰 변화 X.
2. 돈 내기가 부담스러운 기업은 OpenJDK를 사용.
3. 스타트업은 언어 변경.
OpenJDK란?
Java SE의 자유-오픈 소스 구현체.
GPLv2 라이선스 + 추가 라이선스를 따르고 있다.
종류 : Oracle, Zulu, Red Hat, Red Hat, IBM, IntelliJ 등
OpenJDK의 문제점
실제 적용 사례가 많지 않다.
호환성에 문제가 없는가?
오픈 소스이기에 참여자가 없으면 자연스럽게 죽는다.
문제가 생겼을 때 누가 처리하고 책임을 질 것인가?
안정성과 성능 차이는 없는가?
자바의 미래
어떻게 흘러갈지는 아무도 모른다...
자바의 특징
1. 이식성이 높은 언어
2. 객체 지향 언어
3. 함수적 스타일 코딩 지원
4. 메모리 자동 관리
5. 다양한 애플리케이션에서 개발 가능
6. 멀티 스레드를 쉽게 구현
7. 동적 로딩 지원
8. 막강한 오픈 소스 라이브러리
자바의 동작 과정
Program
OS
Hardware
일반 프로그램
Java Program
JVM
OS
Hardware
Java 프로그램
VS
자바의 동작 과정
.java .class
JVM 번역
바이트 코드
javac.exe
(컴파일)
java.exe
(JVM)
직접 해보자.
1. 자바 다운로드 및 설치
https://www.oracle.com/technetwork/java/javase/downloads/
2. 환경 변수 설정
https://macchiato.tistory.com/9
3. 제대로 설치됐는지 확인
java -version
javac –version
4. 명령 프롬프트에서 java 명령어 실행
JRE, JDK, JVM
JRE(Java Runtime Environment)
물리적으로 존재하는 JVM을 구현하는 역할.
동작을 위한 라이브러리 + JVM
JDK(Java Development Kit)
JRE + 개발 툴
JVM(Java Virtual Machine)
추상적 머신.
바이트 코드가 실행될 수 있는 런타임 환경 제공.
코드 소개
클래스(class)
메서드(method)
명령문(statement)
클래스, 객체, 인스턴스
https://alfredjava.wordpress.com/2008/07/08/class-vs-object-vs-instance/
클래스, 객체, 인스턴스
Object(객체)
실 세계의 객체는 상태와 행동이라는 2가지의 주요 특징을 가지고 있다.
사람은 이름, 나이와 같은 상태를 가지며 걷기, 자기와 같은 행동을 가진다.
자동차의 경우 현재 속도, 엔진과 같은 상태를 가지며, 브레이크 동작, 기어 변화와 같은 행동이 있다.
소프트웨어의 객체는 실세계의 객체와 개념적으로 유사하다.
둘 다 상태, 상태와 연관된 행동으로 구성되어 있다.
소프트웨어의 객체는 필드에 상태를 저장하고 메서드를 통해 행동을 노출시킨다.
Class(클래스)
클래스는 객체를 만드는 데 사용되는 "템플릿" 또는 "청사진"이다.
기본적으로 클래스는 필드, 정적 필드, 메서드, 정적 메서드, 생성자로 구성이 된다.
필드는 클래스의 상태(학생의 이름)를 유지하는데 사용되며, 메서드는 클래스의 행동(이름 쓰기)을 나타내는데 사용된다.
생성자는 클래스의 새로운 인스턴스를 만드는 데 사용된다.
Instance(인스턴스)
인스턴스는 객체를 나타내는 클래스의 고유한 복사본이다.
클래스의 새 인스턴스가 생성되면, JVM은 해당 클래스의 인스턴스에 대해 메모리 공간을 할당해준다.
직접 해보자.
1. 자바 파일 컴파일
javac CommandTest.java
2. 바이트 코드 실행
java CommandTest
java -classpath ./ test.CommandTest
3. 바이트 코드 디컴파일
javap CommandTest.class
4. Javadoc 생성
javadoc CommandTest.java
자바의 동작 과정
자바의 동작 과정
Stack and Heap
Stack and Heap
Stack and Heap (GC)
Stack and Heap (GC)
https://danpatpang.github.io
Stack and Heap (GC)
https://danpatpang.github.io
https://danpatpang.github.io
Stack and Heap (GC)
https://danpatpang.github.io https://danpatpang.github.io
https://danpatpang.github.io
변수
“값을 저장할 수 있는 메모리 공간”
변수
일반 규칙
1. 대소문자를 구분할 수 있다.
2. 유니코드이므로 한글 변수가 가능하다.
3. 숫자로 시작할 수 없다.
4. 특수 문자는 _, $만 허용한다.
5. 예약어는 금지한다.
코딩 가이드 규칙
1. 클래스 이름의 첫 글자는 항상 대문자를 사용한다. (ex. class JavaExam01)
2. 여러 단어로 이루어진 변수의 이름은 카멜 표기법을 사용한다. (ex. numOfApple)
3. 상수는 전부 대문자, 띄어쓰기는 _로 대체한다.
주석
• //, /* */, /** */를 사용한다.
• javadoc을 활용하자!
• 유니코드를 주의하자!
어노테이션 설명
@author 작성자
@exception 메서드에서의 예외 확인
@param 메서드의 매개변수
@return 메서드의 반환 값
@see 다른 주제에 관한 링크
@since 릴리즈 기록
@throws 메서드에서의 예외
@version 클래스의 버전
comment.UnicodeExam
주석
데이터 타입
자바 데이터 타입
Primitive 타입 Reference 타입
boolean int char … Class Array Enum …
데이터 타입
타입 데이터 메모리 크기 범위
boolean 참과 거짓 1 Byte true, false
char 문자 2 Byte 유니코드 문자
byte
정수
1 Byte -128 ~ 127
short 2 Byte -32,768 ~ 32,767
int 4 Byte -2,147,483,648 ~ 2,147,483,647
long 8 Byte
-9,223,372,036,854,775,808 ~
9,223,372,036,854,775,807
float
실수
4 Byte -3.4E38 ~ 3.4E38
double 8 Byte -1.7E308 ~ 1.7E308
타입 변환
int num = 10000;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 0 1 0 0 0 0
byte num2 = (byte) num;
?
타입 변환
int num = 10000;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 0 1 0 0 0 0
byte num2 = (byte) num;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 0 1 0 0 0 0
타입 변환
int num1 = (int) (char) (byte) -1;
int num2 = (int) (short) (byte) -1;
System.out.println(num1);
System.out.println(num2);
?
String
일반적으로 문자들의 배열.
자바에서는 문자들의 배열을 나타내는 객체.
(메모리를 더 효율적으로 관리하기 위해!)
연산자
1. 증감 연산자
2. 산술 연산자
3. 비교 연산자
4. 비트 연산자
5. 논리 연산자
6. 대입 연산자
7. 삼항 연산자
연산자 우선 순위
우선 순위 연산자 내용
1(높음) ( ), [ ], . 괄호, 대괄호, 소수점
2 !(논리의 not), ~(비트의 not), +(양수), -(음수), ++, -- 단항 연산자
3 *, /, %(나머지 값)
산술 연산자
4 +, -
5 <<, >>, <<< 쉬프트 연산자
6 <. <=, >, >=
관계 연산자
7 ==, !=
8 &(AND)
비트 연산자9 ^(XOR)
10 |(OR)
11 &&(AND)
논리 연산자
12 ||(OR)
13 조건? A:B (조건이 참이면 A, 거짓이면 B를 실행) 삼항 연산자
14 =, +=, -=, *=, %=, <<=, >>=, &=, ^=, ~= 대입, 할당 연산자
연산자 사용법 설명
++ ++op1
op1++
op1 = op1 + 1
-- --op1
op1--
op1 = op1 – 1
증감 연산자
산술 연산자
연산자 사용법 설명
+ op1 + op2
- op1 - op2
* op1 * op2
/ op1 / op2
% op1 % op2 op1을 op2로 나눈 나머지
산술 연산자
operator.OperatorExam02
산술 연산자
자바의 산술 연산자는 int형
(단, 리터널연산의 경우 예외)
비교 연산자
연산자 사용법 설명
> op1 > op2 op1이 op2보다 큰 경우 true
>= op1 >= op2 op1이 op2보다 크거나 같은 경우 true
< op1 < op2 op1이 op2보다 작은 경우 true
<= op1 <= op2 op1이 op2보다 작거나 같은 경우 true
== op1 == op2 Op1과 op2가 같은 경우 true
!= op1 != op2 Op1과 op2가 다를 경우 true
비트 연산자
연산자 사용법 설명
& op1 & op2 비트 단위의 논리곱(AND)
| op1 | op2 비트 단위의 논리합(OR)
^ op1 ^ op2 비트 단위의 배타적 논리합(XOR)
~ ~op1 비트 단위의 보수(부정)
>> op1 >> op2 op1을 op2만큼 오른쪽으로 이동(부호 확장O)
<< op1 << op2 op1을 op2만큼 왼쪽으로 이동
(이동 시 빈칸은 0으로 채운다.)
>>> op1 >>> op2 op1을 op2만큼 오른쪽으로 이동(부호 확장X)
논리 연산자
연산자 사용법 설명
&& op1 && op2 op1과 op2 모두 true일 경우 true
|| op1 || op2 op1과 op2 중 하나라도 true일 경우 true
! !op1 op1이 true 이면 false, false이면 true
대입 연산자
연산자 사용법 설명
+= op1 += op2 op1 = op1 + op2
-= op1 -= op2 op1 = op1 - op2
*= op1 *= op2 op1 = op1 * op2
/= op1 /= op2 op1 = op1 / op2
%= op1 %= op2 op1 = op1 % op2
&= op1 &= op2 op1 = op1 & op2
|= op1 |= op2 op1 = op1 | op2
^= op1 ^= op2 op1 = op1 ^ op2
A += B와 A = A + B는 같은 것일까?
A += B와 A = A + B
(1) A += B
A = (Type) ((A) op (B))
Type은 A를 따라간다.
(2) A = A + B
A = A op B
자바의 기본 산술 연산은 int.
삼항 연산자
조건? 수식 1 : 수식 2;
- 조건이 true일 경우 수식 1 실행.
- 조건이 false일 경우 수식 2 실행.
삼항 연산자
결과는?
삼항 연산자
결과는? X88
1. 피연산자의 자료형이 같은 경우,
해당 자료형으로 결과를 낸다.
2. 피연산자가 int로 변환 가능한 상수라면,
수식 1의 자료형으로 결과를 낸다.
3. 위의 경우에 해당하지 않는 경우,
피연산자 중 큰 자료형으로 결과를 낸다.
Scanner
입력을 받을 때 사용하는 객체.
jdk1.5부터 추가.
java.util.Scanner에 위치.
메서드 설명
Next() 다음 토큰을 가져온다.
nextInt() 다음 int 토큰을 가져온다.
nextLine() 다음 라인을 가져온다.
hasNextLine() 다음 라인이 있으면 true.
Scanner
scanner.ScannerExam01, 02
결과는?
num 입력 : 10
str 입력 :
num : 10
str :
?
결과는?
Scanner.nextInt()
Scanner.nextLine()
10 n 10 n
n
if 문
condition.ConditionExam01
switch-case 문
condition.ConditionExam02
for 문
loop.LoopExam01, 02
for 문
loop.LoopExam01, 02
while 문, do while 문
loop.LoopExam03
배열
“같은 타입의 여러 변수를 하나의 묶음으로 다루는 것”
score[0] score[1] score[2] score[3] score[4]
int score[] 또는 int[] score로 선언
초기화 방법
1. int[] score = {1, 2, 3, 4, 5}
2. int[] score = new int[5];
3. int[] score;
score = new int[] {1, 2, 3, 4, 5};
배열의 초기 값
분류 데이터 타입 초기값
기본 타입(정수) Byte[]
Char[]
Short[]
Int[]
Long[]
0
‘u0000’
0
0
0L
기본 타입(실수) Float[]
Double[]
0.0f
0.0
기본 타입(논리) Boolean[] False
참조 타입 클래스[]
인터페이스[]
Null
Null
자바 코딩 스타일
- 오라클 자바 코딩 스타일 가이드
https://www.oracle.com/technetwork/java/codeconventions-150003.pdf
- 구글 자바 코딩 스타일 가이드
https://google.github.io/styleguide/javaguide.html
Q&A
감사합니다!

More Related Content

PDF
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
PDF
자바에서 null을 안전하게 다루는 방법
PPTX
자바스크립트 기초문법~함수기초
PPTX
자바스터디 3 2
PPTX
0.javascript기본(~3일차내)
PDF
자바 테스트 자동화
PPTX
MyBatis에서 JPA로
PDF
Java class
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
자바에서 null을 안전하게 다루는 방법
자바스크립트 기초문법~함수기초
자바스터디 3 2
0.javascript기본(~3일차내)
자바 테스트 자동화
MyBatis에서 JPA로
Java class

What's hot (18)

DOCX
Javascript 완벽 가이드 정리
PDF
Tcpl 14장 예외처리
PDF
Java lambda
PPTX
자바스크립트 함수
PPTX
프론트엔드스터디 E03 - Javascript intro.
PDF
니름: 쉬운 SOA 단위 테스트
PPTX
파이썬 플라스크 이해하기
PDF
Java extends
PDF
Java(2/4)
PPTX
프론트엔드스터디 E04 js function
PDF
Java(1/4)
PDF
Javascript 교육자료 pdf
PDF
학교에서 배우지 않는 C
PDF
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
PPTX
파이썬 함수 이해하기
PPTX
Javascript introduction, dynamic data type, operator
PDF
Java 변수자료형
PDF
알고리즘 시각화 라이브러리 ipytracer 개발기
Javascript 완벽 가이드 정리
Tcpl 14장 예외처리
Java lambda
자바스크립트 함수
프론트엔드스터디 E03 - Javascript intro.
니름: 쉬운 SOA 단위 테스트
파이썬 플라스크 이해하기
Java extends
Java(2/4)
프론트엔드스터디 E04 js function
Java(1/4)
Javascript 교육자료 pdf
학교에서 배우지 않는 C
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
파이썬 함수 이해하기
Javascript introduction, dynamic data type, operator
Java 변수자료형
알고리즘 시각화 라이브러리 ipytracer 개발기
Ad

Similar to Java tutorial (20)

PPT
자바야 놀자 PPT
PPTX
Programming java day2
PPTX
java_2장.pptx
PPTX
java_1장.pptx
PDF
Java_02 변수자료형
PDF
Java_01 기초
PDF
Java 기초
PPTX
java_1장.pptx
PPTX
java_1장
PDF
Java
PDF
Java programming pdf
PDF
Java 8 고급 (1/6)
PPTX
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
PDF
Java the good parts
PPTX
Java Class File Format
PPTX
Processing 기초 이해하기_20160713
PDF
Java 강의자료 ed11
PDF
Java advancd ed10
PPTX
[HaU] 신입 기술 면접 준비 java
PPTX
Just java
자바야 놀자 PPT
Programming java day2
java_2장.pptx
java_1장.pptx
Java_02 변수자료형
Java_01 기초
Java 기초
java_1장.pptx
java_1장
Java
Java programming pdf
Java 8 고급 (1/6)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
Java the good parts
Java Class File Format
Processing 기초 이해하기_20160713
Java 강의자료 ed11
Java advancd ed10
[HaU] 신입 기술 면접 준비 java
Just java
Ad

Java tutorial

  • 2. 소개 • Job : 4학년 • Email : puri8467@gmail.com • Blog : https://blog.naver.com/puri8467 • 발표 예제 : https://github.com/Danpatpang/javacafe
  • 3. 목차 1. 자바를 배워야 하는 이유 2. 자바의 역사와 변화 3. 자바의 동작 과정 4. 자바 기초 문법
  • 7. 자바를 배워야 하는 이유 1. 자바를 배우기 위한 수많은 자원 2. 많은 취업의 기회 3. 객체 지향 프로그래밍 언어 4. 자바는 오픈 소스 5. 풍부한 API 6. 강력한 개발 툴 7. 전세계적으로 사용 8. 커뮤니티의 훌륭한 지원 9. 실세계의 다양한 애플리케이션에서 사용 10. 배우기 쉬움 (C에 비해) https://www.youtube.com/watch?v=lh934b4ds-4
  • 8. TIOBE 프로그래밍 언어 사용 순위 https://www.tiobe.com/tiobe-index/
  • 10. 개발자 구인 현황 잡코리아 키워드 검색 결과 Computerjobs에서 조회
  • 11. 개발자 구인 현황 언어 잡코리아 사람in Java 5442건 2273건 C, C++, C# 4623건 1865건 Python 733건 646건 JavaScript 1708건 696건 PHP 1179건 807건 SQL 1947건 833건 <2019년 4월 2주차 기준>
  • 12. 자바가 아닌 다른 언어를 배워야 하는 이유 1. 자바가 주류 언어가 되기까지 - 오픈 소스 진영과의 불편한 동거 2. 오라클 시대의 자바, 자바스크립트의 반격 3. JCP를 통한 관리, 다른 언어에 비해 느린 발전 속도
  • 13. 자바의 역사와 변화에 대해 알아보자.
  • 14. 자바의 역사와 변화 1991년 Sun Microsystems사의 제임스 고슬링 외 4인이 개발 “Oak”. 1995년 “Java”로 명칭 변경. 2009년 Sun Microsystems가 오라클과 인수 합병. 2017년 Java EE 포기. 이클립스 재단에서 JakartaEE로 변경.
  • 15. C, C++와의 차이점 기존의 C에 객체지향 기능을 추가하여 C++을 만들어보자. → 포인터도 가져오고~ 객체지향도 추가하고~ → 이거 어떻게 만들어? 너무 복잡한데... → 좀 어색해... 처음부터 객체 지향으로 만들자. → 포인터 포기하자... 복잡해지면 안 돼!
  • 16. 플랫폼 독립적인 언어를 만들자! Write Once Run Anywhere! 자바의 철학
  • 17. 폭발적 성장 Tiobe 과거 프로그래밍 언어 순위
  • 18. 인터넷과 자바의 만남 자바의 세부 부분 개발되고 있을 무렵, WWW의 출현. (1991년 뉴스를 통해 대중화, 1993년 서버 수 50대 → 500대) 이식 가능한 언어를 찾습니다. (인터넷은 다양한 컴퓨터, OS, CPU로 넘쳐나는 광대한 분산 시스템) 가전 제품에서 인터넷으로 초점 변경.
  • 19. Java 주요 릴리즈 히스토리 Version Date Issues 1.0 1996년 1월 Oak로 출시, 1.0.2 버전부터 Java로 불리기 시작 1.1 1997년 2월 AWT, Inner class, JDBC, RMI, JIT 컴파일러, 유니코드 통합 1.2 1998년 12월 애플릿, Swing GUI, Collections 추가, J2SE 1.2로 표기 1.3 2000년 3월 HotSpot JVM, JNDI, JavaSound 추가 1.4 2002년 2월 정규 표현식, NIO, XML 파서 통합, IPv6 지원, Java Web Start 1.5 2004년 9월 Generics, Autoboxing/Unboxing, Enumerations, static imports 1.6 2006년 12월 Security, JavaSE 1.6으로 표기 1.7 2011년 7월 Multi Exception catch, Type Inference, Null safe Method invocation, String in Switch, Automatic Resource Management 1.8 2014년 3월 Lambda Expression, Streams, Method Reference 1.9 2017년 9월 Jshell, HTTP/2, private 인터페이스 메서드
  • 21. Java 에디션 분류 Java SE 자바 표준 에디션. Jakarta EE (구 JavaEE) 기업에서 운영하는 서버 페이지에 특화된 에디션. Java ME 임베디드 시스템 환경에 특화된 에디션. Java FX 데스크톱 앱 개발 및 배포를 위한 에디션. (GUI 라이브러리 제공)
  • 22. Jakarta EE(Java EE) 오라클 소프트웨어에서 2017년 8월 포스팅 2014년 10월 ~ 2016년 3월 오라클이 해결한 EE 이슈
  • 24. 자바 언어는 오픈소스로 누구나 무료로 사용할 수 있다. 오라클은 JDK 과금 방식을 변경했다. (영구 라이선스 → 구독 모델) 자바는 무료지만, JDK는 유료였다.
  • 27. 유료화에 대한 대응 1. 기존에 라이선스를 사서 구매하던 기업은 큰 변화 X. 2. 돈 내기가 부담스러운 기업은 OpenJDK를 사용. 3. 스타트업은 언어 변경.
  • 28. OpenJDK란? Java SE의 자유-오픈 소스 구현체. GPLv2 라이선스 + 추가 라이선스를 따르고 있다. 종류 : Oracle, Zulu, Red Hat, Red Hat, IBM, IntelliJ 등
  • 29. OpenJDK의 문제점 실제 적용 사례가 많지 않다. 호환성에 문제가 없는가? 오픈 소스이기에 참여자가 없으면 자연스럽게 죽는다. 문제가 생겼을 때 누가 처리하고 책임을 질 것인가? 안정성과 성능 차이는 없는가?
  • 31. 자바의 특징 1. 이식성이 높은 언어 2. 객체 지향 언어 3. 함수적 스타일 코딩 지원 4. 메모리 자동 관리 5. 다양한 애플리케이션에서 개발 가능 6. 멀티 스레드를 쉽게 구현 7. 동적 로딩 지원 8. 막강한 오픈 소스 라이브러리
  • 32. 자바의 동작 과정 Program OS Hardware 일반 프로그램 Java Program JVM OS Hardware Java 프로그램 VS
  • 33. 자바의 동작 과정 .java .class JVM 번역 바이트 코드 javac.exe (컴파일) java.exe (JVM)
  • 34. 직접 해보자. 1. 자바 다운로드 및 설치 https://www.oracle.com/technetwork/java/javase/downloads/ 2. 환경 변수 설정 https://macchiato.tistory.com/9 3. 제대로 설치됐는지 확인 java -version javac –version 4. 명령 프롬프트에서 java 명령어 실행
  • 35. JRE, JDK, JVM JRE(Java Runtime Environment) 물리적으로 존재하는 JVM을 구현하는 역할. 동작을 위한 라이브러리 + JVM JDK(Java Development Kit) JRE + 개발 툴 JVM(Java Virtual Machine) 추상적 머신. 바이트 코드가 실행될 수 있는 런타임 환경 제공.
  • 38. 클래스, 객체, 인스턴스 Object(객체) 실 세계의 객체는 상태와 행동이라는 2가지의 주요 특징을 가지고 있다. 사람은 이름, 나이와 같은 상태를 가지며 걷기, 자기와 같은 행동을 가진다. 자동차의 경우 현재 속도, 엔진과 같은 상태를 가지며, 브레이크 동작, 기어 변화와 같은 행동이 있다. 소프트웨어의 객체는 실세계의 객체와 개념적으로 유사하다. 둘 다 상태, 상태와 연관된 행동으로 구성되어 있다. 소프트웨어의 객체는 필드에 상태를 저장하고 메서드를 통해 행동을 노출시킨다. Class(클래스) 클래스는 객체를 만드는 데 사용되는 "템플릿" 또는 "청사진"이다. 기본적으로 클래스는 필드, 정적 필드, 메서드, 정적 메서드, 생성자로 구성이 된다. 필드는 클래스의 상태(학생의 이름)를 유지하는데 사용되며, 메서드는 클래스의 행동(이름 쓰기)을 나타내는데 사용된다. 생성자는 클래스의 새로운 인스턴스를 만드는 데 사용된다. Instance(인스턴스) 인스턴스는 객체를 나타내는 클래스의 고유한 복사본이다. 클래스의 새 인스턴스가 생성되면, JVM은 해당 클래스의 인스턴스에 대해 메모리 공간을 할당해준다.
  • 39. 직접 해보자. 1. 자바 파일 컴파일 javac CommandTest.java 2. 바이트 코드 실행 java CommandTest java -classpath ./ test.CommandTest 3. 바이트 코드 디컴파일 javap CommandTest.class 4. Javadoc 생성 javadoc CommandTest.java
  • 45. Stack and Heap (GC) https://danpatpang.github.io
  • 46. Stack and Heap (GC) https://danpatpang.github.io https://danpatpang.github.io
  • 47. Stack and Heap (GC) https://danpatpang.github.io https://danpatpang.github.io https://danpatpang.github.io
  • 48. 변수 “값을 저장할 수 있는 메모리 공간”
  • 49. 변수 일반 규칙 1. 대소문자를 구분할 수 있다. 2. 유니코드이므로 한글 변수가 가능하다. 3. 숫자로 시작할 수 없다. 4. 특수 문자는 _, $만 허용한다. 5. 예약어는 금지한다. 코딩 가이드 규칙 1. 클래스 이름의 첫 글자는 항상 대문자를 사용한다. (ex. class JavaExam01) 2. 여러 단어로 이루어진 변수의 이름은 카멜 표기법을 사용한다. (ex. numOfApple) 3. 상수는 전부 대문자, 띄어쓰기는 _로 대체한다.
  • 50. 주석 • //, /* */, /** */를 사용한다. • javadoc을 활용하자! • 유니코드를 주의하자! 어노테이션 설명 @author 작성자 @exception 메서드에서의 예외 확인 @param 메서드의 매개변수 @return 메서드의 반환 값 @see 다른 주제에 관한 링크 @since 릴리즈 기록 @throws 메서드에서의 예외 @version 클래스의 버전
  • 52. 데이터 타입 자바 데이터 타입 Primitive 타입 Reference 타입 boolean int char … Class Array Enum …
  • 53. 데이터 타입 타입 데이터 메모리 크기 범위 boolean 참과 거짓 1 Byte true, false char 문자 2 Byte 유니코드 문자 byte 정수 1 Byte -128 ~ 127 short 2 Byte -32,768 ~ 32,767 int 4 Byte -2,147,483,648 ~ 2,147,483,647 long 8 Byte -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 float 실수 4 Byte -3.4E38 ~ 3.4E38 double 8 Byte -1.7E308 ~ 1.7E308
  • 54. 타입 변환 int num = 10000; 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 0 1 0 0 0 0 byte num2 = (byte) num; ?
  • 55. 타입 변환 int num = 10000; 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 0 1 0 0 0 0 byte num2 = (byte) num; 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 0 1 0 0 0 0
  • 56. 타입 변환 int num1 = (int) (char) (byte) -1; int num2 = (int) (short) (byte) -1; System.out.println(num1); System.out.println(num2); ?
  • 57. String 일반적으로 문자들의 배열. 자바에서는 문자들의 배열을 나타내는 객체. (메모리를 더 효율적으로 관리하기 위해!)
  • 58. 연산자 1. 증감 연산자 2. 산술 연산자 3. 비교 연산자 4. 비트 연산자 5. 논리 연산자 6. 대입 연산자 7. 삼항 연산자
  • 59. 연산자 우선 순위 우선 순위 연산자 내용 1(높음) ( ), [ ], . 괄호, 대괄호, 소수점 2 !(논리의 not), ~(비트의 not), +(양수), -(음수), ++, -- 단항 연산자 3 *, /, %(나머지 값) 산술 연산자 4 +, - 5 <<, >>, <<< 쉬프트 연산자 6 <. <=, >, >= 관계 연산자 7 ==, != 8 &(AND) 비트 연산자9 ^(XOR) 10 |(OR) 11 &&(AND) 논리 연산자 12 ||(OR) 13 조건? A:B (조건이 참이면 A, 거짓이면 B를 실행) 삼항 연산자 14 =, +=, -=, *=, %=, <<=, >>=, &=, ^=, ~= 대입, 할당 연산자
  • 60. 연산자 사용법 설명 ++ ++op1 op1++ op1 = op1 + 1 -- --op1 op1-- op1 = op1 – 1 증감 연산자
  • 61. 산술 연산자 연산자 사용법 설명 + op1 + op2 - op1 - op2 * op1 * op2 / op1 / op2 % op1 % op2 op1을 op2로 나눈 나머지
  • 63. 산술 연산자 자바의 산술 연산자는 int형 (단, 리터널연산의 경우 예외)
  • 64. 비교 연산자 연산자 사용법 설명 > op1 > op2 op1이 op2보다 큰 경우 true >= op1 >= op2 op1이 op2보다 크거나 같은 경우 true < op1 < op2 op1이 op2보다 작은 경우 true <= op1 <= op2 op1이 op2보다 작거나 같은 경우 true == op1 == op2 Op1과 op2가 같은 경우 true != op1 != op2 Op1과 op2가 다를 경우 true
  • 65. 비트 연산자 연산자 사용법 설명 & op1 & op2 비트 단위의 논리곱(AND) | op1 | op2 비트 단위의 논리합(OR) ^ op1 ^ op2 비트 단위의 배타적 논리합(XOR) ~ ~op1 비트 단위의 보수(부정) >> op1 >> op2 op1을 op2만큼 오른쪽으로 이동(부호 확장O) << op1 << op2 op1을 op2만큼 왼쪽으로 이동 (이동 시 빈칸은 0으로 채운다.) >>> op1 >>> op2 op1을 op2만큼 오른쪽으로 이동(부호 확장X)
  • 66. 논리 연산자 연산자 사용법 설명 && op1 && op2 op1과 op2 모두 true일 경우 true || op1 || op2 op1과 op2 중 하나라도 true일 경우 true ! !op1 op1이 true 이면 false, false이면 true
  • 67. 대입 연산자 연산자 사용법 설명 += op1 += op2 op1 = op1 + op2 -= op1 -= op2 op1 = op1 - op2 *= op1 *= op2 op1 = op1 * op2 /= op1 /= op2 op1 = op1 / op2 %= op1 %= op2 op1 = op1 % op2 &= op1 &= op2 op1 = op1 & op2 |= op1 |= op2 op1 = op1 | op2 ^= op1 ^= op2 op1 = op1 ^ op2
  • 68. A += B와 A = A + B는 같은 것일까?
  • 69. A += B와 A = A + B (1) A += B A = (Type) ((A) op (B)) Type은 A를 따라간다. (2) A = A + B A = A op B 자바의 기본 산술 연산은 int.
  • 70. 삼항 연산자 조건? 수식 1 : 수식 2; - 조건이 true일 경우 수식 1 실행. - 조건이 false일 경우 수식 2 실행.
  • 72. 삼항 연산자 결과는? X88 1. 피연산자의 자료형이 같은 경우, 해당 자료형으로 결과를 낸다. 2. 피연산자가 int로 변환 가능한 상수라면, 수식 1의 자료형으로 결과를 낸다. 3. 위의 경우에 해당하지 않는 경우, 피연산자 중 큰 자료형으로 결과를 낸다.
  • 73. Scanner 입력을 받을 때 사용하는 객체. jdk1.5부터 추가. java.util.Scanner에 위치. 메서드 설명 Next() 다음 토큰을 가져온다. nextInt() 다음 int 토큰을 가져온다. nextLine() 다음 라인을 가져온다. hasNextLine() 다음 라인이 있으면 true.
  • 75. 결과는? num 입력 : 10 str 입력 : num : 10 str : ?
  • 81. while 문, do while 문 loop.LoopExam03
  • 82. 배열 “같은 타입의 여러 변수를 하나의 묶음으로 다루는 것” score[0] score[1] score[2] score[3] score[4] int score[] 또는 int[] score로 선언 초기화 방법 1. int[] score = {1, 2, 3, 4, 5} 2. int[] score = new int[5]; 3. int[] score; score = new int[] {1, 2, 3, 4, 5};
  • 83. 배열의 초기 값 분류 데이터 타입 초기값 기본 타입(정수) Byte[] Char[] Short[] Int[] Long[] 0 ‘u0000’ 0 0 0L 기본 타입(실수) Float[] Double[] 0.0f 0.0 기본 타입(논리) Boolean[] False 참조 타입 클래스[] 인터페이스[] Null Null
  • 84. 자바 코딩 스타일 - 오라클 자바 코딩 스타일 가이드 https://www.oracle.com/technetwork/java/codeconventions-150003.pdf - 구글 자바 코딩 스타일 가이드 https://google.github.io/styleguide/javaguide.html
  • 85. Q&A