abstrcat 키워드

추상 메서드 : 선언부는 있는데 구현부가 없는 함수
추상 클래스: 추상 메서드를 하나라도 포함한다면 추상 클래스로 선언해야 한다.

추상 클래스는 new를 사용하여 인스턴스를 만들 수 없다.
추상 클래스를 ‘하위 클래스’에서 오버라이딩할 메서드를 추상클래스로 만들어둔다.
추상 클래스는 하위 클래스에게 메서드 구현을 강제한다. 오버라이딩 강제.

생성자

인스턴스를 만들 때 new 키워드를 사용한다.

아무런 생성자를 만들지 않으면, 자바는 인자가 없는 기본 생성자를 자동으로 만들어준다.
인자가 있는 생성자를 만든다면, 자바는 기본 생성자를 만들어주지 않는다.

클래스 생성 시의 실행 블록, static 블록

클래스가 스태틱 영역에 배치될 때 실행되는 코드 블록이 static 블록이다.

static 블록에서 사용할 수 있는 속성과 메서드는 static 멤버 뿐이다.

객체 멤버는 클래스가 static 영역에 자리잡은 후에, 객체 생성자를 통해 힙에 생성된다.

순서가 아래와 같다.

1) static 영역에 객체 멤버 자리잡음
2) 객체 인스턴스가 힙에 생성됨

클래스의 static 블록이 실행되고 있을 때는 해당 클래스의 객체는 하나도 존재하지 않기 때문에 static 블록에서는 객체 멤버에 접근할 수 없다.

왜 프로그램이 처음 실행될 때 클래스 정보를 static 영역에 로딩하지 않고, 해당 클래스가 처음 사용될 때 로딩할까?

스태틱 영역도 메모리이기 때문이다.
최대한 늦게 생성하고 최대한 빨리 반환해야 메모리를 효율적으로 쓸 수 있기 때문이다.

final 키워드

마지막이라는 뜻이다. 클래스, 변수, 메서드에 붙일 수 있다.
final 클래스 : 상속할 수 없다.
final 변수 : 값을 변경할 수 없다. 상수.
final 메서드 : 오버라이딩을 금지한다.

instanceof 연산자

인스턴스는 클래스를 통해 만들어진 객체다.
이 객체가 특정 클래스의 인스턴스 인지 여부를 묻는다.
결과로 true/ false를 반환한다.

package 키워드

네임스페이스를 만들기 위해 사용한다.

interface 키워드와 implements 키워드

인터페이스는 public 추상메서드와 public 정적 상수만 가질 수 있다.
구현을 강제해야 하니까 추상메서드를 가지는 것이다.
정적 상수는 클래스명으로 접근할 수 있는 상수다.

자바 람다는 무엇인가?

변수에 함수를 할당한다.
함수는 로직이다.
즉, 람다는 변수에 저장할 수 있는 로직이다.
( C++의 함수포인터, 자바스크립트에서 함수를 저장하는 변수를 비교하여 배우자. )

자바 람다는 인터페이스를 기초로 하고 있다.

자바 8 이전까지의 인터페이스는 public 추상 클래스와 public 정적 상수만 가질 수 있었다.
자바 8 부터는 디폴트 메서드라고 하는 객체 구상 메서드와 정적 추상 메서드를 지원할 수 있게 언어 스펙이 바뀌었다.

this 키워드

객체가 자기 자신을 지칭할 때 쓰는 키워드이다.

지역 변수와 속성(객체 변수, 정적 변수) 의 이름이 같은 경우, 지역변수가 우선한다.
객체 변수와 지역 변수가 이름이 같은 경우, 객체 변수를 사용하려면 this를 접두사로 사용한다.
정적 변수와 지역 변수가 이름이 같은 경우, 정적 변수를 사용하려면 클래스명을 접두사로 사용한다.

super 키워드

자신의 바로 위 상위 클래스의 인스턴스를 지칭하는 키워드다.

728x90

'일상 > Today I Learn(TIL)' 카테고리의 다른 글

객체지향 설계 5원칙 - SOLID  (0) 2021.11.10
아파치 서비스 시작 안되고 Permission error 에러  (0) 2021.11.09
HTTP 기본  (0) 2021.11.05
2020-06-22 TIL  (0) 2020.06.22
2020-06-21 TIL  (0) 2020.06.21

김영한님의 모든 개발자를 위한 HTTP웹 기본지식 강의를 듣고 요약했습니다.


