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클래스를 상속받은형태임.
SimpleDateFormat클래스의 생성자
- SimpleDateFormat()
- SimpleDateFormat(String pattern)
- SimpleDateFormat(String pattern, DateFormatSymbolsformat Symbols)
- SimpleDateFormat(Stringpattern, Localelocale)
SimpleDateFormat클래스의 주요메서드
익명 클래스
- 이름이 없는 일회용 클래스. 정의와 생성을 동시에 한다.
- new 조상클래스 이름() {}
- new 구현인터페이스이름() {}
ch8
프로그램 오류
- 컴파일 에러 (컴파일 오류)
- ex_) System. 을 system. 으로 적는 등
- 런타임 에러 (실행 오류)
- 논리적 에러 (작성 의도와는 다르게 동작하는 에러)
예외(Exception)클래스의 주요 메서드
(예외클래스는 일반적으로 public으로 만들자.
버전이 바뀌어도 사용할 수 있어야 한다.
static hash값 번호를 정해주고 다른 곳에 번역이 되더라도 아이디가 이런 아이디니까 얘 찾아. 다른곳에서번역해도 찾을 수 있게 해주기 위해서.)
메서드 | 설명 |
---|
getMessage() | 발생한 예외에 대한 메세지를 반환한다. |
getCause() | 발생한 예외의 원인을 Throwable 객체 형태로 반환한다. |
toString() | 예외 메시지에 추가된 문자열의 이름이 포함된 문자열을 반환한다. |
printStackTrace() | 시스템 스택 추적을 오류 출력 스트림으로 출력한다. |
getStackTrace() | 스택 추적 요소가 포함된 배열을 반환한다. |
fillinStackTrace() | Throwalbe 객체를 반환한다. |
예외 처리를 위한 키워드
키워드 | 설명 |
---|
try | 예외 코드를 배치할 블록을 지정하기 위해 사용한다. try 블록을 단독으로 사용할 수 없고 catch 또는 finally가 뒤따라야 한다. |
catch | catch 블록만 단독으로 사용할 수 없고 앞에 try블록이 있어야 하며, finally 블록이 뒤따를 수도 있다. |
finally | 프로그램에서 꼭 필요한 코드를 실행하는데 사용되며 예외 처리 여부에 관계없이 실행된다. |
throw | 예외를 고의로 발생시킨다. |
throws | 메서드에서 발생할 수 있는 예외를 선언하는 데 사용됨. 자신을 호출한 상위 메서드로 오류를 던지는 역할을 한다. |
자파의 런타임 에러
- 에러 : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
- 예외 : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
예외처리
- 정의
- 프로그램 실행시 발생할 수 있는 예외 발생에 대비한 코드를 작성하는 것
- 목적
- 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것
try-catch문 ( 예외 처리하기 )
다중try-catch문
instanceof (객체의 타입을 확인하기 위해 사용되는 연산자)
객체의 타입을 확인하기 위해 사용되는 연산자
printStackTrace()와 getMessage()
- printStackTrace()
- 예외발생 당시의 호출스택(Call Stack)에 있었던 메서드의 정보와 예외 메시지를 화면에 출력한다.
- getMessage()
- 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.
멀티 catch블럭
-
내용이 같은 catch블럭을 하나로 합친 것
-
코드의 중복 제거
예외 발생시키기
-
연산자 new를 이용해서 발생시키려는 예외클래스의 객체를 만든 다음
ex_) Exception e = new Exception(”고의로 발생시켰음”);
⇒ throw e
-
키워드 throw를 이용해서 예외를 발생시킨다.
ex_) throw new Exception();
checked 예외, unchecked예외
- checked 예외: 컴파일러가 예외 처리 여부를 체크(예외 처리 필수)
- unchecked 예외 : 컴파일러가 예외 처리 여부를 체크 안함(예외 처리 선택)
메서드에 예외 선언하기
-
try-catch문
- 예외 선언하기 (호출한 놈한테 예외 떠넘기기 )
- 은폐하기(Exception은 모든 예외의 최고 조상!!)
finally 블럭
- 예외 발생여부와 관계 없이 수행되어야 하는 코드를 넣는다.
사용자 정의 예외 만들기
- 직접 예외 클래스를 정의할 수 있다.
- 조상은 Exception(사용자가 발생시키는 예외)과 RuntimeException(프로그래머의 실수로 발생시키는 예외) 중에서 선택
exception은 try catch 필수
Runtime exception은 try catch 필수X
가장 중요한것은!
- exception필수처리 과 RuntimeException선택처리 중에 어떤걸 조상으로선택할지 정하는 것
- 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 오버라이딩에 대해 개념을 다시 잡을 필요가 있다.
파일 처리
파일 처리의 개념
- 파일 처리란 읽기,쓰기,편집 등 파일에 대한 다양한 기능을 수행하는 것을 말함
바이너리타입
네트워크상에서 데이터가 줄지어서 흘러 들어가는 것
대역폭이 크면 넓게 들어갈 수 있고
대역폭이 작으면 좁게, 차선에 맞춰서 줄지어서 간다.
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;
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)
트리거
- 테이블에 부착되어 테이블에 insert나 update 또는 delete 작업이 발생되면 실행되는 코드
- 상세한 내용은 10장에서 학습 예정
- ex_)탈퇴회원 관리
- 회원 테이블에서 빼서 탈퇴한 회원 관리 테이블로 옮김
- 회원 정보+탈퇴한 날짜를 관리하는 새 테이블의 필요성