[네이버 클라우드 캠프-DevOps] 17일차

정지안·2023년 6월 29일
0
post-thumbnail

17일차(6/29목)

Java

Random 클래스

  • 난수를 생성하는데 사용
  • Random클래스의 생성자
    • Random()
      • 현재 시간을 초기값으로 하는 난수 생성기 객체 생성
    • Random(long seed)
      • long형의 seed값을 사용하여 난수 생성기 객체 생성
  • Random클래스의 메서드
    • bollean nextBoolean() :boolean형 난수를 반환
    • double nextDouble() :double형 난수를 반환
    • float nextFloat() :float형 난수를 반환
    • double nextGaussian() :가우스형 난수를 double형의 난수로 반환
    • int nextInt() :int형 난수를 반환
    • int nextInt(int bound :한곗값(bound)을 받아서 난수를 반환
    • long nextLong() :long형 난수를 반환
    • void setSeed(long seed) :난수발생기의 seed값을 새로 설정

java.text 패키지

DateFormat클래스

DateFormat의 주요상수

DateFormat의 주요메서드

예시

SimpleDateFormat클래스

  • 날짜를 형식화
  • 기본적인 구조가 DateFormat클래스를 상속받은형태임.

SimpleDateFormat클래스의 생성자

  • SimpleDateFormat()
  • SimpleDateFormat(String pattern)
  • SimpleDateFormat(String pattern, DateFormatSymbolsformat Symbols)
  • SimpleDateFormat(Stringpattern, Localelocale)

SimpleDateFormat클래스의 주요메서드

  • format() :Date형 객체를 특정 패턴에 따라 문자열로 변환하여 반환

  • parse() :문자열을 특정 패턴에 따라 Date형 객체로 변환하여 반환


익명 클래스

  • 이름이 없는 일회용 클래스. 정의와 생성을 동시에 한다.
    - new 조상클래스 이름() {}
    - new 구현인터페이스이름() {}

ch8

프로그램 오류

  • 컴파일 에러 (컴파일 오류)
    • ex_) System. 을 system. 으로 적는 등
  • 런타임 에러 (실행 오류)
  • 논리적 에러 (작성 의도와는 다르게 동작하는 에러)

예외(Exception)클래스의 주요 메서드

(예외클래스는 일반적으로 public으로 만들자.

버전이 바뀌어도 사용할 수 있어야 한다.

static hash값 번호를 정해주고 다른 곳에 번역이 되더라도 아이디가 이런 아이디니까 얘 찾아. 다른곳에서번역해도 찾을 수 있게 해주기 위해서.)

메서드설명
getMessage()발생한 예외에 대한 메세지를 반환한다.
getCause()발생한 예외의 원인을 Throwable 객체 형태로 반환한다.
toString()예외 메시지에 추가된 문자열의 이름이 포함된 문자열을 반환한다.
printStackTrace()시스템 스택 추적을 오류 출력 스트림으로 출력한다.
getStackTrace()스택 추적 요소가 포함된 배열을 반환한다.
fillinStackTrace()Throwalbe 객체를 반환한다.

예외 처리를 위한 키워드

키워드설명
try예외 코드를 배치할 블록을 지정하기 위해 사용한다. try 블록을 단독으로 사용할 수 없고 catch 또는 finally가 뒤따라야 한다.
catchcatch 블록만 단독으로 사용할 수 없고 앞에 try블록이 있어야 하며, finally 블록이 뒤따를 수도 있다.
finally프로그램에서 꼭 필요한 코드를 실행하는데 사용되며 예외 처리 여부에 관계없이 실행된다.
throw예외를 고의로 발생시킨다.
throws메서드에서 발생할 수 있는 예외를 선언하는 데 사용됨. 자신을 호출한 상위 메서드로 오류를 던지는 역할을 한다.

자파의 런타임 에러

  • 에러 : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
  • 예외 : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류

예외처리

  • 정의
    • 프로그램 실행시 발생할 수 있는 예외 발생에 대비한 코드를 작성하는 것
  • 목적
    • 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것

try-catch문 ( 예외 처리하기 )


다중try-catch문

instanceof (객체의 타입을 확인하기 위해 사용되는 연산자)

객체의 타입을 확인하기 위해 사용되는 연산자

printStackTrace()와 getMessage()

  • printStackTrace()
    • 예외발생 당시의 호출스택(Call Stack)에 있었던 메서드의 정보와 예외 메시지를 화면에 출력한다.
  • getMessage()
    • 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.

멀티 catch블럭

  • 내용이 같은 catch블럭을 하나로 합친 것

  • 코드의 중복 제거

예외 발생시키기

  1. 연산자 new를 이용해서 발생시키려는 예외클래스의 객체를 만든 다음

    ex_) Exception e = new Exception(”고의로 발생시켰음”);

    ⇒ throw e

  2. 키워드 throw를 이용해서 예외를 발생시킨다.

    ex_) throw new Exception();

checked 예외, unchecked예외

  • checked 예외: 컴파일러가 예외 처리 여부를 체크(예외 처리 필수)
  • unchecked 예외 : 컴파일러가 예외 처리 여부를 체크 안함(예외 처리 선택)

