일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 모두를 위한 컴퓨터 과학
- w3schools
- til
- 모두를 위한 컴퓨터 과학(CS50)
- java
- SSAFY 9기
- WebProgramming
- CS 기초지식
- 데이터베이스 모델링
- CS기초지식
- 면접을 위한 CS 전공지식 노트
- Java Programming
- edwith
- 상속
- Compute Science
- Computer Science
- ssafy
- SW
- 부스트코스
- 삼성청년SW아카데미
- 이진법
- ERD
- CS 기초
- CS50
- 관계형 데이터베이스
- 알고리즘
- 예외처리
- 객체지향
- exception
- 기초프로그래밍
- Today
- Total
Joslynn의 하루
대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 - 2일차 노트 정리_220719 본문
대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 - 2일차 노트 정리_220719
Joslynn 2022. 7. 19. 17:27Java
: java의 확장자 = .java (class 이름과 대문자까지 동일해야 함)
: class이름(첫 글자는 항상 대문자 = class Test), method 이름, 변수 이름 (identifier 규칙 - 중복되는 것 없이 이름 만들어내야 함)
: 객체 지향 언어 - 객체 = object = class (비슷한 의미)
: 모든 객체들은 속성(객체를 만들기 위한 요소들)과 기능을 가짐
*속성 = field = 전역 변수 = 맴버필드
*기능 = 메소드(method) -> 다른 언어에서는 함수(Function)라고 표현하기도 함
속성과 method 이름의 첫 글자는 소문자
: method (){}는 괄호 열림 및 닫힘
1. 컴파일: .java는 실행 파일이 아님(하나의 틀에 불과), java 파일이 문법적 오류가 없는지 검증하는 단계 = 소스를 오류 check = 오류가 없으면 ~.class라는 byte 코드 생성
javac.exe
실행 파일들은 bin이라는 파일에 모여 있음
path를 잡는 것 = bin에 있는 실행 파일을 매번 찾는 수고로움을 더는 것
파일 이름: Test.java - cmd 창
Test.java를 컴파일하면 Test.class 파일이 생김
2. 실행
java.exe, 파일 이름.class
하나의 class의 실행을 위해 필요한 기본 method가 있음 = main method
실행은 시작점인 main에서 시작해서 main에서 끝남
- java는 컴파일 언어이면서, 인터프리터 언어: 전체 줄을 한 번에 해석 but 오류를 순차적으로 띄움
*컴파일 언어: 전체 줄을 해석해서, 오류를 띄움
*인터프리터 언어: 한줄 해석하고 오류를 띄우는 방식, 오류를 순차적으로 하나씩 띄움
: 자바의 실행 순서는 호출되어지는 순서대로 진행, 컴파일은 첫째줄부터 순차적으로 진행
: 오류는 가장 먼저 난 오류부터 고치고 컴파일 해보는 방식으로 순차적으로 오류를 해결해야 함, because 중간에 난 오류는 위의 오류때문에 일어났을 확률이 높음
객체 지향 언어: 필요한 것들이 이미 제공되어짐, 가져다가 쓰는 방식
JDK 11 > JRE > API > JVM로 구성
JDK: 컴파일에 필요한 요소들이 담겨있으며, 아래의 것들을 모두 포함
JRE: Run time Edition (실행 환경을 구축 - 실행만 가능), 컴파일 기능이 빠져 있음
API: class들의 package
JVM: 메모리 관리, 실행 파일을 하드웨어(운영체제)에 올려서 실행될 수 있도록 하는 역할
1) java는 garbage collection이 자동으로 일어남
2) java는 운영 체제에 독립적 - 어느 운영체제에서 만들어도 모든 운영체제에서 실행 가능
Java 분야 및 플랫폼(운영체제)
1) 응용 - java SE
2) 웹 - java EE (반응형 웹 - 화면의 해상도에 따라 화면의 UI가 바뀜, Ex> 모바일 환경에서 웹 화면이 달라짐)
3) 모바일 - java ME
Java의 변천사
: java는 기본적으로 웹에서 돌아가는 프로그램을 작성할 수 있음 (Applet)
- ~.java(응용 프로그램)로 작성을 해서 ~.html(웹에서 지원하는 언어) 문서를 만들어 <applet clas="" />를 이용해서 브라우져에서 실행할 수 있음 - 2000년대 전에 사용을 했음
- 완벽하게 자바로 작성해서 실행만 html로 하는 것으로 자바를 모르면 할 수 없음
개발자와 디자이너 간의 협업이 어려움
: 2000년대에 오면서 웹의 시장이 확대
- Servlet이 탄생
- Servlet은 ~.java 문서 안에 html, css, javaScript를 그대로 사용할 수 있음
확장자가 java기 때문에 컴파일하고 실행이라는 단계를 진행 해야 하기 때문에 디자이너들이 쉽게 사용하기 어려움
이 시기에 웹의 규모는 작으면서 빠르게 웹을 개발해야 하는 시기
→ 더 쉽게 작성 할 수 있는 Asp 또는 php에 비해 인기가 없었음
→ 자바 시장에서 asp와 php와 비슷한 JSP를 탄생
- JSP(Java Server Pages)는 마크업 중심(like html, css, javaScript)의 코드 안에 자바 코드를 사용
→ 디자이너들이 쉽게 디자인 할 수 있어서 협업에 좋음
* 한동안 빠르게 JSP로 빠르게 웹을 개발하였으나 유지보수와 확장성, 생산성의 어려움으로 요즘은 디자인패턴을 적용한 개발을 함
* 결국 MVC 구조로 개발 → View: JSP(동기화 통신)에서 HTML, CSS, Angular.js, React.js, Vue.js(비동기화 통신) 주로 사용
Java 문법
1) 대소문자 구분
2) 한 문장은 세미콜론으로 끝남
3) 주석(comment)
//: 한줄 주석
/*~*/: 여러 줄 주석, 부분 주석
/**~*/: Document(사전) 주석, 앞의 두 유형과 달리 나만 보기 위한 용도가 아님, 타인에게 설명을 공유하고 싶을 때, 사용, 협업을 위한 주석
4) {}: class, method 표현
[] qoduf
(): method
5) ''(char) / " "(String) - java에서 대문자는 무조건 class!!
7) Identifier
class 이름, method 이름, 변수 이름을 의미 = 프로그래머가 만들어내는 이름들
* 작성 규칙
- class 이름의 첫 글자는 대문자로 시작
- method 이름, 변수 이름의 첫 글자는 소문자로 시작
- 예외: 상수(고정값)는 대문자로 시작 ↔ 변수(변하는 값)
- 두 단어의 합성으로 이름이 명명될 경우, 두 번째 단어의 첫글자를 대문자로 하고 constant는 _를 이용하여 두단어를 붙이게 한다
- Unicode 지원 가능 (한글 사용 가능한 이유) - 2 byte 차지
\uxxxx → ex) \u0061 - a
Ex> 사용자 이름 선언
1) 클래스 → UserName
2) 메소드 → userName()
3) 변수 → userName
4) 상수 → USER_NAME (변수와 구분하기 위해 전체 대문자로 작성 및 단어 구분을 위한 언더바 사용)
예제1)
System: class, out: 변수, print: method
* 구분 방법*
System - 대문자로 시작 : class
out - 소문자로 시작 및 뒤에 () 붙지 않음 : 변수
print() - 소문자로 시작 및 뒤에 괄호 : method
System.out.print (커서가 바로 옆에 붙음)
System.out.println (커서가 다음 줄로 넘어가도록 해주는 method)
변수(Variable)
- 데이터를 저장하는 그릇(공간)
- 한가지 Type에는 한가지 값만 저장 가능
변수 선언 방법
1. Datatype(자료형) 변수 이름;
변수 이름 = 낙타 표기법, 소문자로 시작
2. DataType(자료형) 변수 이름 = 값;
*java: = 대입연산자 / 오른쪽의 값을 왼쪽에 대입해라
자료형
Primitive Tyoe 8가지 (기본형)
1. 정수형
byte - 8 bit (-2의 7승 부터 2의 7승-1까지 표현 가능 = -128~127, 양수에 0 포함하기 때문)
short - 16 bit
int - 32 bit
long - 64 bit ex> 5L
: 기본형
2. 실수형
float - 4 byte ex> 5.5f, 5.5F
double - 8 byte
3. 문자형 (문자열과는 다른 말)
char - 2 byte → 반드시 한 글자만 저장 가능, ' '(싱글)만 묶는다
4. 논리형
논리형 - boolean 크기 없음 → true, false만 저장 가능
ObjectType = ReferenceseType(객체형)
class Test{ } → Test t;
class Super{ }
class Hello{ }
- class가 존재한다면 데이터 타입이 될 수 있음
*문자열 저장*
String = ObjectType
String str= "안녕";
→ class String {
속성;
메소드(){}
}
int i = 정수형 숫자;
char ch = 한 문자
double d = 실수형 숫자;
HelloTest t = HelloTest 객체;
변수의 효용
대입값이 변경될 경우, 쉽게 계산값을 변경할 수 있음
Ex>
int i = 100;
//값변경
i = 50;
// 값 변경
i = 5.5; // 컴파일 오류
연산자
산술연산자
* / 나누기
5/2 --> 2
5/2.0 --> 2.5 - 서로 다른 타입이 계산될 경우, 더 큰 타입으로 변환되어 계산
% 나머지
5%2 --> 1
대입연산자
=: a=b
*주의!!
a==b; a는 b와 같다
a=b; a에 b의 값을 대입한다. (a값이 변경)
a+=b; --> a = a+b;
Java: =을 기준으로 오른쪽을 먼저 연산 및 왼쪽에 대입
비트연산자
|: or 양쪽 중 하나만 true이면 true (주기가 긴 연산자)
||: or 양쪽 중 하나만 true이면 true (주기가 짧은 연산자)
^: xor 양쪽이 같으면 false, 양쪽이 다르면 true
*|와 ||비교*
true |? ==> true
: 주기가 긴 연산자라고 해서 앞에서 답이 나와도 뒤의 ?부분을 실행 및 값 확인
true ||? ==> true
: 주기가 짧은 연산자라고 해서 앞에서 답이 나오면 뒤에는 실행하지 않고 결과를 냄
&: and 양쪽 모두 true이면 true (주기가 긴 연산자)
&&: and 양쪽 모두 true이면 true (주기가 짧은 연산자)
*&와 &&비교*
false &? ==> false
: 앞에서 답이 나와도 뒤의 ?부분을 실행 및 값 확인
false &&? ==> false
: 앞에서 이미 결과가 나왔기 때문에 뒤(? 부분)은 실행하지 않음
증감연산자
++ (1씩 증가)
1) a++: 선 대입 후 증가
2) ++a: 선 증가 후 대입
-- (1씩 감소)
1) a--: 선 대입 후 감소
2) --a: 선 감소 후 대입
예제>
int a=5;
1. System.out.println(--a); // 4
2. System.out.println(a--); // 5
System.out.println(a); // 4
int a=1, b=1;
(ㄱ) a = b++;
System.out.println(a); // 1
System.out.println(b) // 2
(ㄴ) a = ++b;
System.out.println(a); // 2
System.out.println(b) // 2
+: 산술 연산자, 연결연산자 두 가지 모드
숫자+숫자 = 덧셈
숫자 + 문자열 = 연결 5 +"2" = 52(오이라는 문자열)
"A" +2 = A2라는 String
'A'+2 = 67
- 숫자 int 형의 결과, 서로 다른 크기의 연산 = 큰 타입으로 결과가 나옴
- A code 값은 65
조건 삼항 연산자
조건식 ? 조건식 결과 참일 경우 | 조건식 결과 거짓일 경우
ex> 평균이 80이상이면 합격, 아니면 불합격
\t
\n
\"
\'
형 변환
Promotion (자동)
작은 타입이 큰 타입으로 변신(자동으로 이루어짐)
서로 다른 데이터 타입이 연산을 하면 작은 type이 큰 type으로 변신
ex) int a= 3; double b = 3.2
double c = a+b;
* 기본형의 크기 순서
byte < short, char < int < long < float < double
Casting
(변신하려는 DataType)값;
ex) double b = 3.2;
int c = b; // 오류
int c = (int) b; // 데이터 손실은 발생, int c의 값은 3
- 객체들은 ~바이트(크기)라고 얘기 하지 않음 = 크기를 논할 수 없음, 실제 변수에는 주소값이 담기기 때문
- String은 형 변환(Promotion, Casting)을 할 수 없음
5 --> "5" ---> String s = Interger.toString(5)
"5" --> 5 ---> int i = Interger.parselnt("5");
*예외*
객체들이 캐스팅이 되는 경우
: 상속 관계에 있을 때만 캐스팅을 할 수 있음
: 부모 > 자식이 있을 때,
: 자식을 부모 타입에 담을 수 있다. = promotion (자동)
: 부모를 자식 타입에 담을 수 없다. = 캐스팅 연산자를 이용해 형변환 가능 (ObjectDownCasting)
ex> String s = "5";
int a = (int) s; // 오류 발생, 어떤 것이 큰 개념인지 알 수 없음
Casting이 아닌 특정 Method를 사용해야 함
*주의사항*
byte a = 5, b=3;
byte c = a+b; // 컴파일 오류
*연산기호를 만나면, 최소 32bit의 공간이 필요 (4 byte)
* byte, short, char는 연산을 하면 최소 int의 결과가 나온다!!
*따라서 변수 c는 int 형이어야 함
byte c = (byte) (a+b);
*a+b를 먼저 연산 후 byte로 casting
제어문
: 상황에 따라 짜둔 소스 코드를 실행 or 실행하지 않음
1) 조건문
- if 문
구조
1.
if(조건식){//조건식의 결과는 반드시 boolean 형이다.
실행문장;
}
2.
if(조건식){
//조건식이 true일 때 실행 문장;
}
else { // 조건식이 false일 때 실행문장;
}
3.
if(조건식){//실행 문장; (1)
} else if(조건식){
// 실행문장; (2)
} else if( 조건식 ){
//실행문장; (3)
}….
else{ //그 밖에 모든 경우에 실행문장;
}
*난수발생
- 컴퓨터가 임의의 숫자를 발생시켜 주는 것
- 랜덤 메소드 Math.random(); // 0.0~0.99999 사이의 숫자를 발생
- double nansu = Math.random();
what if, 1~5 사이의 숫자를 발생하고 싶다!
(Math.random()*경우의 수) + 최소값;
ex> (Math.random()*5)+1;
ex> 25~45 사이의 정수를 원할 경우
int covertNum= (int)(Math.random()*21)+25;
- switch 문
2) 반복문
- for문
- while문
- do while문
참조자료: 점프투자바 https://wikidocs.net/book/31