Joslynn의 하루

대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 - 2일차 노트 정리_220719 본문

MSA Full-Stack 개발자 양성과정/Java

대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 - 2일차 노트 정리_220719

Joslynn 2022. 7. 19. 17:27

Java
: 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

cd; change directory
javac HelloTest.java : java 소스 코드를 컴파일 // java HelloTest (실행 시에는 확장자명 붙이지 않음)

 

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

 

Comments