[복습] 7월 4주차

최상민·2023년 7월 30일

천재IT

목록 보기
4/10

내용 복습

JAVA

API

  • java.lang(기본 패키지): Object, System, Class, String, StringBuffer/StringVuilder, Math, Wrapper 등이 포함되어 있다.
  • java.util(java.lang의 추가 기능): Arrays, Calendar, Date, Objects, StringTokenizer, Random, Locale, Timezone 등

StringBuffer/StringBuilder 🔗

  • String과 달리 가변적으로, 같은 메모리 주소에 변수 값을 저장할 수 있다. 따라서 동일 객체 내 문자열 추가, 수정, 삭제가 가능하다.
  • StringBuffer는 동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전하다
  • StringBuilder는 동기화를 지원하지 않지만 단일쓰레드에서의 성능은 StringBuffer 보다 뛰어나다

java.util.Arrays

  • 얕은 복사(shallow copy): 배열의 경우 그냥 대입할 경우, 다른 변수끼리 같은 주소를 배정한다. 따라서 한 변수의 값을 바꾸면, 다른 변수의 값도 바뀌게 된다.
  • 깊은 복사: 배열을 Array.copyOf(배열, 길이)로 대입할 경우, 같은 값을 다른 주소에 배정하게 된다. 따라서 한 변수의 값이 바뀌더라도, 다른 변수의 값은 바뀌지 않는다.

enum 열거형

  • enum은 상수형 클래스와 비슷하다. 필드는 대문자로, (상숫값)을 명시하여 배정할 수 있다. 명시하지 않을 경우 0부터 1씩 증가하여 자동 설정된다.
public enum Week {
    MONDAY("월요일", "月"),
    TUESDAY("화요일", "火"),
    WEDNESDAY("수요일", "水"),
    THURSDAY("목요일", "木"),
    FRIDAY("금요일", "金"),
    SATURDAY("토요일", "土"),
    SUNDAY("일요일", "日");

    public String korean;
    public String chinese;
    Week(String korean, String chinese){
        this.korean = korean;
        this.chinese = chinese;
    }
}

...

Week[] wk = Week.values();
for(Week w: wk){
    System.out.print(w+" ");
    System.out.print(w.korean+" ");
    System.out.println(w.chinese);
}

람다식

  • 람다식: 함수형 프로그래밍 기법을 지원하는 자바의 문법 요소. 함수형 인터페이스의 호출 및 기능을 구현하는 방법을 새롭게 정의한 문법. 익명 이너 클래스의 축약된 형태, 메서드 참조와 생성자 참조에 사용된다.
  • 함수형 인터페이스: 단 하나의 추상 메서드만을 포함하는 인터페이스.
  • 람다의 추상체는 기능적 인터페이스(@FunctionalInterface)로 람다를 구현하려면, 이와 같은 추상체가 필요
@FunctionalInterface
interface LambdaClass{
    function();
}

Class class = ()->{function();}; // basic
Class class = (o)->{function();}; // consumer
Class class = ()->{ // supplier
	function();
	return object;
};
Class class = (Object o)->{ // Operator, Function, Predicate
	function();
	return object;
}; 

// 축약 표기
Class class = ()->function(); // 한줄 실행문, 중괄호 생략
Class class = ()-> object_return; // 한줄 return, return 및 중괄호 생략
Class class = a->{function();}; // 매개변수 소괄호 및 타입 생략

JavaScript

연산자

  • 기본적으로 자바 연산자와 같다.
  • 관계 연산자에 조금 차이가 있다.
    | 관계 | |
    | --- | --- |
    | == | 같은가 타입 상관없이 값이 일치(자동 형변환됨) |
    | === | 타입과 값이 모두 일치 |
    | != | 다른가 |
    | !== | 타입 또는 값이 다름 |

클래스

  • 자바 스크립트에서도 클래스를 생성할 수 있다. 단일 인스턴스의 경우, {속성: 값}을 대입한다. 이외에는 생성자 함수로 클래스를 생성할 수 있다.
  • 객체의 필드나 메서드를 추가하거나, 제거할 수 있다.
  • for in문으로 객체를 순회할 수 있다.
var man1 = {no: 1, name: "김일일", style: "red", point: 100}; // 단일 객체 생성

function People(no, name, age, style){ // 생성자로 클래스 생성
    this.no = no;
    this.name = name;
    this.age = age;
    this.style = style;
    this.print = function(){
        var res = document.getElementById("res");
        res.innerHTML =  "name "+this.name+" age "+this.age+" style "+this.style;
    }
}