지금은 HTTP 시대

HTML 문서를 연결하는 프로토콜로 시작했다.
HTML, IMAGE, 음성, 영상, 파일, JSON ... 모두 HTTP 를 쓴다.
서버간에 데이터를 주고 받을 때도 대부분 HTTP를 사용한다.

HTTP 역사

HTTP 1.1 에 대해 공부하는 것이 중요하다.
대부분의 기능과 내용이 1.1에 있기 때문이다. 2와 3은 성능 개선 관련이고 상대적으로 내용이 적다.

HTTP 1.1 - 가장 많이 사용, 우리에게 가장 중요한 버전
HTTP 2 - 2015 성능 개선
HTTP 3 - 성능 개선을 위해 TCP 대신에 UDP 사용

HTTP의 기반 프로토콜

TCP기반으로 동작: HTTP/1.1, HTTP/2
UDP기반으로 동작: HTTP/3

현재 HTTP 1.1 을 주로 사용하고 있지만, HTTP2, 3도 점점 늘어나고 있다.

HTTP 특징

4가지 특징에 대해 이해해보자.

  • 클라이언트 서버 구조
  • 무상태 프로토콜(stateless)
  • 비연결성
  • HTTP 메시지로 요청/응답

클라이언트 서버 구조

클라이언트와 서버를 분리하는 것이 매우 중요하다. (예전에는 안그랬다)

  • Request Response 구조
  • 클라이언트는 서버에 요청을 보내고, 응답을 기다린다.
  • 서버는 요청에 대한 응답 메시지를 만들어서 보내준다.

클라이언트와 서버를 분리하는 것의 장점?

비즈니스 로직과 데이터를 전부 서버가 관리한다.
클라이언트는 UI와 사용성에 집중할 수 있다.
클라이언트가 PC만 서비스 하다가 Phone 이 필요해지면, application에 필요한 UI를 새로 만드는 것에 집중하면 된다. 클라이언트가 비즈니스 로직을 고민할 필요 없다.

클라이언트/서버가 분리된 구조를 통해 각각 독립적으로 진화할 수 있다는 것이 장점이다.


무상태 :stateless

서버가 클라이언트의 상태를 보존하지 않는다.
컨텍스트(context)를 모른다.

상태유지 무상태 이해를 위한 예시

고객이 물건을 구매할 때 점원과 대화하는 상황을 상상해보자.
고객은 클라이언트이고, 점원은 HTTP 서버 역할과 같다.

상태유지(stateful) 예시

고객 "이 노트북 얼마인가요?"
점원A "100만원 입니다."

고객 "2개 구매할께요."
점원A **"200만원 입니다. 신용카드, 현금 중에 어떤 걸로 결제하시나요?" **

-> 점원이 상황의 문맥(context)를 알고 있다.
따라서 점원은 100만원 x 2개 = "200만원 입니다." 라고 대답해줄 수 있다.

무상태(stateless) 예시

고객 "이 노트북 얼마인가요?"
점원A "100만원 입니다."

고객 "2개 구매할께요."
점원B **" ?? 무엇을 2개 구매하시겠어요? " **

-> 점원이 상황의 문맥(context)을 모른다.
무상태라면, 고객이 요청할 때마다 새로운 점원이 고객을 응대하는 것과 같다.

[중요]stateful과 stateless 차이

상태유지

  • 중간에 다른 점원으로 바뀌면 안된다.
  • 항상 같은 서버가 유지되어야 한다.
  • 클라이언트 A는 계속 서버1과 통신해야 한다.

무상태

  • 서버가 장애가 나면? 중간에 다른 점원(서버)으로 바뀌어도 된다.
  • 갑자기 고객이 증가해도 점원을 대거 투입할 수 있다.
  • 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다.

무상태의 강점은 서버1이 장애 나도 서버2가 대신 응답해줄 수 있다는 것이다.
서버가 클라이언트의 상태를 저장하지 않기 때문이다.
스케일 아웃 즉, 수평 확장에 유리하다.

[중요] stateless의 실무 한계

모든 것을 무상태로 설계 할 수도 있는 경우도 있고 없는 경우도 있다.

  • 무상태 : 로그인이 필요 없는 단순한 서비스 소개 화면
  • 상태유지: 로그인한 사용자의 경우.
      결제 과정이 필요하는 경우. 
      **브라우저 쿠키와 서버 세션 등을 사용해서 상태를 유지한다. **

