2023.02.14 14일차 Java
1. Java
자바 웹 어플리케이션
client쪽에서 작성되는 언어를 배웟다. html css+부트스크랩 js+jquery
jsp에서 한번더 할이야기가 잇음.
서버의 언어 java
자바는 한번에 알기가 어렵다.
1.1 프로그래밍 언어를 왜 배우는가?
우리가 누군가에게 일을 시킨다고 생각해보자.
우리-> 레시피 ->요리사
레시피를 작성하면 요리사는 레시피보고 일을 할것임. 해야할일을 잘적어서 건네줘야한다.
그런데 요리사가 외국인임. 요리사에 한글을 가르치고 한글로 적어주거나 외국어로적어줘야댐
우리 ->컴퓨터인데 컴퓨터 언어로 전달하거나 컴퓨터가 우리말을 배우거나이다.
컴퓨터는 문자가 0, 1뿐이다. 우리가 레시피를 작성한다는 것은 010101110 근데 이게 너무어렵다.
중간에 레시피를 작성하고 컴퓨터가 알아듣는 언어 번역하는 과정을 두기로함.
그래서 작성하는 언어를 잘알면된다. 번역하기쉽도록 언어를 작성하는 규칙을 알아야하는데 이 언어가 java c python javascript등이잇다.
이중에 java를 배운다. 책이 레시피를 작성하는 문법이다.
번역하는 일을 컴파일이라고 한다. 컴파일해주는 프로그램을 컴파일러라고 한다.
그런데 기계어도 기계마다 다르다. 맥 윈도우 등등
자바이전에는 컴파일러가 맥용소스파일 윈도우용 소스파일 등등이 필요햇다.
자바 소스파일.java -> 바이크코드 파일 .class ->윈도우jvm에서 실행 or 맥 가상머신실행
바이트코드가 각 자바 가상머신에서 일할수잇게 같은일을 또할필요없이 만들어주엇다.
1.2 자바작성해보기
이클립스 사용이전 메모장으로 작성해보자.
Hello.java 소스파일 작성 -> 클래스파일로 변경 cmd창에 javac Hello.java ->Hello.class로 변환됨
이 과정이 번거로우니 이걸 쉽게 해주는 것이 이클립스이다.
package ch01.sec09;
public class Hello {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}또 다시 Hello World
이클립스는 저장할때마다 컴파일 해준다. 문제가잇으면 표시를 해준다.
클래스명 = 소스파일명
1.3 주석
이클립스의 주석에는 3가지가 있다.
//행주석
/* */범위주석 여러줄 주석
/** */ 도큐먼트주석 javadoc명령어로 API도큐먼트를 생성하는데 사용한다. 우리가 사용할일은 별로없지만 이미 사용되어있는 경우가 많다.
클래스위나 메소드위에 작성되고 문서화 되는 주석 편하라고 보여주는 주석임.
html문서를 만들어내는 주석
package ch01.sec11;
/**
* @atuhor 춘핑이
*/
/*
장제목 : 1장 자바시작하기
작성일 : 2023.02.14
*/
public class Hello {
//프로그램 실행 진입점
public static void main(String[] args) {
//콘솔에 출력하는 실행문
//단축키 : 컨트롤 + /
System.out.println("Hello, Java");
}
}프로그램에 영향x 명령문이 지우긴 아깝고 할때 사용 등등
1.4 단축키
jvm이 실행시킬때 main메소드 안에 있는 것을 가장먼저 실행시킨다.
main메소드를 당분간 무조건 작성한다. main치고 컨트롤 스페이스하면 알아서 생성해줌.
sysout 컨트롤스페이스하면 System.out.println();완성해줌.
주석 ctrl + /
실행 ctrl + f11
창크기 ctrl + m
한줄 지우기 ctrl + d
줄 옮기기 alt + 방향키
힌트 얻기 ctrl + space
등등
1.5 실행문과 세미콜론
각 명령문은 ;으로 끝남 자바에서는 무조건 작성해줘야함.
또한 여러가지 실행문을 세미콜론으로 구분해서 한줄로 작성할 수도 있지만 거의 사용x
명령문은 순서대로 실행된다.
package ch01.sec12;
public class Calculator {
public static void main(String[] args) {
int x = 1; // 변수x를 선언하고 1을 저장
int y = 2; // 변수 y를 선언하고 2를 저장
int result = x + y; // 변수 result를 선언하고 x와 y을 더한 값을 저장
System.out.println(result); // 콘솔에 출력하는 메소드 호출
}
}프로젝트 우클릭 -> Team - Share Project
master뜨면됨
ignore all.classfiles -> class파일 class파일은 커밋할필요가 없다.
2. 변수와 타입
2.1 변수
값을 담을 수 이름이 있는 공간
저장공간이다.
변수선언 -> 타입 변수명;
int age;
double average;
변수명 법칙 : 영문대소문자, _, $, 숫자 조합으로 작성가능하다. 숫자로 시작하면 안된다.
변수명 작성관습 : loewrCamelCase
int $;
int _; //단독사용 불가
int hello;
int your_age; //관습에 따르지 않음
int h3;
int 3h; 숫자시작불가
int yourAge; //ok
int 나이; //사용하지 말것
변수는 한번에 여러개 선언이 가능하다.
int myAge, hisAge;
같은 이름의 변수 선언은 불가능하다.
int hi;
int hi; ->불가능
변수에 값대입(할당) : =
hi = 3;
int var1;
var1 = 99;
변수 선언, 값대입 한번에 가능하다.
int var2 = 100;
값을 할당하지 않은 변수, 초기화하지 않은 변수는 사용불가하다.
int var5;
System.out.println(var5); //오류 발생
변수명 작성시 어떤 값을 갖는지 알아볼 수 있게 작성해야한다.
int koreanScore;
int ks; //이렇게 하지말자
변수 ctrl + 1 눌러서 rename하면 파일내의 변수들을 한번에 다 바꿀 수 있다.
코드수정 힌트 얻기 : ctrl + 1
줄맞추기 : ctrl + shift + f
2.1.1 변수 사용하기
public static void main(String[] args) {
int myHour = 3;
int min = 5;
System.out.println(myHour + "시간 " + min + "분");
int totalMinute = (myHour * 60) + min;
System.out.println("총 " + totalMinute + "분");
}2.1.2 변수 뒤바꾸기
변수의 값을 서로 값을 변경해보자
public static void main(String[] args) {
int x = 3;
int y = 5;
//코드 작성
int temp = x;
x = y;
y = temp;
System.out.println(x); //5
System.out.println(y); //3
}temp변수를 만들어서 옮겨놓고 옮기기 상자안에 값을 가지고 있기때문이다.
temp라는 박스에 x값을 옮겨두고 y값을 x에 넣은 후 y에 temp값을 꺼내서 넣기
2.2 타입
자바는 정수, 실수, 논리값을 저장할수 있는 기본타입 8개를 가지고 있다.
java의 data type(자료형)
1.기본타입(primitive type)
8개
(정수) byte, short, int, long
(문자/정수) char
(실수) float, double
(논리) boolean
2.참조타입(reference type) - 5장에서
기본타입뻬고 모든 것(무한히 많음)
자바스크립스트는 값이 들어갈때 타입이 결정되엇는데 이것이 차이점이라고 할 수 있다.
자바는 변수 선언시 사용된 타입의 값만 변수에 할당(대입) 가능하다.
int a;
a = 222; //가능
//a = "222" 불가능
정수형
byte (1 byte , 8bits)
short (2 bytes, 16bits)
int (4 bytes, 32bits)
long (8 bytes, 64bits)
bit란 불을껏다 켯다 0 1 두가지를의미한다.
2.2.1 byte
원래는 다음 과 같다.
가장 작은 값 : 00000000 (0)
가장 큰 값 : 1111111 (255)
-> 음수 표현하기 위해 맨앞 칸을 부호 칸으로 한다. 0이면 0혹은 양수 1이면 음수로 한다.
가장 작은 값 10000000 (-128)
가장 큰 값 01111111(127)
총 256개 숫자 표현가능
byte var1 = -128;
byte var2 = -30;
byte var3 = 0;
byte var4 = 30;
byte var5 = 127;
//byte var6 = 128; 컴파일에러(type mismath : cannot convert frm int to byte)메모리가 제한된 디바이스의 경우 이 범위안의 수만 사용가능하면 공간을 줄일 수 있어서 좋음.
이진법으로 저장된다는 것을 이해하자.
2.2.2 short
2 bytes, 16bits
가장 작은 값 : 1000 0000 0000 0000 (-32768)
가장 큰 값 : 0111 1111 1111 1111 ( 32767)
short s1;
s1 = 0;
s1 = 32767;
s1 = -32768;
//s1 = 32768; 불가능
//s1 = -32769; 불가능2.2.3 int
4 bytes, 32bits
가장 작은 값 :-2147483648
가장 큰 값 :2147483647
int i1 = -2147483648;
i1 = 2147483647;
//i1 = 2147483648; 불가능
//i1 = -2147483649; 불가능2.2.4 long
8 bytes, 64bits
자바에서 정수로 쓴값은 Integer로 인식을 한다. int가 표현할 수있는 범위를 적는 건 가능한데 더 커지면 컴파일에러가 발생한다.
long타입임을 알려주려면 숫자 끝에 L or l을 붙여줘야한다.
소문자는 1로 오해가능해서 잘사용안한다.
long l1 = 3000000000L; //Long타입 수는 끝에 (L, l)을 붙임 소문자는 1로 오해가능해서 잘사용x
l1 = 999827341974192L;숫자가 너무 길어서 읽기 불편하면 중간에 _를 삽입할 수 있다.
l1 = 999_827_341_974_192L;
2.2.5 Overflow
범위를 넘어갈때
int il = 2147483647;
il + 1하면 넘쳐흘러버리면 overflow해버리면? 음수가 되어버린다.
따라서 사용할때 어떤 범위를 사용할지 잘 결정해야한다.
2.3 문자 타입
char(문자) character 앞의 4자리에서 따옴
하나의 문자 값 저장
2bytes (16 bits)
0 ~ 65535 unicode를 사용한다.
코드로 저장이 된다.
char c1 = 65261;
System.out.println(c1); // ﻭ
char c2 = 8594;
System.out.println(c2); // →
char c3 = '\u53f8'; //유니코드로 직접 저장
System.out.println(c3); // 司char c1 = 'A'; //문자저장
char c2 = 65; //유니코드 직접저장
char c3 = '가'; //문자저장
char c4 = 44032; //유니코드 직접 저장
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
System.out.println(c4);2.4 실수타입
실수에는 float(4 bytes), double(8 bytes)가 있다.
double d1 = 3.14;
d1 = 99.9999;
d1 = 3;
d1 = 99;java코드에서 실수로 표현하면 double로 인식한다.
float f1 = 3.14; 하면 8바이트를 4바이트에 넣으려하면 에러가 발생함.
float f1 = 3.14F; F, f 끝문자로 float literal 표현해줘야한다.
f1 = 3; //얘는 정수라 된다.
실수를 저장할때는 왠만하면 double타입으로 그냥 사용하자.
!!!사용시 주의할점!!!
컴퓨터는 10진법을 2진법으로 바꿔서 저장한다.
10진법으로는 딱 떨어지는 값을 2진법으로는 떨어지게 못하는 경우가 있다.
그래서 컴퓨터는 근사 값으로 저장을 한다.
double d2 = 0.1;
double d3 = 0.2;
double d4 = d2 + d3;
System.out.println(d4); //0.30000000000000004실수로 연산시 연산결과가 다를 수 있다는 것을 알고 있어야 한다.
금융권, 과학에선 이런 오차가 문제가 생길 수 있는데 거기선 거기의 해결방법이 있다.
public class FloatDoubleExample {
public static void main(String[] args) {
//정밀도확인
float var1 = 0.1234567890123456789f;
double var2 = 0.1234567890123456789;
System.out.println("var1: " + var1); // 0.12345679
System.out.println("var2: " + var2); // 0.12345678901234568
//10의 거듭제곱 리터럴
double var3 = 3e6;
float var4 = 3e6F;
double var5 = 2e-3;
System.out.println("var3: " + var3); //3000000.0
System.out.println("var4: " + var4); //3000000.0
System.out.println("var5: " + var5); // 0.002
}
}실수타입은 정교한 작업을 하기 어렵다. 여기에선 민감한 문제가 아니니 일단 넘어가면된다.
3e6 3*10^6한것임. 지수표현법이렇게 할수도있다.
2.5 논리타입
boolean (1byte)
true / false
boolean b1 = true;
boolean b2 = false;
b1 = false;
b2 = true;조건문 반복문 등에 사용한다.
boolean stop = true;
if(stop) {
System.out.println("중지합니다."); //중지합니다.
} else {
System.out.println("시작합니다.");
}
int x = 10;
boolean result1 = (x == 20); //변수 x의 값이 20인가?
boolean result2 = (x != 20); //변수 x의 값이 20이 아닌가?
System.out.println("result1:" + result1); //false
System.out.println("result2:" + result2); //true2.6 문자열 타입
String 참조타입이지만 기본타입만큼 자주 사용된다.
문자열 저장
String s1;
s1 = "hello world";
s1 = "h";
s1 = "";
char c1 = '가';
//s1 = c1; 불가능문자열은 "" 문자는 ''에 저장한다. 구분해서 작성해야한다.
String s2 = "i am \"ironman\""; 큰따옴표안에 큰따옴표를 사용하고싶다면 역슬래쉬(\)사용해야한다.
\t 출력시 탭만큼 띄우기 \n출력시 줄바꿈(라인피드) \r 출력시 캐리지 리턴
text block """ """안에 넣으면 문자 그대로 표현된다.
첫번째 엔터 무시하고 가장 작은 들여쓴 줄이 들여쓰기 기준이다.
들여쓰기 조절을 하고싶다면 마지막 """를 조절해서 들여쓰기를 조절하자.
그대로 들어가기때문에 안쪽에 "나 '도 그냥 들어갈 수잇다.
버전에 따라 다르므로 확인하고 사용하자.
String s6 = """
<h1>
'hello'
<span>"world"</span>
</h1>
""";텍스트블록안에서 역슬래쉬 넣으면 한줄로 표현된다.
"""
hello
world
"""
->hello world
2023.02.14 후기
드디어 java를 시작한다. java의 기초부터 다시 답습하게 될 것이다.
기초가 단단해야 나중에 프로그래밍을 할 수 있을 것이다.