2023.03.08

자바 기초부터 시작하세요!

자바가 뭐야 (객체 지향 언어)

컴퓨터 프로그램을 만들기 위한 프로그래밍 언어
실행 환경(JRE) + 개발 도구(JDK) + 라이브러리(API)
쉽고 빠른 애플리케이션 개발

Java는 어디에 사용됩니까?

PC 애플리케이션(IntelliJ, Eclipse)
웹 애플리케이션(스프링)
모바일 애플리케이션(안드로이드)
빅데이터(하둡)
게임(마인크래프트), 과학, 소형가전 등

왜 자바인가?

다양한 분야에서 적극 활용
20년 동안 프로그래밍 언어 부문 1, 2위(Java, C, C++, Python)
C++보다 배우기 쉽고 풍부한 학습 자료
Python보다 어렵지만 더 깊습니다.


최신 프로그래밍 언어(객체 지향 + 기능적)
취업에 유리함(실무에서 가장 많이 사용됨)

자바의 역사

JDK 1.0(1996) Java 개발 도구
J2SE 1.2(1998) 자바2(J2SE, J2ME, J2EE)
J2SE 5.0(2004) Java의 주요 기능 변경
JAVA SE 8(2014) Java의 표준 버전입니다.

(핵심)
JAVA SE 9~13 (6개월마다 최신버전 발표)

자바의 속성

배우기 쉬운 (객체지향 언어 = 프로그래밍 언어 + 객체지향 개념) (C++, JAVA, Python, JS)
자동 메모리 관리(Garbage Collector GC <= 메모리 정리)
멀티스레딩 지원(예: 채팅 중 파일 공유)
풍부한 라이브러리로 손쉬운 개발
운영 체제 독립적(JVM(Java Virtual Machine)을 통해 가능)

Java API 설명서 설치

자바 API란 무엇입니까?
– Java로 프로그램을 작성하는데 필요한 주요 기능을 미리 작성하여 제공
Java API 문서란 무엇입니까?
– JavaAPI에서 제공하는 기능에 대한 상세 정보 제공(HTML 파일)
Java API 설명서 설치
-www.oracle.com에서 압축 파일을 다운로드하고 압축을 풉니다.

자바 프로그램 만들기

1. javac.exe – 자바 컴파일러. 사람이 쓴 문장을 기계어로 번역
소스 파일(*.java)을 클래스 파일(*.class)로 변환합니다.


2. java.exe – 자바 인터프리터. Java 프로그램 실행(클래스 파일)
3. 클래스 – 자바 프로그램의 단위. Java 프로그램은 클래스로 구성됩니다.


모든 문은 클래스의 {} 안에 있어야 합니다.


4. Main Method – Java 프로그램의 시작점. 이 방법 없이는 실행할 수 없습니다.


public static void main(String() args){ <= 메인 메소드의 시작
} <= 기본 메서드의 끝 이클립스 사용
빌드 관련 메뉴 설명

빌드란 무엇입니까?
– 소스 파일(*.java)에서 프로그램을 만드는 전 과정
프로젝트 > 모두 빌드
-정섭이 모든 스터디 프로젝트를 구축합니다.


프로젝트 < 빌드 프로젝트
– 현재 프로젝트 빌드(변경된 소스 파일만 재컴파일)
프로젝트 > 청소
– 이전 빌드에서 모든 정보 지우기(모든 소스 파일을 다시 컴파일)
프로젝트 > 자동으로 빌드
– 소스 파일 변경 후, 저장할 때마다 자동 컴파일

이클립스 바로 가기

// 전체 키보드 단축키 목록 Ctrl+Shift+L
// 컨트롤+ +, –
// Ctrl+D 한 줄 삭제
// ctrl+alt+shift+down 한 줄씩 복사
// alt+shift+a 다중 열 편집
// alt+up, down 한 줄씩 이동
// Ctrl+i 자동 들여쓰기
// Ctrl+/ 주석 이동 -> 한 줄 주석
/* 여러 줄 주석 */ //”” 안에는 주석이 없습니다.


// Ctrl+스페이스바로 자동 완성

//print() – X 인쇄 후 줄 바꿈
//println() – 출력 후 줄 바꿈
print(“”) – “”의 모든 항목은 문자로 표시됩니다.


print(+,-,*,/) – () 안의 산술을 계산하고 인쇄합니다.

변수란 무엇입니까?

전환할 수 있습니까?
값을 저장할 수 있는 메모리 공간(RAM)

변수 선언

변수를 선언하는 이유
– 데이터 저장 공간 제공

변수를 선언하는 방법
-변수형 변수명;
-예) in-age ; // Integer(int) 유형의 변수 age를 선언합니다.

변수 값 저장