무상태와 상태유지는 전송 데이터의 양에 차이가 있다.
상태 유지 시, 데이터의 양이 더 적을 수 있다.

따라서 ‘상태 유지’는 최소한만 사용해서 개발하자.

무상태(stateless)는 데이터 전송량이 좀 더 많다.
애플리케이션 설계 시, 되도록이면 무상태로 설계하는 것이 좋다.


비연결성

HTTP는 기본이 연결을 유지하지 않는 모델이다.
일반적으로 초 단위 이하의 빠른 속도로 응답한다.

연결을 유지하면?

클라이언트가 서버와 연결 유지하면 계속 서버가 자원을 소모하고 있게 된다.

연결을 유지하지 않으면?

요청/응답 만 하고, 연결을 끊어버려서 최소한의 자원만 사용한다.

비 연결성의 한계와 극복

1. 비연결성 이라면, 요청을 보낼 때 마다 TCP/IP 연결을 새로 맺어야 한다.

-> 3 way handshake 시간 추가된다.
사용자 입장에서는 시간이 단점이 된다.

2. 웹브라우저로 사이트를 요청하면 다운로드 받을 것이 많다.

HTML 뿐만 아니라 자바스크립트, css, image 등 많은 자원이 함께 다운로드 된다.

지금은 HTTP 지속 연결로 문제 해결

이전에는 HTML 응답, 이미지 응답, Javascript 응답.. 각각 연결해야 했었다.
하나의 페이지에는 HTML 말고도 이미지도 있고 여러개가 있는데, 하나 받을 때 마다 새로운 연결을 요청해야 했다.

이제는 Persistent connections 라는 지속 연결로 문제를 해결하고 있다.
한 번 연결이 되면, HTML와 이미지 여러개 등의 다운로드를 할 만큼의 시간동안 연결이 유지된다.
http/2, http/3에서 더 많은 최적화되고 있다.

stateless 를 기억하자

서버 개발자들이 가장 어려워하는 업무가 뭘까?

같은 시간에(일제히) 딱 맞추어 발생하는 대용량 트래픽에 대응하는 것이다.
ex) 명절 KTX예약, 수강신청, 선착순 이벤트

이것만 기억하자. "최대한 stateless 로 설계하자"
어떻게든 머리를 쥐어짜서 stateless로 설계해야 대응할 수 있다!


HTTP 메시지

요청 메시지와 응답 메시지 구조의 차이를 이해하자.

Request 요청 메시지

요청, URL, version
body 본문을 가질 수 있다.

HTTP 요청한것
헤더값
공백라인 CRLF
응답메시지

요청메시지에서 시작라인

start-line은 요청이냐 응답이냐에 따라 다르다.

요청메시지에서 시작라인은 request-line
응답메시지에서 시작라인은 status-line

요청메시지는 request-line이라고 한다.
request-line: method SP(공백) request-target SP. HTTP-version

(여기서 SP는 스페이스 라는 뜻이다. )

http 메서드 : 서버가 수행해야 할 동작 지정
종류 : GET, POST, PUT, DELETE…
GET: 리소스 조회
POST: 요청 내역 처리

요청대상 : 절대경로로 시작한다.
요청대상: 절대경로 “/“로 시작하는 경로

응답메시지의 시작라인

응답메시지의 시작라인은 status-line으로 되어 있다.

status-line 구성

HTTP-version SP
status-code SP
reason-phrase CRLF

(여기서 SP는 스페이스 라는 뜻이다. )

HTTP version: HTTP 1.1 / 2/3

HTTP 상태코드 : 요청의 결과를 의미한다.

200 성공
*400 클라이언트 요청 오류
500 서버 내부 오류 *

이유 문구: 사람이 이해할 수 있는 상태코드 설명글

HTTP 헤더

header-field: field-name:OWS
(OWS: 띄어쓰기 허용 )

HTTP 전송에 필요한 모든 부가정보를 포함한다.
HTTP 1.1을 기준으로 학습하자.

읽을 거리 :
MDN HTTP 개요

728x90

'일상 > Today I Learn(TIL)' 카테고리의 다른 글

아파치 서비스 시작 안되고 Permission error 에러  (0) 2021.11.09
자바의 객체 지향 키워드와 연산자  (0) 2021.11.08
2020-06-22 TIL  (0) 2020.06.22
2020-06-21 TIL  (0) 2020.06.21
2020-06-18 TIL  (0) 2020.06.18

 