var st1 = new People(1, "김일일", 30, "yellow");
st1.family = "돌 김";
st1.toString = function(){
    document.getElementById("res").innerHTML += "<br>"+"family "+this.family+" name "+this.name+" age "+this.age+" style "+this.style;
}

// 객체의 순회
for(var field in st1){
    console.log(field+"\t\t"+st1[field]);
}

delete st1.family; // 속성 제거

이벤트 Event

  • 이벤트(Event): 사용자가 어떤 특정 행위를 했을 때의 사건. 이벤트 타겟, 이벤트 핸들러, 서비스를 모두 합쳐 말한다.
  • 인라인 이벤트: 해당하는 요소(태그)에 필요한 이벤트 핸들러를 직접 기술
  • 스크립트 이벤트: 스크립트 태그 안쪽에 필요한 이벤트 핸들러를 해당 요소를 선택하여(document.getElement-) 필요한 이벤트를 적용하는 것.
  • 이벤트 종류: 마우스 이벤트, 키보드 이벤트, 폼 이벤트, 기타 이벤트 등
    • 마우스 이벤트: click, dblcclick(더블 클릭), mouseover/hover/mouseenter, mouseout/mouselet, mousedown, mouseup, mousemove, contextmenu, scroll(wheel 또는 mousewheel)
    • 키보드 이벤트: keypress(눌렀다 뗄 때), keydown(누르고 있을 때), keyup(뗐을 때)
    • 폼 관련 이벤트: focus(커서 가까이), blur(커서 떼면), change, submit, reset, select(드래그)
    • 기타 이벤트(문서나 창): load, abort(로딩 중지 pause), unload(사라짐), resize(창 사이즈 바뀜), scroll(스크롤 바를 움직일 때)

BOM 객체

  • 자바 스크립트의 객체에는 사용자 정의 객체(외장 객체), 데이터형 객체, BOM 객체, DOM 객체가 있다.
    • 사용자 정의 객체: 개발자가 필요에 따라 정의해 사용하는 객체
    • 데이터형 객체: 내장 객체로 특정 데이터형을 처리하기 위한 메소드와 속성을 제공함. Date, String, Video, Audio, Number 등
    • BOM 객체: Window(최상위), Screen, document, navigator(브라우저 자체), location, history. 브라우저를 제어할 목적으로 제공하는 메소드와 속성
    • DOM 객체: document. 현재 문서 안에 있는 태그(요소)를 제어할 목적의 메소드와 속성을 제공
  • window.open()
  • location.href = "주소", locationreload(), location.replace("주소"), location.assign("주소")
  • hisotry.back, history.forward, history.go(n)
  • navigator.userAgent;

DB

DB 기초

  • 데이터베이스(DB): 테이블들이 모여 이루는 데이터 단위
  • 관계형 데이터베이스(RDB, Relationship DataBase): 서로 관련성 있는 데이터를 테이블 형태로 저장하고 있는 데이터베이스
  • 데이터베이스의 종류
    • 계층적 데이터베이스: 계층적 데이터베이스는 검색 쿼리가 일상적이지만 고속 처리가 필요한 경우에 유용함. 계층적 데이터베이스는 은행, 항공 및 호텔 산업에서 선호되며, 고객과 관련된 모든 정보는 마스터 레코드에 저장되므로 다른 데이터 소스와 상호 참조할 필요가 없음. 가계도와 유사한 나무 구조로 구성되어 계층 구조의 다른 레벨을 부모/자식 관계로 언급하기도 함.
    • 역 데이터베이스: 계층적 데이터베이스의 속도와 예기치 않은 질문에 응답할 수 있는 유연성을 갖추고 있기 때문에 다이렉트 마케팅 응용 프로그램에 적합. 업데이트 된 정보가 발생했을 때 역 데이터베이스에 새로운 요소를 추가하는 것도 쉬움. 일반적으로 사용되는 역 파일 시스템은 Model 204, Adabas, 그리고 Computer Associates 의 Datacom/DB이며, 구현 환경에 따라 처리 속도와 유연성이 다양함.
    • 관계형 데이터베이스: 간단한 테이블들로 구성되며 사용자는 이러한 테이블에서 정보를 추출하여 재조합하는 쿼리를 작성할 수 있음. 유연성이 가장 높으나, 처리 속도는 다소 느림