변수에 값 저장(‘=’는 등호가 아니라 할당임)
-정수 ; // Integer(int) 유형의 변수 age를 선언합니다.


age = 25 // 변수 age에 25를 저장

변수의 초기하 – 처음으로 변수에 값 저장
-int x = 0; // 변수 x 선언 후 0으로 초기화
– 정수 y = 5; // 변수 y 선언 후 5로 초기화
-int x = 0, y-5; // 상단 두 줄을 한 줄로

변수 유형(나중에 자세히 설명)

클래스 변수
인스턴스 변수
지역 변수(주의, 지역 변수는 읽기 전에 초기화해야 합니다!
)

변수 값 읽기

변수의 값이 필요한 변수의 이름을 적습니다.


-int 연도=0, 연령=14;
연도 = 연령 + 2000;
연도 = 14 + 2000;
연도 = 2014
나이 = 나이 + 1
연령 = 14 + 1
나이 = 15
System.out.println(나이); – 화면에 15가 표시됩니다.

변수 유형

변수의 유형은 저장하는 값의 유형에 따라 결정됩니다.


-int 나이 = 25 ;
나이 = 3.14 ; << 변수형이 정수인데 실수라서 에러가 난다.

저장하려는 값의 유형과 일치하는 유형으로 변수를 선언하십시오.
-char ch = // char는 문자 유형입니다.


double pi = 3.14 // double은 실수입니다.

값의 유형

8가지 기본 유형
값(데이터) 문자(문자 abc) – 문자
숫자 정수(0~) – byte, short, int, long
실수(예: 3.14) – float, double
논리 – 부울(참, 거짓)

변수, 상수 및 리터럴

변수 – 단일 값을 저장하는 장소
상수 – 값을 한 번만 저장할 수 있는 변수
문자 그대로 – 그 자체로 가치를 나타내는 것
정수 점수 = 100;
점수 = 200;
최종 int MAX = 100; // MAX는 상수입니다.


최대 = 200; // 실수
문자 ch=”A”;
문자열 str = “abc”;

리터럴 접두사 및 접미사

일종의 문자 접미사
논리형 false, true 없음
정수형 123,0b0101,100L L(Long)
상수 유형 3.14, f(float), d(생략 가능)
문자 유형 ‘A’, ‘1’ 없음
문자열 “ABC”, “123”, “A” 없음
전)
부울 거듭제곱 = 참;
문자 ch=”A”;
문자열 str = “ABC”;
바이트(-128 ~ 127) b = 127; (정수형)
바이트 b = 128; 실수
정수 i = 100; // 십진수
정수 10월 = 0100; // 8진수
정수 16진수 = 0x100; // 16진수 0b // 2진수
긴 l = 10_000_000_000L; // 20억을 초과하므로 L을 추가해야 함
긴 l = 100; // 확인은 생략 가능
수영 선수 f = 3.14f; 생략할 수 없다
더블 d = 3.1.4; 빠질 수 있다

10. = 10.0 // 실수
.10 = 0.10 // 실수
10f = 10.0f // 실수
1e3 = 1000.0 // 실수 e= 10의 n승.

변수와 리터럴 간의 유형 불일치

범위가 변수 > 리터럴인 경우 OK
예) int i = ‘A’; // 정수 > 문자
긴 l = 123; // 긴 > 정수
더블 d = 3.14f; // 더블 > 플로트

범위 변수 < 리터럴인 경우 오류
예) int i = 30_000_000_0000; // int 20억 범위 밖
긴 l = 3.14f // 긴 < 플로트
수영 선수 f = 3.14 ; // 플로트 < 더블 Int 리터럴은 byte 및 short 변수에 저장할 수 있습니다.


예) Byte b = 100 // 바이트 영역에 속함

문자 및 문자열

문자 ch=”A”; // 소식
문자 ch=”AB”; // 실수
문자열 s = “ABC”; // 끈
문자열 s = “A”; // 하나일 수 있음
문자열 s = “”; // 빈 문자열
문자 ch=””; // 실수

문자열 s1 = “AB”; // String은 클래스이지만 new 연산자를 사용할 필요는 없습니다.


문자열 s2 = 새 문자열(“AB”);

문자열 연결

문자열 s1 = “A” + “B”; // “떨어져 있는”
“” + 7 = “” + “7” => “7”
숫자 >> 문자열
“”+7+7 >>> “7”+7 >>> “7” + “7” >>> “77”
7+7+”” >> “14”

두 변수의 값을 교환

정수 x = 10, y = 20;
x = y; // x의 값이 20이 되면 y의 값을 x에 저장
y=x; // x의 값을 y에 저장 이 경우 둘 다 20이 됩니다.


나는 그 일에 대해 유감이다.

