Serializable 인터페이스를 구현한 클래스를 작성하면 해당 클래스의 모든 멤버 변수가 직렬화 대상이 된다.
객체가 스트림을 통해 직렬화 될 때는 객체에 있는 멤버변수가 직렬화 되는 것이다.
객체의 멤버변수 중에 직렬화 대상에 제외하고 싶다면 transient 키워드를 사용한다.
package kr.s28.iostream;
import java.io.*;
/*
* Serializable 인터페이스를 구현하면 해당 클래스를 객체 직렬화 대상이
되어 언제든지 객체 직렬화를 수행할 수 있다
* Serializable 인터페이스가 구현되지 않으면 객체 직렬화가 불가능하다.
*/
class Customer implements Serializable{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Customer(String name) {
this.name = name;
}
@Override
public String toString() {
return "당신의 이름은 " + name + "입니다";
}
}
public class SerialMain01 {
public static void main(String[] args) {
//직렬화할 객체를 생성
Customer c = new Customer("홍길동");
System.out.println("---- 객체 직렬화 하기 ----");
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
// 파일 생성
fos = new FileOutputStream("object.ser");
oos = new ObjectOutputStream(fos);
//객체 직렬화 수행
oos.writeObject(c);
System.out.println("객체 직렬화가 완료되었습니다.");
}
catch(IOException e) {
e.printStackTrace();
}
finally {
if (oos != null) {try {oos.close();} catch(IOException e ) {} }
}
}
}
package kr.s28.iostream;
import java.io.*;
public class SerialMain02 {
public static void main(String[] args){
System.out.println("----객체 역직렬화 하기----");
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
// 파일 읽기
fis = new FileInputStream("object.ser");
ois = new ObjectInputStream(fis);
//역직렬화 수행
Customer m = (Customer) ois.readObject() ;
System.out.println(m);
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
finally {
if(ois!=null) { try { ois.close();} catch(IOException e) {} }
if(fis!=null) { try { fis.close();} catch(IOException e) {} }
}
}
}
package kr.s28.iostream;
import java.util.*;
import java.io.*;
class UserInfo implements Serializable {
private String name;
private int age;
private String address;
// 생성자
public UserInfo (String name , int age , String address) {
this.address = address;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "이름 : " + name + ", 나이 : " + age + ", 주소 : " + address;
}
}
public class SerialMain03 {
public static void main(String[] args) {
// 직렬화할 객체 생성
UserInfo u1 = new UserInfo("John" , 20 , "서울시");
UserInfo u2 = new UserInfo("Sunny" , 18 , "부산시");
ArrayList <UserInfo> list = new ArrayList<UserInfo>();
list.add(u1);
list.add(u2);
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream("UserInfo.ser");
oos = new ObjectOutputStream(fos);
oos.writeObject(list);
System.out.println("직렬화가 성공적으로 완료되었습니다.");
}
catch(IOException e) {
e.printStackTrace();
}
finally {
if (oos != null) { try { oos.close();} catch(IOException e) {} }
if (fos != null) { try {fos.close();} catch(IOException e) {}}
}
}
}
package kr.s28.iostream;
import java.io.*;
import java.util.*;
public class SerialMain04 {
public static void main(String[] args) {
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream("UserInfo.ser");
ois = new ObjectInputStream(fis);
// 역직렬화 작업
ArrayList<UserInfo>list = (ArrayList<UserInfo>) ois.readObject() ;
System.out.println(list);
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
finally {
if (ois != null) {
try { ois.close(); } catch (IOException e) { }
}
if (fis != null) {
try { fis.close(); } catch (IOException e) { }
}
}
}
}
네트워크
네트워크란 다른 장치로 데이터를 이동시킬 수 있는 컴퓨터들과 주변 장치들의 집합이다.
네트워크의 연결된 모든 장치들을 노드라고 한다.
다른 노드에게 하나 이상의 서비스를 해주는 노드를 호스트라 부른다.
하나의 컴퓨터에서 다른 컴퓨터로 데이터를 이동시킬 때 복잡한 계층을 통해 전송되는데, 이런 복잡한 레이어의 대표적인 모델이 OSI 계층 모델이다.
OSI 계층 모델은 모두 7계층으로 이루어졌다.
데이터 통신을 이해하는데 OSI 계층 모델은 상당한 역할을 하지만, 인터넷 기반의 표준 모델로 사용하는 TCP/IP 계층 모델을 주로 사용하고 있다.
자바에서 이야기하는 네트워크 프로그래밍은 TCP/IP모델을 사용하고 있다.
InetAddress 클래스
InetAddress 클래스는 IP 주소를 표현한 클래스이다.
자바에서는 모든 IP 주소를 InetAddress 클래스를 사용한다.
URL 클래스
URL(Uniform Resource Locator)이란 인터넷에서 접근 가능한 자원의 주소를 표현할 수 있는 형식을 말한다
package kr.s29.network;
import java.io.*;
import java.net.*;
public class InetAddressMain01 {
public static void main(String[] args) {
BufferedReader br = null;
InetAddress iaddr = null;
String name = null;
try {
br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("도메인명 입력 > ");
name = br.readLine() ;
//Inet address를 이용해서 ip 주소 구하기
iaddr = InetAddress.getByName(name);
System.out.println("호스트 이름 > " +iaddr.getHostName());
System.out.println("호스트 ip 주소 > " + iaddr.getHostAddress());
System.out.println("----------------------------------");
//로컬 호스트 ip 주소
iaddr = InetAddress.getLocalHost() ;
System.out.println("로컬 호스트 이름 > " + iaddr.getHostName());
System.out.println("로컬 호스트 IP주소 > " + iaddr.getHostAddress());
} catch (UnknownHostException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
finally {
if(br != null)
try { br.close(); } catch (IOException e) { }
}
}
}
package kr.s29.network;
import java.io.*;
import java.net.*;
public class InetAddressMain02 {
public static void main(String[] args) {
BufferedReader br = null;
InetAddress[] addresses;
String name;
try {
br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("도메인명 입력 > ");
name = br.readLine() ;
//해당 도메인과 매핑되어있는 모든 주소를 읽어옴
addresses = InetAddress.getAllByName(name);
for ( int i = 0 ; i < addresses.length; i++) {
System.out.println("호스트 이름 > " + addresses[i].getHostName()
+ " , IP 주소 > " + addresses[i].getHostAddress());
}
}
catch (UnknownHostException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
finally {
if ( br != null ) {
try { br.close(); } catch (IOException e) { }
} //end of if
} //end of finally
}
}
package kr.s29.network;
import java.net.*;
public class URLMain01 {
public static void main(String[] args) {
try {
URL url = new URL ("http://java.sun.com/index.jsp?name=kim#content");
System.out.println("프로토콜 > " + url.getProtocol());
System.out.println("호스트 > " + url.getHost());
System.out.println("기본 포트 > " + url.getDefaultPort());
//포트를 명시하지 않아서 -1 반환
System.out.println("포트 > " + url.getPort());
System.out.println("패스 > " + url.getPath());
System.out.println("쿼리 > " + url.getQuery());
System.out.println("ref > " + url.getRef());
}
catch (MalformedURLException e) {
e.printStackTrace() ;
}
}
}
package kr.s29.network;
import java.net.*;
import java.io.*;
public class URLMain02 {
public static void main(String[] args) {
BufferedReader br = null;
BufferedReader input = null;
try {
// 콘솔에서 입력 처리
br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("웹사이트 주소 입력 > ");
String name = br.readLine();
URL url = new URL (name);
// 네트워크를 통해서 서버로부터 데이터를 읽어들여 입력 처리
input = new BufferedReader(new InputStreamReader(url.openStream(),"UTF-8"));
String line;
while((line =input.readLine()) != null) {
System.out.println(line);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if ( br != null) try { br.close();} catch(IOException e) { }
if ( input != null) try {input.close(); } catch (IOException e ) {}
}
}
}
1) 데이터베이스란?
2) DBMS
3) 관계형 데이터 베이스 (RDBMS)
1) SQL이란?
2) SQL문의 종류
3) SQL문의 작성
전체 칼럼의 데이터 읽기
SELECT empno, ename,job,mgr,hiredate,sal,comm,deptno FROM emp;
SELECT * FROM emp;
부분 칼럼의 데이터 읽기
SELECT ename,sal FROM emp;
주석 처리
/* SELECT * FROM emp; */
SELECT SYSDATE FROM dual;
SELECT ASCII('A') FROM dual;
SELECT ASCII(0) FROM dual;
SELECT 7 + 10 FROM dual;
연산하기
select ename,sal from emp;
select ename, sal, sal + 300 from emp;
SELECT empno,ename,job,comm FROM emp;
산술식의 NULL값
SELECT ename, (sal+comm)*12 FROM emp;
SELECT sal*12 ASal FROM emp;
SELECt sal*12 AS AsAl FROM emp;
SELECT sal*12 "Annual Salary" FROM emp;
SELECT ename || ' has $' || sal FROM emp;
연결 연산자와 null 값
SELECT ename || comm From emp;
SELECT DISTINCT deptno FROM emp;
SELECT empno , ename, sal FROM emp;
SELECT ename AS "이 름" , sal AS "월 급" FROM emp;
SELECT empno AS "사원번호", ename AS "사원이름" , sal AS "월급" , (sal*12) AS "연봉" FROM emp;
SELECT empno 사원번호, ename 사원이름 , sal 월급 , (sal*12) 연봉 FROM emp;
SELECT DISTINCT job FROM emp;
SELECT * FROM emp WHERE deptno = 10;
SELECT ename, job, deptno FROM emp WHERE ename = 'SMITH';
SELECT * FROM emp WHERE hiredate > '81-12-03' ;
81년 12월 3일 이후의 입사자
SELECT * FROM emp WHERE hiredate < '81-12-03' ;
81년 12월 3일 이전의 입사자
SELECT ename, sal, sal*12 ansal FROM emp WHERE sal*12 > 15000;
(주의) WHERE절에서는 알리아스를 사용할 수 없음!!
SELECT * FROM emp WHERE hiredate != '80-12-17';
SELECT * FROM emp WHERE hiredate <> '80-12-17';
SELECT * FROM emp WHERE hiredate ^= '80-12-17';
80년 12월 17일 입사자를 제외한 나머지 사람들 다 불러옴
특정 구간의 데이터를 불러온다
SELECT * FROM emp WHERE sal > 2000 AND sal <=5000 ;
SELECT * FROM emp WHERE sal >= 800 AND sal <= 3000 ;
SELECT * FROM emp WHERE sal BETWEEN 800 AND 3000;
SELECT * FROM emp WHERE sal NOT BETWEEN 800 AND 3000;
NOT BETWEEN ... AND ... > 부정을 하게 되면 그 데이터를 제외한 나머지 데이터들을 불러온다.
SELECT * FROM emp WHERE ename BETWEEN 'KING' AND 'SMITH';
SELECT * FROM emp WHERE ename NOT BETWEEN 'KING' AND 'SMITH';
SELECT * FROM emp WHERE sal IN (1300,2450,3000);
> 괄호 안에 있는 데이터를 갖고 있는 사람은 다 불러오기
SELECT * FROM emp WHERE sal NOT IN (1300,2450,3000);
NOT은 부정의 의미 > 괄호 안에 있는 데이터를 갖고 있는 사람 제외하고 다 불러오기
SELECT ename,mgr,deptno FROM emp WHERE ename IN ('ALLEN' , 'FORD');
SELECT ename,mgr,deptno FROM emp WHERE ename NOT IN ('ALLEN' , 'FORD');
SELECT ename, job, sal FROM emp WHERE empno = '7698';
SELECT ename, sal ,deptno FROM emp WHERE ename = 'SMITH';
SELECT ename, hiredate, sal FROM emp WHERE sal >= 2500 AND sal < 3500 ;
SELECT ename, job, sal FROM emp WHERE sal BETWEEN 2000 AND 3000;