iPhone 11pro를 구입해 SKT를 1년 이용했다. (아이폰 공기계는 카드 무이자 할부로 구매)

 

카드 사용 내역 6개월 치를 찬찬히 보다가 4만원어치 통신비가 사용량에 비해 아깝다는 생각이 들었다.

 

( 3개월 평균 사용량이  음성 250분, 데이터 2.5GB~3GB )

 

마침 가입비를 면제하는 이벤트를 하길래,  헬로모바일로 바꿨다. 후기글도 2천개정도 써있는데 전반적으로 좋았다. 

 

 


알뜰폰 장단점 

 

단점

 

* 이통3사 (KT SKT LG) 의 여러 혜택이 없다. (영화, 뮤지컬, 음악 어플 할인, 특정 프렌차이즈 관련 할인 및 적립)

* 고객센터 전화 연결이 어렵다고 들었음. 

* TV+인터넷+모바일요금 결합 할인이 없다. 

* 가입 과정이 온라인만 가능하니까 어르신들은 불편하실 수도 있다. 

 

 

장점

 

* 통신비가 매우 저렴하다. 

* 통화품질 차이가 안느껴진다. 품질 좋다. 

* 새 폰에서 개통이 불가하다.

(공기계 사서 알뜰폰으로 바로 가입이 안된다. 하루라도 이통3사를 쓰긴 써야 알뜰폰 통신사로 넘어갈 수 있다. 어이없는 부분... )

* 내 사용량에 맞는 요금제가 다양하다. 엄청 적게 사용하는 경우 엄청 저렴한 요금제를 선택하면 된다. 

* 참고) 한국정보통신진흥협회가 16개 알뜰폰 통신사 상품을 비교해주는  알뜰폰허브 에서 자신의 사용량에 맞는 알뜰폰 요금제를 조회할 수 있다. 

 


SKT에서 납부한 요금 vs 헬로모바일 요금 

 

매달 2만원 정도 아끼게 됬으니까.  일년에 24만원 아끼는거다. 캬컄!! 개이득

SKT  헬로 모바일 
T플랜 안심2.5GB The 착한 데이터 유심 3.6GB
2.5 GB 데이터(초과시 400kb로 계속 이용) + 음성 무제한  3.6 GB 데이터 + 음성 무제한 
선택약정 할인 받아서 통신비만 35,368원  통신비 13,090원

 

 

SKT T플랜 안심2.5GB 은  매달 42,550원을 납부했다.  

 

T플랜 안심2.5GB 통신요금은 35,368원이다.

( 부가세 포함 43,000원.  - 선택약정 할인 25%  7,587원 할인)  

 

FLO 음악어플 (SKT니까 약간할인받아서) 7,182원씩 같이 냈다. 

 

 

 

알뜰폰 통신사 요금제가 왜 저렴할까? 

 

메이저 통신3사의 통신망을 빌려서 재판매를 한다.

망을 빌려쓰는 거니까 통신망을 새로 증설, 유지보수 하는 비용 자체가 없다! 그래서 저렴한 가격에 이용할 수 있는 것이다.

메이저 통신3사의 망을 쓰는거니까 통화, 데이터 품질이 동일하다. 

 

 


알뜰폰 개통 과정 

 

1.  CU편의점에서 LG헬로모바일 LTE후불 유심을 8800원에 구매했다. 

 

개통 방법은 3가지다.  상담사와 함꼐하는 온라인신청, 전화개통. 그리고 본인이 유심 구매하고 온라인으로 셀프개통.

 

유의사항에 보면, 내국인 전용 상품이라고 써있다. 

 

 

2. 헬로모바일 홈페이지에서 요금제를 선택하고 편의점에서 산 유심카드 일련번호를 입력한다. 

 

The 착한 데이터 유심 3.6GB 으로 가입했다.  (데이터 3.6GB + 통화 무제한)

 

 

3. 헬로모바일 유심 끼우고, 전원을 1~2번 껐다 켰다 한다. 

 

 

4. '셀프개통' 서비스를 선택해서 바로 개통한다. 

 

온라인으로 가입신청을 정상적으로 했다면, 셀프개통 하라고 URL 포함된 문자가 하나 온다.

 

본인인증을 위해 주민등록증, 요금결제에 필요한 신용카드가 필요하다. 

 

 

 


편의점에서 유심 사오고 거의 20분만에(?) 개통했다.