정수 x = 10, y = 20;
정수 시간; // 빈 컵

tmp = x; // x의 값을 tmp에 저장
x = y; // y의 값을 x에 저장
y = tmp; // tmp에 저장된 x 값을 y에 저장

값의 유형

값 -문자 -문자
-숫자 -정수 -byte short int long
– 실수 – float double
-논리 부울 -true
-잘못된

원시 유형
-8 위
– 현재 값 저장

참조 유형
– 기본형 외(String, System)
– 메모리 주소 저장(4바이트 또는 8바이트)
오늘 날짜; // 참조 변수를 오늘 선언합니다(객체 주소 저장).
오늘 = 새로운 날짜(); // 오늘 객체의 주소 저장

기본 유형 및 크기

논리적 유형 – “참” 또는 “거짓” 값을 가지며 조건식 및 논리 계산에 사용됩니다.


문자 유형 – 문자를 저장하는 데 사용되며 변수당 하나의 문자만 저장할 수 있습니다.


정수 유형 – 정수 값을 저장하는 데 사용됩니다.

가장 일반적으로 사용되는 것은 int와 long입니다.


바이트는 바이너리 데이터를 처리하는 데 사용되며,
c언어와의 호환성을 위해 short가 추가되었습니다(사용하지 않음).
real – 실제 값을 저장하는 데 사용됩니다.

플로트와 더블이 있습니다.

부울, 바이트는 1바이트, 8비트
char, short는 2바이트, 16비트
정수, 부동 소수점: 4바이트, 32비트
long과 double은 8바이트, 64비트입니다.

바이트 b;
b = 3 ; // 00000011(2진수로 3을 나타냄)

n비트로 표현할 수 있는 값의 수: 2의 n승.
n 비트로 표현할 수 있는 부호 없는 정수의 범위: 0에서 2의 거듭제곱 n -1
n 비트로 표현할 수 있는 부호 있는 정수의 범위: -(2의 n-1 거듭제곱) ~ (2의 n-1 거듭제곱)-1

형식화된 출력 – printf()
pringtf()의 단점 – 출력 형식을 지정할 수 없음
1. 실수의 자릿수를 조정할 수 없습니다.

소수점 이하 n 자리만 출력하려면 어떻게 해야 합니까?
2. 10진수만 출력 – 8진수와 16진수는 어떻게 출력되나요?
0x 또는 0

출력 형식은 printf()로 지정할 수 있습니다.


예) System.out.printf(“%.2f (소수점 둘째자리까지)”, 10.03); // 3.33
System.out.printf(‘%d'(십진수), 9x1A); // 26
System.out.printf(‘%X’ (8진수), 0x1A); // 1A

printf()의 지시어
%b – 부울 형식으로 인쇄
%d – 10진수 정수 형식으로 출력
%o – 8진 정수 형식으로 출력
%x, %X – 16진수 정수 형식으로 출력
%f – 부동 소수점 형식으로 출력
%e, %E – 지수식 형식으로 출력
%c – 문자로 출력
%s – 문자열로 출력
전)
System.out.printf(“나이:%d year:%d%n , 14, 2017); // 나이:14 year:2017

예외 바이너리로 출력
System.out,printf(“%s”, Integer.toBinaryString(15)); // 1111 바이너리 출력


클래스 Ex2_9 {
공개 정적 무효 메인(String() args) {
문자열 URL = “www.codechobo.com”;
수영 선수 f1 = .10f; // 0.10, 1.0e-1
수영 선수 f2 = 1e1f; // 10.0, 1.0e1, 1.0e+1
수영 선수 f3 = 3.14e3f;
더블 d = 1.23456789;
System.out.printf(“f1=%f, %e, %g%n”, f1, f1, f1);
System.out.printf(“f2=%f, %e, %g%n”, f2, f2, f2);
System.out.printf(“f3=%f, %e, %g%n”, f3, f3, f3);
System.out.printf(“d=%f%n”, d);
System.out.printf(“d=%14.10f%n”, d); // 총 14자리 중 소수점 이하 10자리
System.out.printf(“(12345678901234567890)%n”);
System.out.printf(“(%s)%n”, url);
System.out.printf(“(%20s)%n”, URL);
System.out.printf(“(%-20s)%n”, url); // 왼쪽 정렬
System.out.printf(“(%.8s)%n”, URL); // 왼쪽부터 8글자만 출력
}
}

결과
f1=0.100000, 1.000000e-01, 0.100000
f2=10.000000, 1.000000e+01, 10.0000
f3=3140.000000, 3.140000e+03, 3140.00
d=1.234568
d = 1.2345678900
(12345678901234567890)
(www.codechobo.com)
( www.codechobo.com)
(www.codechobo.com)
(www.코드)