메서드에 예외 선언하기

  • try-catch문

  • 예외 선언하기 (호출한 놈한테 예외 떠넘기기 )
  • 은폐하기(Exception은 모든 예외의 최고 조상!!)

finally 블럭

  • 예외 발생여부와 관계 없이 수행되어야 하는 코드를 넣는다.

사용자 정의 예외 만들기

  • 직접 예외 클래스를 정의할 수 있다.
  • 조상은 Exception(사용자가 발생시키는 예외)과 RuntimeException(프로그래머의 실수로 발생시키는 예외) 중에서 선택

exception은 try catch 필수

Runtime exception은 try catch 필수X

가장 중요한것은!

  1. exception필수처리 과 RuntimeException선택처리 중에 어떤걸 조상으로선택할지 정하는 것
  2. String 매개변수가 있는 생성자를 넣어주는 것

사용자 정의 예외

  • 사용자가 새로운 예외 클래스를 만들어서 이용할 수 있는 방법으로, java.lang패키지의 Exception 예외 클래스를 상속받아 작성합니다.
  • 사용자 정의 예외 클래스에 대한 생성자를 정의하고(필수는아님)
  • toString()메서드를 재정의하여 catch블록에서 사용자 정의 메시지를 표시할 수 있습니다.

사용자 정의 예외 처리를 사용하는 경우

  • 기존 자바 예외의 하위 집합을 포착하여 처리할 수 있다.
  • 비즈니스 로직 예외(비즈니스 로직 및 워크플로와 관련된 예외)는 애플리케이션 사용자 또는 개발자가 정확한 문제를 이해하는데 유용하다.

example06

예외 되던지기(exception re-throwing)

  • 예외를 처리한 후에 다시 예외를 발생시키는 것
  • 호출한 메서드와 호출된 메서드 양 쪽 모두에서 예외처리 하는 것
    • Why?
    • 별 건 없고, 그럴 상황이 있을 수 있다.
    • 양 쪽에서 분담해서 처리하는 것.

연결된 예외(chained exception)

  • 한 예외가 다른 예외를 발생시킬 수 있다.
  • 예외 A가 예외 B를 발생시키면 A는 B의 원인 예외(cause exception)

Throwable initCause(Throwable cause) ⇒ 지정한 예외를 원인 예외로 등록

Throwable getCause() ⇒ 원인 예외를 반환

예외타입2 : 실제 발생할 에러

예외타입 1 : 예외2에 넣음

통째로 호출한메서드한테 던짐

그럼 예외타입1만 던져도 되는셈이다~

기존 : 공간이부족합니다

연결된예외 : (대략적인정보) 설치 중 예외 발생, (세부 정보) 공간이 부족합니다.

사용하는 이유!

  • 여러 예외를 하나로 묶어서 다루기 위해

hashCode() - 객체의 지문

  • 객체의 해시코드(hash code)를 반환하는 메서드 (주소를 반환)

  • Object클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환

  • equals()를 오버라이딩 하면, hashCode()도 오버라이딩 해야한다.

⇒해시 기반 자료 구조(예: 해시맵)에서 사용되며, 객체를 효율적으로 저장하고 검색하는 데 활용

identityHashCode()

  • 객체마다 다른해시코드를 반환하는 메서드

toString(), toString()의 오버라이딩

  • 객체를 문자열로 변환하기 위한 메서드.

ex_)

System.out.println(new Card().toString());

결과 : 클래스이름@주소값

ex_)

public String toString(){

return “kind :+ kind(iv) +, number :+ number(iv);

}

iv값을 이용해 오버라이딩할때 효과적이다.

hash코드와 equals 오버라이딩에 대해 개념을 다시 잡을 필요가 있다.


파일 처리

파일 처리의 개념

  • 파일 처리란 읽기,쓰기,편집 등 파일에 대한 다양한 기능을 수행하는 것을 말함

바이너리타입

입력스트림(input stream)

네트워크상에서 데이터가 줄지어서 흘러 들어가는 것

대역폭이 크면 넓게 들어갈 수 있고

대역폭이 작으면 좁게, 차선에 맞춰서 줄지어서 간다.

ex_) 저장장치에있는걸 화면으로 불러오는것

출력스트림

네트워크상에서 데이터가 줄지어서 흘러나오는 것

ex)화면에있는걸 저장장치에 저장

주기억장치⇒화면에보이게해주는것

write reader stream 글자로왔다갓다하고싶을때


JS

Document

getElementById

⇒브라우저에서 제공하는 객체(object) 중 document라는 객체는

JS에서 HTML파일을 불러올 수 있도록 도와준다.

document의 함수 중에는 getElementById 라는 함수가 있는데,

이 함수가 HTML에서 id를 통해 element를 찾아준다.

element를 찾고 나면, JS로 해당 HTML의 무엇이든 바꿀 수 있다.

ex. element의 innerText를 바꾼다던가 (title.innerText = "Got you!";)

id, className 등을 가져 올 수 있음. (cosole.log(title.id);)