DBMS

  • DBMS(DataBase Management System): 데이터베이스를 관리하는 시스템
  • DBMS의 특성
    • 실시간 접근성 (Real-time-processing) 데이터베이스는 컴퓨터를 이용하여 접근하는 저장장치에 지속적이고 비정형적인 질의에 대하여 실시간 처리가 가능해야 함
    • 계속적인 변화 (Continuous evolution) 데이터베이스는 데이터 삽입(Insert), 기존의 데이터 삭제(Delete), 갱신(Update) 등의 변화를 주어 정확한 데이터를 유지해야 함
    • 동시 공용 (Concurrent sharing) 데이터베이스는 사용자가 동시에 접속하더라도, 원하는 데이터에 접근하여 이용할 수 있어야 함
    • 내용에 의한 참조 (Contents reference) 데이터베이스 환경에서 사용자 요구하는 데이터 내용으로, 데이터가 가지고 있는 값에 따라 참조됨

데이터 모델링

  • 데이터 모델링: 고객의 요구에 따라 데이터를 구조화하고 조직화하여 데이터베이스에 반영하는 작업
  • 스키마: 데이터베이스의 정보를 저장하는 구조(현재 데이터베이스의 정체성을 나타내는 정보)와 제약조건을 정의한 . 외부, 개념, 내부 스키마의 3층 구조로 데이터 독립성을 향상시킬 수 있다.
    • 외부 스키마: 사용자 개개인이 보는 자료와 관점에 대한 사용자적 스키마로 사용자에게 필요한 데이터베이스에 대한 다양한 정의
    • 내부 스키마: 전체 데이터베이스의 논리적 구조로 데이터의 종류, 위치, 관계, 접근 권한 등을 정의. DBA 또는 설계자의 관점.
    • 개념 스키마: 물리적 저장장치 측면에서 데이터의 내부(필드 이름, 필드의 종류, 필드의 크기 등) 실제로 저장되는 방법을 정의. 개발자의 관점.'

데이터베이스 구조

  • 데이터베이스 > 테이블 > 레코드 > 필드
  • 테이블(Tabe, Entity, Relation, 개체): 관계형 데이터베이스에서 표와 같은 형태의 데이터 집합. 서로 관련 있는 필드를 하나의 레코드로 묶어 관리함.
  • 로우(record, tuple, row, instance): 서로 관련 있는 필드를 묶은 하나의 줄, 행 단위
    • 자바 프로그래밍 상에서는 레코드와 필드라고 한다. DB 설계하는 입장에서는 튜플과 속성이라 한다. sql 상에서는 로우와 컬럼이라 부른다.
    • ERD(Entity Relationship Diagram): 개체와 개체가 어떠한 관계로 이루어져 있는지 나타내는 그림으로 entity, tuple, attribute로 이루어져 있다.
    • 차수(degree): 한 로우의 컬럼 수로, 모든 로우는 최소 하나의 차수를 가진다.
  • 컬럼(field, attribute, column): 데이터의 최소 단위로, 항목을 나타내는 한 칸.
    • 기수(cardinality): 튜플의 수로, 데이터가 삽입되지 않았다면 0의 값을 가질 수 있다.
  • 관계(Relationship): 엔티티의 인스턴스 간 논리적 연관성으로, 존재나 행위에 있어 상호 연관성이 부여된 상태를 말한다.

키 Key

  • 기본키(Primary Key, PK): 레코드 간에 서로를 각각 구분할 수 있는 특정 필드. 레코드 간 중복 및 레코드의 null 값이 허용되지 않는다. 이를 개체 무결성이라 한다.
    • 무결성(integrity): 완전한 수명 주기를 거치며 데이터의 정확성과 일관성을 유지하고 보증하는 것.
  • 후보키: 중복 불가. 언제든지 기본키가 될 수 있는 것. 기본키를 정하기 전 키.
  • 대체키: 중복 불가. 기본키를 대체할 수 있는 컬럼으로 기본키가 정해지면 기존의 나머지 후보키가 대체키가 된다.
  • 외래키(Foreign Key, FK): 한 테이블의 필드 중 다른 테이블의 행을 식별할 수 있는 기본키를 말한다.
    • 참조 무결성(Referential Integrity): 하나 또는 다수의 다른 테이블의 기본 키로, 참조 테이블에 해당 컬럼의 값이 없거나 중복되거나 널값이면 안된다
    • 참조 테이블(참조되는 테이블)과 연결하는 현재 테이블의 컬럼을 외래키라 한다. 외래키 컬럼은 참조테이블과 현재 테이블 모두 존재하지만, 참조테이블에서는 기본키여야 한다.
    • 요즘에는 복잡성 문제로 잘 사용하지 않고, Join을 사용한다.

