Learn business

    [5편] 제네릭이란?

    Collectors에 선언된 제네릭 메소드들의 이해 java.util.Collections 에 선언된 변수 혹은 메소드를 보면 도무지 이해하기 힘든 부분들이 많다. 지금까지 1편부터 4편까지 제네릭에 대해서 공부를 해왔지만, 막상 java.util.Collections 에 선언된 메소드들을 보면 답답하다. 이번 포스팅을 통해서 어렵고 난해한 메소드에 대해 친숙해지는 기회가 되었으면 한다. 아래 java.util.Collections에 선언된 sort 메소드를 보자. 위 메소드를 보면 지금까지 공부했던 내용이 다 들어가 있다. 1편부터 4편까지의 내용을 조합해서 위 메소드를 해석하면 대충 어떠한 메소드인지 알 수 있을 것 같기도 하다. 하지만 제네릭 메소드 각각의 위치에 왜 하한 제한이 들어가고, 상한 제..

    [4편] 제네릭이란?

    제네릭은 Overloading 이 가능할까? Type Erasure에 대해서 알아보자. 한 번쯤은 제네릭 메소드를 Overloading 해서 메소드를 구현하고 싶은 생각을 해봤을 것이다.(물론, 아닐 수도 있다.) 제네릭은 Overloading 이 가능할까? 결론부터 말하면 제네릭 메소드는 Overloading 이 불가능하다. 이번 포스팅에서는 왜 Overloading 이 안되는지? 왜 제네릭과 와일드카드를 혼합해서 쓰는지? 를 알아보자. 아래와 같이 제네릭 오버로딩을 해보자 두 outBox 메소드의 매개변수 타입은 분명 서로 다른 것을 알 수 있다. 첫 번째 메소드는 Toy 타입을 상한 제한 하였으며, 두 번째 메소드는 Robot 타입을 상한 제한 하였다. 분명 두 메소드는 서로 다른 타입을 매개변수로..

    [3편] 제네릭이란?

    제한(상한, 하한)된 와일드 카드의 개념에 대한 내용이다. 왜 제한된 와일드 카드를 쓰는지 이해하고, 이를 통해 논리적인 오류까지 잡아낼 수 있는 자바의 힘에 대해 느낄 수 있다. 와일드 카드를 제한하는 방법은 크게 두 가지가 있다. 상한 제한(Upper-Bounded)과 하한 제한(Lower-Bounded)이다. 그 내용에 대해서 확실하게 이해하는게 목표이다. 참고로 제네렉은 제한하는 방법이 ‘extends’ 하나 이고, 와일드 카드는 제한하는 방법이 ‘extends’와 ‘super’이다. wildcard의 상한 제한(Upper-Bounded) 위 메소드의 파라미터를 보면, 이렇게 설명할 수 있을 것 같다. box 파라미터 변수는 Box 타입의 인스턴스의 참조 값을 전달받는 매개변수이다. 그런데 제네릭..

    [2편] 제네릭이란?

    이번 챕터의 중요한 내용은 제네릭과 와일드 카드의 차이점이다. 이것 저것 많은 내용을 참고해서 정리해보았다. 제네릭과 상속에 대한 개념을 알고 아래 내용을 보도록 하자. 해당 글은 effective java의 “[ITEM 26] 로 타입은 사용하지 말라”와 이어지는 내용이다. 제네릭 메소드 그리고 와일드 카드 제네릭 메소드는 클래스 전체가 아니라 하나의 메소드에 대해서만 제네릭 선언을 하고 싶을 때 사용도가 높다. printList1 메소드가 제네릭 메소드이다. 리스트를 파라미터로 받아서 for 문을 돌려서 출력하는 기본적인 메소드이다. printList2 메소드는 제네릭 메소드는 아니고 일반 메소드이다. 다만, 와인드 카드로 매개변수화 된 List 콜렉션을 파라미터로 받고 있다. 사실 printList..

    [1편] 제네릭이란?

    제네릭을 쓰면서도 맞게 쓰는 건지 몰라서 찝찝한 마음에 업무를 했었는데 사내 이펙티브 자바 스터디 중 발표할 수 있는 기회가 생겨 정리를 해봤다. [로 타입(Raw Type)은 사용하지 말라] 로 타입(Raw Type): 제네릭 타입에서 Type Parameter를 전혀 사용하지 않을 때를 말한다. ex) List 의 raw type은 List 이다. 아래 Raw Type의 예제를 보자. 위 예제들은 공통적으로 컴파일은 되지만 Raw Type인 리스트를 사용하여 경고가 발생한다. 그리고 이 코드를 실행하면 ClassCastException이 발생한다. 오류는 컴파일할 때 발견하는 것이 좋다. 이번 글은 제네릭에 대해서 공부했던 내용과 제네릭을 사용하여 컴파일 시에 오류를 잡아 제네릭이 주는 장점을 공유하..

    트리거(TRIGGER) & 내포된SQL

    트리거트리거는 명시된 이벤트(데이터베이스의 갱신)가 발생할 때마다 DBMS가 자동적으로 수행하는 프로시저(사용자가 정의하는 문)이다.트리거는 데이터베이스의 무결성을 유지하기 위한 일반적이고 강력한 도구이다. ECA규칙E(event) → C(condition) → A(action)의 약자이다.트리거를 명시하려면 트리거를 활성화시키는 사건인 이벤트, 트리거가 활성화되었을 때 수행되는 테스트인 조건, 트리거가 활성화되고 조건이 참일 때 수행되는 문(프로시저)인 동작을 표현해야 한다. 트리거의 단점트리거가 데이터베이스의 일관성을 유지하는데 매우 유용하지만 트리거를 과도하게 사용하면 복잡한 상호 의존성을 야기할 수 있다. 대규모 데이터베이스에서는 복잡한 상호 의존성을 관리하는 것이 어렵다.예를 들어, 하나의 트리..

    데이터 정의어

    ■ 데이터 정의어 1. 스키마의 생성과 제거• 일반적으로 스키마는 릴레이션, 도메인, 제약조건, 뷰, 권한 등을 그룹화한 것이다.• 각 사용자는 권한을 허가받지 않은 한 다른 사용자의 스키마에 속한 데이터를 볼 수 없다. CREATE SCHEMA MY_DB AUTHORIZATION CHOI; • 스키마 내에 릴레이션을 생성할 수 있다. 기존 스키마를 제거하려면 DROP을 사용한다. DROP SCHEMA MY_DB CASCADE CONSTRAINTS; 2. 릴레이션의 정의 그리고 제약조건 예시• 예시로 설명 CREATE TABLE EMPLOYEE ( EMPNO NUMBER NOT NULL, EMPNAME VARCHAR2(10) UNIQUE, TITLE VARCHAR2(10) DEFAULT '사원', MAN..

    SQL 개요

    ■ SQL• SQL은 IBM 연구소에서 1974년 System R이라는 관계 DBMS 시제품을 연구할 때 개발된 언어이다.• 왜 SQL이 필요할까?- 한글이나 영어와 같은 자연어는 너무 모호하기 때문에 복잡한 질의를 자연어로 표현하면 질의가 정확하게 표현되었는지 입증하기가 어렵다. 따라서 좀더 명확하고 구조적인 질의어가 필요했다. 그래서 SQL이 나왔는데 자연어에 가까운 구문을 사용해서 질의를 표현할 수 있다는 것이 장점이다.- SQL은 현재 DBMS 시장에서 관계 DBMS가 압도적인 우위를 차지하는 데 중요한 요인의 하나이다.- “만일 어떤 DBMS가 SQL을 사용하지 않는다면 그것은 관계 DBMS가 아니다.”란 말도 있다. - 이전에 관계 데이터 모델은 “사용자는 원하는 데이터(what)만 명시하고,..

    무결성 제약조건 정리

    ■ 무결성 제약조건• 데이터 모델은 데이터베이스 구조를 기술하는 데 사용되는 구성요소들의 집합으로 구조(데이터 타입, 관계), 그 구조 위에서 동작하는 연산자, 무결정 제약조건으로 이루어진다.• 데이터 무결성은 데이터의 정확도 또는 유효성을 의미한다.• 무결성 제약조건은 일관된 데이터베이스 상태를 정의하는 규칙들을 묵시적 또는 명시적으로 정의하는 것이다. 쉽게 말해서 데이터베이스 상태를 만족시켜야하는 조건이고, 사용자에 의한 데이터베이스 갱신이 데이터베이스의 일관성을 깨지 않도록 보장하는 수단이다.→ 프로그래밍 언어에서의 규칙은 서로 다른 데이터 타입의 데이터를 비교하거나 어떤 데이터 타입의 변수에 다른 데이터 타입의 변수를 배정하는 등의 작업을 제한한다. 이는 상용자가 일반적으로 무의미한 작업을 하지 ..

    식별관계와 비식별관계

    ■ 식별관계와 비식별관계 차이 • 부모테이블의 유니크 키나 기본 키로 지정된 컬럼이 자식테이블의 기본 키 컬럼과 연결된 경우 실선으로 표기되고 식별 관계라고 한다. • 부모테이블의 유니크 키나 기본 키로 지정된 컬럼이 자식테이블의 일반 컬럼과 연결된 경우 점선으로 표기되고 비식별 관계라고 한다. → 쉽게 이야기하면 부모 컬럼을 참조하는 자식 컬럼이 식별 (PK) 가능하면 식별 관계라고 하고 식별이 가능하지 않으면 비식별 관계라고 합니다. 즉, 자식 컬럼이 PK 인지 아닌지에 따라 식별 관계, 비식별 관계라고 이야기한다. (추가사항 ERD 모델 그리는 표기법 적기)