통화도 LTE로 동영상도 틀어봤다. 품질 차이 못느끼겠고 똑같다. ㅋㅋ 

가끔 사용량 조회 하려고 헬로모바일 어플 설치해서 로그인 해뒀다. 

무튼 뿌듯.

728x90

오늘 한 일 

 

용역 일 본격시작하기 전에, C를 다시 보고 있다. 

헷갈리는 함수들이랑 잊어버린 문법들이 왜이렇게 많은건지. 

다시 정리하고 나니깐 보람있었다. 

728x90

'일상 > Today I Learn(TIL)' 카테고리의 다른 글

자바의 객체 지향 키워드와 연산자  (0) 2021.11.08
HTTP 기본  (0) 2021.11.05
2020-06-21 TIL  (0) 2020.06.21
2020-06-18 TIL  (0) 2020.06.18
2020-06-17 TIL  (0) 2020.06.17

오늘 한 일 

 

알고리즘 문제 5개를 풀었다.

조합을 이용한 문제가 있었는데, 옛 기억이 나서 풀 수 있었다. 순열, 조합 문제를 복습해야겠다. 

요즘 github에 커밋하고 푸시하는 재미가 쏠쏠하다. 

스터디를 해서 그런 것 같다. 역시 코딩은 같이 해야 재미가 난다. 

 

간간히 C++ 을 배우고 있는데 진도 빼는데 속도를 올려야겠다. 

728x90

'일상 > Today I Learn(TIL)' 카테고리의 다른 글

HTTP 기본  (0) 2021.11.05
2020-06-22 TIL  (0) 2020.06.22
2020-06-18 TIL  (0) 2020.06.18
2020-06-17 TIL  (0) 2020.06.17
2020-06-10 TIL  (0) 2020.06.10

오늘 한 일 

 

알고리즘 문제 3문제를 풀었다. 

 

용역 프로젝트의 코드를 분석하기 시작했다. 

안드로이드가 RFID로 보내주는 데이터를 읽어서 메모리의 값을 변경하는 부분을 주로 봤다. 

역시 다른 사람의 코드를 읽는 것은 정말 쉬운 일이 아니다. 분량을 보니 며칠 걸릴 것 같다. 

 

화이팅 !!!

728x90

'일상 > Today I Learn(TIL)' 카테고리의 다른 글

2020-06-22 TIL  (0) 2020.06.22
2020-06-21 TIL  (0) 2020.06.21
2020-06-17 TIL  (0) 2020.06.17
2020-06-10 TIL  (0) 2020.06.10
2020-06-04 TIL  (0) 2020.06.04

오늘 한 일 

 

알고리즘 스터디에 다녀왔다. 

입력받는 방법에 대해서 아리까리 한 부분이 많았었는데, 오늘 다른 사람들 것과 내 코드를 비교해보고 토론하면서 몰랐던 것들을 다시 정리했다. 

 

문자열을 입력받는 경우. 

scanf("%s" ) 문자열과 개행문자 까지 입력받는다. 

다음 문자열을 입력받고 싶은 경우, 버퍼에 들어가있는 개행 문자를 제거하기 위해 getchar() 또는 fflush()를 써야 한다. 

fgets()를 이용하면 문자열만 입력받는다. 

 

문제 푸는 것이 재밋기도 하고 어렵기도 한데, 다같이 푸니까 너무 좋다. 계속 스터디를 하고 싶다.  

 

ESL 용역일을 시작했다. 팀장님과 킥오프를 했다. 임베디드C를 하는 프로젝트는 처음이라 설렜다.

시료를 만지작거리니까 재미있었다.  

 

TrueSTUDIO라는 IDE를 다운받았다. 

일본인 개발자가 만든 코드를 분석하기 시작했다. 영어로 된 주석을 잘 달아 놓으셔서 멋지다고 생각했다. 

변수명을 역할과 기능으로 상세히 지어놓은 것들이 인상적이었다. 유지보수를 위해 그렇게 한 것이다. 

나도 변수명을 좀더 고심해서 정하도록 해야겠다. 

728x90

'일상 > Today I Learn(TIL)' 카테고리의 다른 글

2020-06-21 TIL  (0) 2020.06.21
2020-06-18 TIL  (0) 2020.06.18
2020-06-10 TIL  (0) 2020.06.10
2020-06-04 TIL  (0) 2020.06.04
2020-06-02 TIL  (0) 2020.06.02

+ Recent posts