명령어

  • TCL(Transaction Control Language): 여러 개의 명령이 한 번에 같이 이루질 때 쓰는 명령어
    • commit, roll-back, savepoint.
  • DCL(Data Control Language): 때로 어떤 DB는 DCL에 TCL을 포함시키기도 한다.
    • 권한 명령
      • 권한 부여: grant
      • 권한 회수: revoke
    • 병행 수행 명령: transaction
      • 성공 수행 처리: commit
      • 실패 수행 처리: rollback
      • 트랜잭션 정의: savepoint
    • 기타 명령
      • 데이터베이스 선택: use 데이터베이스명;
      • 데이터베이스 목록 보기: show databases;
      • 테이블 목록 보기: show tables;
      • 특정 테이블 구조 보기(description): desc 테이블명;
  • DDL(Data Define Language): 데이터 정의어로 구조를 만드는 명령어이다.
    • create, alter, drop
  • DML(Data Management, Manipulation Language): 데이터 조작어(운영어 CRUD).
    • insert(create), select(read), update, delete

CRUD

  • insert(create)
INSERT INTO 테이블(컬럼명, ...) VALUES(, ...);

INSERT INTO member(id, pw, NAME, email, tel) VALUES ('admin', '1234', '관리자', 'admin@edu.com', '010-1004-1004');
  • select(read)
    • WHERE 뒤의 조건절에는 비교연산자, IN, not IN, LIKE 등을 쓸 수 있다.
SELECT 컬럼명 FROM 테이블
SELECT 컬렴명 FROM 테이블 WHERE 조건
SELECT 컬렴명 FROM 테이블 WHERE IN(여러 조건) -- 이중 쿼리
SELECT 컬렴명 FROM 테이블 WHERE not IN(여러 조건)
SELECT 컬렴명 FROM 테이블 WHERE BETWEEN n AND m; -- 구간 검색
SELECT 컬렴명 FROM 테이블 WHERE LIMIT n, m; -- n 인덱스부터 m개
SELECT 컬렴명 FROM 테이블 WHERE LIKE '와일드카드'; -- 유사 검색
SELECT distinct 컬럼명 FROM 테이블; -- 중복 제거한 컬럼
  • update
UPDATE 테이블 SET 컬럼='새값' WHERE 조건;
  • delete
DELETE FROM 테이블 WHERE 조건;

기타 명령

  • Order by 정렬: 다른 일반적인 dbms는 명령어 끝에 order by가 와야 함(mariadby와 mysql은 like가 마지막에 옴)
  • Group by 집계: count, sum, avg, max, min, stdev(표준 편차)

성찰

분명 수업에서 배웠던 내용인데 새롭다. 복습한다고 생각하고, 수업에서 배웠던 내용과 비교하여 추가 보충해야겠다.

이번 주 수업은 이 짤로 요약할 수 있다.

핵심 정리

  • 다음 중 java.lang에 속하는 패키지를 모두 골라라.
    • Objects, System, String, StringTokenizer, Math, Wrapper, Arrays
  • 다음 코드의 문제점을 찾아 바르게 고치시오.
int arrA[] = {2, 3, 4, 5};
int arrB[] = arrA;
arrB[2] *= 2;
if(arrA!=arrB){
	System.out.println(arrA[2]+arrB[2]);
	// 바로 위의 구문이 9로 나오지 않는 이유는?
}
  • 다음 문장의 빈칸을 채우시오.
    • JavaScript의 객체에는 사용자 정의 객체, 데이터형 객체, [ 1 ] 객체와 [ 2 ] 객체가 있다. [ 1 ] 객체에는 window, location, history, navigator 등이 포함된다.
    • 오라클, 마이크로소프트 sql, MariaDB와 같은 데이터베이스 관리 시스템을 [ 1 ]이라 하고, 몽고DB와 같은 데이터베이스 관리 시스템을 [ 2 ]라 한다.
  • 다음 중 틀린 문장을 찾고, 그 이유를 설명하시오.
    • 기본키는 레코드 간 서로를 구분할 수 있는 필드로 중복 및 레코드의 null 값이 허용되지 않는다.
    • 외래키는 한 테이블의 필드 중 다른 테이블의 행을 식별할 수 있는 키로, 개체 무결성을 가져야 한다.
    • CRUD 명령어는 Create, Select, Update, Delete를 의미한다.
profile
상민

0개의 댓글