설명 or 예문(ex)
document.getElementByID(”title”)document.getElementById(“title”)
getElementsByClassName()많은 element를 가져올때 씀(array를 반환)
getElementsByTagName()name을 할당할 수 있음(array를 반환)
title.innerText=”blarblar”title.innerText = “got you”

getElementByTagName();


querySelector

  • element를 CSS selector방식으로 검색할 수 있음 (ex. h1:first-child)
  • 단 하나의 element를 return해줌
  • class 내부에 있는 객체( ex) h1 )을 가지고 올 수 있다(id도 가능함)
    • querySelector("#hello”); same
    • getElementById("hello"); same

const title = document.querySelector(".hellos h1"); 와 같이 쓰면

.hellos h1 마치 css 선택자 처럼 원하는 요소를 선택 가능

이렇게 선택된 요소는 JavaScript로 조작이 가능해지며, 변수를 통해 해당 요소에 접근할 수 있습니다. 이 예시에서는 선택된 요소를 title 변수에 할당하였으므로, 이후에는 title 변수를 사용하여 해당 요소에 대한 작업을 수행할 수 있습니다.

상세보기 펼치기 버튼만들기 예시

  • document.querySelector(’#아이디’).style.display=”block”;
  • position: relative
  • position:absolute
  • display:none;
  • onclick=”javascript:함수이름()”

querySelectorAll

  • 조건에 맞는 n개 다 가져오고 싶으면 사용!!

기본원리

html이 js파일을 load하기 때문에 document가 존재 ! → 그 다음에 browser가 우리가 document에 접근할 수 있게 해

  • event: 어떤 행위를 하는 것
    • 모든 event는 js가 listen할 수 있음
  • eventListener : event를 listen함
    • → js에게 무슨 event를 listen하고 싶은 지 알려줘야 함

title.addEventListener("click") :누군가가 title을 click하는 것을 listen할 거임 → 무언가를 해줘야함

const없이 허용가능
document.body
head
title
이외 허용안됨( div 등. querySelector나 getElementById로 불러오자.)

document.body.style

document.body.style~의 명령이 허용되지만, div같은것들은 호출이 안됨 나머지 element들은 querySelector나 getElementById로 불러와야됨!!!!!!!

익명함수

  • 이름이 없는 함수
  • 함수를 변수에 할당 가능
  • 함수를 익명으로 정의하면 함수에 이름을 붙이지 않고 사용할 수 있다.
  • 일회성으로 사용되거나 한정적인 범위에서 사용될 때 특히 유용

사용처

  • 콜백 함수에서 사용
    • 다른 함수의 인자로 전달되어 특정 이벤트나 조건이 발생했을 때 호출되는 함수
    
  • 즉시 실행 함수에서 사용
    • 함수를 정의하자마자 즉시 실행되는 함수
    

선언적 함수

  • 함수 선언문을 사용하여 이름과 함께 함수를 정의하는 방식


MySQL

정보시스템 구축 절차 요약

  • 분석, 설계, 구현,시험,유지보수의 5가지 단계.
    • 분석
      • 구현하고자 하는 프로젝트의 가장 첫 번째 단계
      • 시스템 분석 또는 요구사항 분석이라고 불림.
      • 요구사항 분석은 현재 우리가 ‘무엇’을 할 것인지 결정
      • 사용자의 인터뷰와 업무 조사 등을 수행
      • 프로젝트의 첫 단추를 끼우는 중요한 단계
      • 분석의 결과로 많은 문서 작성
    • 설계
      • 시스템 설계 또는 프로그램 설계
      • 구축하고자 하는 시스템을 ‘어떻게’할 것인지 결정
      • 대부분의 프로젝트에서 분석과 설계의 과정이 전체 공정의 50% 이상 차지

데이터베이스 모델링과 필수 용어

데이터베이스 모델링

  • 현실세계에서 사용되는 데이터를 mysql에 어떻게 옮겨 놓을 것인지를 결정하는 과정
  • 저장할 정보는 테이블이라는 형식에 맞춰 저장
  • ex)쇼핑몰 데이터

기본키

  • 기본키 열은 각 행을 구분하는 유일한 열
  • 중복되어서는 안되며 비어있어서도 안됨
  • 각 테이블에 기본 키 하나만 지정

외래키 필드

  • 두 테이블의 관계를 맺어주는 키

  • 가상테이블
  • 실제 행 데이터를 가지고 있지 않음.
    • 그 실체는 없는 것이며, 진짜 테이블에 링크Link된 개념
    • 뷰를 SELECT하면, 진짜 테이블 데이터를 조회하는 것과 동일한 결과

스토어드 프로시저(Stored Procedure)

  • if문과 함수를 쓸 수 있다.

트리거

  • 테이블에 부착되어 테이블에 insert나 update 또는 delete 작업이 발생되면 실행되는 코드
  • 상세한 내용은 10장에서 학습 예정
  • ex_)탈퇴회원 관리
    • 회원 테이블에서 빼서 탈퇴한 회원 관리 테이블로 옮김
    • 회원 정보+탈퇴한 날짜를 관리하는 새 테이블의 필요성
profile
1% 개발자를 향해:: 개발 공부 일지를 써나갑니다

0개의 댓글