Arrays.asList() 메소드를 사용하면 고정된 크기의 ArrayList를 만들 수 있다.
package chap15.list_collection;
import java.util.Arrays;
import java.util.List;
/* 고정된 크기의 ArrayList를 만들 때
* Arrays.asList() 메소드를 사용한다.
*/
public class ArrayAsListExample {
public static void main(String[] args) {
// 고정된 크기의 ArrayList가 생성된다.
List<String> list1 = Arrays.asList("홍길동", "신용권", "김자바");
for(String name : list1) {
System.out.println(name);
}
// list1.add("자바"); // 고정된 크기를 가지므로 추가를 할 수 없다.
System.out.println(list1.size());
}
}
위와 같이 생성됨 list에 새로운 문자열을 추가하려면 에러가 발생함을 알 수 있다. UnsupportedOperationException이 발생한다.
한빛 아카데미에서 나온 박우창, 남송휘, 이현룡 지음, "MySQL로 배우는 데이터베이스 개론과 실습" 에 나오는 마당서점의 물리적 모델링으로 이큽립스에서 제공되는 ER Master 도구를 이용하여 작업을 해보았다.
이를 물리적 SQL 파일로 만들기 위해서는 이클립스에서 오른쪽 마우스를 클릭하여 아래 그림과 같이 "내보내기->DDL" 메뉴를 선택하면 데이터베이스 연동을 위한 sql 파일을 생성할 수 있다.
이를 이용하여 데이터베이스 테이블을 생성할 수 있다.
/* Drop Triggers */
DROP TRIGGER TRI_author_id;
DROP TRIGGER TRI_comment_id;
DROP TRIGGER TRI_tauthor_id;
DROP TRIGGER TRI_tcomment_id;
DROP TRIGGER TRI_topic_id;
/* Drop Tables */
DROP TABLE dormant CASCADE CONSTRAINTS;
DROP TABLE tcomment CASCADE CONSTRAINTS;
DROP TABLE twrite CASCADE CONSTRAINTS;
DROP TABLE tauthor CASCADE CONSTRAINTS;
DROP TABLE topic CASCADE CONSTRAINTS;
/* Drop Sequences */
DROP SEQUENCE SEQ_author_id;
DROP SEQUENCE SEQ_comment_id;
DROP SEQUENCE SEQ_tauthor_id;
DROP SEQUENCE SEQ_tcomment_id;
DROP SEQUENCE SEQ_topic_id;
/* Create Sequences */
CREATE SEQUENCE SEQ_tauthor_id INCREMENT BY 1 START WITH 1;
CREATE SEQUENCE SEQ_tcomment_id INCREMENT BY 1 START WITH 1;
CREATE SEQUENCE SEQ_topic_id INCREMENT BY 1 START WITH 1;
/* Create Tables */
CREATE TABLE dormant
(
author_id number NOT NULL,
created date NOT NULL,
PRIMARY KEY (author_id)
);
CREATE TABLE tauthor
(
id number NOT NULL,
name varchar2(15) NOT NULL,
introduction varchar2(100) NOT NULL,
created date UNIQUE,
PRIMARY KEY (id)
);
CREATE TABLE tcomment
(
id number NOT NULL,
description varchar2(4000) NOT NULL,
created date NOT NULL,
topic_id number NOT NULL,
author_id number NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE topic
(
id number NOT NULL,
title varchar2(30) NOT NULL,
description varchar2(4000) NOT NULL,
created date NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE twrite
(
author_id number NOT NULL,
topic_id number NOT NULL,
created date NOT NULL,
PRIMARY KEY (author_id, topic_id)
);
/* Create Foreign Keys */
ALTER TABLE dormant
ADD FOREIGN KEY (author_id)
REFERENCES tauthor (id)
;
ALTER TABLE tcomment
ADD FOREIGN KEY (author_id)
REFERENCES tauthor (id)
;
ALTER TABLE twrite
ADD FOREIGN KEY (author_id)
REFERENCES tauthor (id)
;
ALTER TABLE tcomment
ADD FOREIGN KEY (topic_id)
REFERENCES topic (id)
;
ALTER TABLE twrite
ADD FOREIGN KEY (topic_id)
REFERENCES topic (id)
;
/* Create Triggers */
CREATE OR REPLACE TRIGGER TRI_author_id BEFORE INSERT ON author
FOR EACH ROW
BEGIN
SELECT SEQ_author_id.nextval
INTO :new.id
FROM dual;
END;
/
CREATE OR REPLACE TRIGGER TRI_comment_id BEFORE INSERT ON comment
FOR EACH ROW
BEGIN
SELECT SEQ_comment_id.nextval
INTO :new.id
FROM dual;
END;
/
CREATE OR REPLACE TRIGGER TRI_tauthor_id BEFORE INSERT ON tauthor
FOR EACH ROW
BEGIN
SELECT SEQ_tauthor_id.nextval
INTO :new.id
FROM dual;
END;
/
CREATE OR REPLACE TRIGGER TRI_tcomment_id BEFORE INSERT ON tcomment
FOR EACH ROW
BEGIN
SELECT SEQ_tcomment_id.nextval
INTO :new.id
FROM dual;
END;
/
CREATE OR REPLACE TRIGGER TRI_topic_id BEFORE INSERT ON topic
FOR EACH ROW
BEGIN
SELECT SEQ_topic_id.nextval
INTO :new.id
FROM dual;
END;
/
나는 Erwin 프로그램의 사용에 제약이 있고, 이클립스에 익숙하여 쉽게 데이터베이스 테이블을 생성할 수 있기 때문에 이 방법을 사용하였다. 또한 Data Source Exploror를 같이 이용할 수 있는 장점이 있다.
이클립스에서 ER Master를 설치하는 방법은 Help->Install New Software에서 다음과 같이 입력하여 설치를 한다.
[문제1]다음 실행결과가 나오도록ArrayList를 사용하여 동물(Dog과Cat)을 추가하고, doWork()메소드를 프로그래밍 하시오.
[Animal.java]
public interface Animal {
String sound();
}
[Dog.java]
public class Dog implements Animal {
private String name;
public Dog(String name) {
this.name = name;
}
@Override
public String sound() {
return "멍멍";
}
public String getName() {
return name;
}
}
[Cat.java]
public class Cat implements Animal {
private String name;
public Cat(String name) {
this.name = name;
}
@Override
public String sound() {
return "야옹";
}
public String getName() {
return name;
}
}
[ListExample.java]
import java.util.ArrayList;
import java.util.List;
public class ListExample {
public static void main(String[] args) {
List<Animal> list = new ArrayList<Animal>();
// 작성 위치 (1)
// 1. 뚜루를 추가
// 2. 나비를 추가
doWork(list);
}
private static void doWork(List<Animal> list) {
// 작성 위치 (2)
// 실행결과와 같이 출력이 되어야 한다. (enhance for문 사용)
}
}
[실행결과]
뚜루가 멍멍 소리를 낸다.
나비가 야옹 소리를 낸다.
[답안] list에 저장된 것은 interface Animal이며, 구현 객체의 이름을 꺼내기 위해서는 구현객체로 형변환을 해야 한다.
(1)에서 ArrayList에 추가한 것은 Dog, Cat 객체이므로 list에 저장된 Animal 타입을 Dog이나 Cat으로 강제 타입 변환을 해주면 이름(name)에 접근할 수 있다.
주님이 나에게 맡기신 달란트(헬라어로는 Talanton)를 남기고자 합니다. 주님에게 칭찬받는 종이 되기 위하여 주님이 주신 달란트를 땅에 묻어 두지 아니하고, 2배, 5배, 아니 10배를 남기고자 합니다. 나는 부족하지만, 주님께서 함께 하신다면 가능합니다. 하루를 기도로