Calendar클래스

 

캘린더클래스가 가지고 있는 static메서드 getInstance()를 이용해서 객체를 만들어야 함.

 

2017년 9월 13일 수요일 기준

Calendar클래스의 선언

Calendar cal = Calendar.getInstance();
System.out.println(cal);

 

연도(Year)

int year = cal.get(Calendar.YEAR);
System.out.println(year);

2017

월(Month)

월은 0~11월로 표기되기에 +1하여 출력

int month = cal.get(Calendar.MONTH);
System.out.println(month+1);

8+1

일(Date)

int date = cal.get(Calendar.DATE);
System.out.println(date);

13

요일

요일은 일월화수목금토 순으로 적용됨

int day = cal.get(Calendar.DAY_OF_WEEK);
System.out.println(day);

4(일월화수)

요일 중 수요일가져오기

System.out.println(Calendar.WEDNESDAY);

4

연도에 2016값을 넣은 후, year에 받아와 출력하기

cal.set(Calendar.YEAR, 2016);
year = cal.get(Calendar.YEAR);
System.out.println(year);

2016

Date(java.util패키지) 를 선언

국제공통적 방식의 출력

해당 지역 방식의 출력

Date d = cal.getTime();
System.out.println(d.toString());
System.out.println(d.toLocaleString());

캘린더객체로 데이트객체 선언

Tue Sep 13 10:41:07 KST 2016
2016. 9. 13 오전 10:41:07

위와 같은 방법을 통해 그리니치 표준시 0시를 출력하는 법

1970. 1. 1 0시 00분 00초

Date d3 = new Date(0);
System.out.println(d3.toLocaleString());

1970. 1. 1 오전 9:00:00

그리니치 표준시부터 지나간 시간을 long형으로 받기

long tt = d2.getTime();
System.out.println(tt);

1505266867639

cal값의 타임밀리즈 tt값을 대입

tt값이 대입된 cal의 year값을 출력

cal.setTimeInMillis(tt);
System.out.println(cal.get(Calendar.YEAR));

2017

 

 

 

필드 = static 상수를 의미함

'JAVA > JAVA 기본' 카테고리의 다른 글

JAVA DBMS(Data Base Management System)  (0) 2017.10.11
JAVA URL의 사용  (0) 2017.10.11
JAVA-Oracle JDBC  (0) 2017.10.11
Oracle DB  (0) 2017.10.11
JAVA ioStream  (0) 2017.10.11

JDBC

JDBC환경구성

윈도우-프리퍼런스-자바-빌드패스-클래스패스 배리어블-JRE_LIB

JRE_LIB의 위치를 잘 볼 것

oraclexe폴더 - app - oracle - product - 11.2.0 - server - jdbc - lib의 ojdbc6.jar를 복사

 

JRE_LIB이 있는 폴더 'lib' - ext 폴더에 ojdbc6.jar를 붙여넣음

 

Class.forName("oracle.jdbc.driver.OracleDriver");

를 테스트하여 try~catch문을 통해 try에 sysout("할말")을 적어 성공여부를 확인함

 

 

 

자바 프로그램

Statement

JDBC드라이버

DBMS(오라클)

DB(xe)

커넥션

connection

 PreparedStatement

String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "joeun";
String pw = "joeun";
  
Connection conn = null;
  
try {
     Class.forName("oracle.jdbc.driver.OracleDriver");
     System.out.println("드라이버 로딩 성공");
   
     conn = DriverManager.getConnection(url, user, pw);
     System.out.println("커넥션 연결 성공");
} catch (Exception e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
} finally {
     try {
          if(conn != null) conn.close();
     } catch (Exception e2) {
          // TODO: handle exception
          e2.printStackTrace();
     }
}

//상기 코드는 커넥션 연결 성공을 실험하는 코드이다.

 

DAO(Data Access Object)클래스

- 일반적으로 table당 1개씩 작성함

이하, StringBuffer를 통하여 사용. 실사용 안함.

 public void insert(String ssn, String name, int age) {
  Connection conn = null;
  Statement stmt = null;
  String sql = "";
  
  StringBuffer sb = new StringBuffer();
  sb.append("insert into member (ssn, name, age) values ");
  sb.append("('");
  sb.append(ssn);
  sb.append("', '");
  sb.append(name);
  sb.append("', ");
  sb.append(age);
  sb.append(")");
  sql = sb.toString();
  try {
   conn = DriverManager.getConnection(URL, USER, PW);
   stmt = conn.createStatement();
   int i = stmt.executeUpdate(sql);
   if(i > 0) System.out.println("입력성공");
  } catch (Exception e) {
   // TODO: handle exception
   e.printStackTrace();
  } finally {
   try {
    if(stmt != null) stmt.close();
    if(conn != null) conn.close();
   } catch (Exception e2) {
    // TODO: handle exception
    e2.printStackTrace();
   }
  }
 }

 

이하 실제로 사용되는 인서트 코드(PreparedStatement)

public void insert(MemberDTO dto) {
     Connection conn = null;
     PreparedStatement pstmt = null;
     String sql = "insert into member (ssn, name, age) values (?, ?, ?)";
  
     try {
          conn = DriverManager.getConnection(URL, USER, PW);
          pstmt = conn.prepareStatement(sql);
          pstmt.setString(1, dto.getSsn());
          pstmt.setString(2, dto.getName());
          pstmt.setInt(3, dto.getAge());
   
          int i = pstmt.executeUpdate();
          if(i > 0) System.out.println("입력성공");
     } catch (Exception e) {
          // TODO: handle exception
          e.printStackTrace();
     } finally {
          try {
               if(pstmt != null) pstmt.cancel();
               if(conn != null) conn.close();
          } catch (Exception e2) {
               // TODO: handle exception
               e2.printStackTrace();
          }
     }
}

 

select계통 JDBC코드

public ArrayList<MemberDTO> selectAll() {
     ArrayList<MemberDTO> list = new ArrayList<MemberDTO>();
     Connection conn = null;
     PreparedStatement pstmt = null;
     String sql = "select * from member";
     ResultSet rs = null;
    
     try {
          conn = DriverManager.getConnection(URL, USER, PW);
          pstmt = conn.prepareStatement(sql);
          rs = pstmt.executeQuery();
         
          while(rs.next()) {
              String ssn = rs.getString("ssn");
              String name = rs.getString("name");
              int age = rs.getInt("age");
             
              MemberDTO dto = new MemberDTO(ssn, name, age);
              list.add(dto);
          }
         
     } catch (Exception e) {
          // TODO: handle exception
          e.printStackTrace();
     } finally {
          closeAll(conn, pstmt, rs);
     }
     return list;
}

상기 코드에서 resultSet은 hashSet과 동등한 방식으로 작동함


트랜젝션

- ACID

 

ACID처리의 예시

A의 계좌에서 B에게 1억을 송금

A의 계좌에서 -1억

B의 계좌에서 +1억

A의 계좌에서 1억 차감 지연

B의 계좌에 1억 증가 성공

A의 계좌에서 1억 차감 확정

 

commit

rollback

savepoint

트랜젝션 컨트롤 랭귀지(TCL)

conn.setAutoCommit(false);

을 이용하여 오토커밋을 막고,

커밋과 롤백을 이용하여 처리함.

 

connection conn = null;

preparedstatement pstmt = null;

String sql1 = "update bank set balance = balance - ? where bid=?";

String sql2 = "update bank set balance = balance + ? where bid=?";

boolean ok = false;

 

try{

conn = DriverManager.getConnection(URL, USER, PW);

pstmt = conn.prepareStatement(sql);

pstmt.executeupdate();

ok = true;

try{

if(ok == true) conn.commit();

else conn.rollback();

이후 sql문 날린 후,

 

팁. BD에서 default 0 으로 기본값을 0으로 할 수 있음.

 

이클립스에서 오라클DB실행법

데이터 소스 익스플로러 - 데이터베이스 커넥션 - 오라클 - 뉴 드라이버 디피니션

name/type : 오라클 신 드라이버 11버전

JAR List : ojdbc14 삭제 - add JAR/Zip : java\jre1.8.0_141\lib\ext\ojdbc6.jar

Properties : connection URL을 jdbc:oracle:thin:@localhost:1521:xe로 변경

database Name 을 xe로 변경

아이디/패스워드 입력

ok후 테스트커넥션

이후 oracle에 우클릭 후 커넥션 해주면 됨.

 

이후 작업을 위해서 우클릭 - SQL File - 파일네임입력 - 데이터베이스 서버 타입(oracle_11) - 커넥션 프로필 네임(new Oracle) - database name(xe)

 

이후 원하는 명령어를 입력하고 블럭지정 후 alt+x로 실행

세미콜론을 찍어서는 안됨.

 

테이블에서의 기본키

- 테이블에서 특정 레코드 하나를 식별할 수 있게 하는 컬럼

- 유니크 제약조건, not null제약조건

 

외래키

- 특정 테이블A 에서 기본키로 지정되어 있어야 함

- 다른 테이블에서 컬럼으로 사용

- 서로 다른 테이블간에 종속관계를 생성시켜주는 키

- A테이블에 있는 데이터이거나, null값만 들어갈 수 있음.

 

외래키와 본 테이블간의 연결은 join

 

테이블 생성 - 외래키테이블 생성 - 연결

CREATE TABLE employee(
eid varchar2(6) PRIMARY KEY,
did varchar2(6),
eName varchar2(18)
)

 

CREATE TABLE depart(
did varchar2(6) PRIMARY KEY,
dName varchar2(21)
)

 

alter table employee add constraint fk_employee foreign key(did)
references depart(did)

 

insert into employee values ('e001', null, '홍길동')
insert into employee values ('e002', 'd002', '김유신')
insert into employee values ('e003', 'd003', '김연아')
insert into employee values ('e004', 'd004', '이승만')

insert into depart values ('d001', '인사부')
insert into depart values ('d002', '비서실')
insert into depart values ('d003', '홍보실')
insert into depart values ('d004', '총무부')
insert into depart values ('d005', '관리부')
insert into depart values ('d006', '영업부')
insert into depart values ('d007', '연구실')

 

commit

 

select * from employee, depart

select * from employee e, depart d where e.did = d.did

ㄴ 상기 코드는 임플로이와 디파트의 같은 did값을 가진 값의 추출

 

select e.eid, e.ename, d.dname from employee e, depart d where e.did = d.did

ㄴ (e키조인) 상기 코드는 임플로이와 디파트의 같은 did값을 가진 값을 추출하되, e.eid, e.ename, d.did만을 추출

 

select * from depart
select * from employee

 

inner join/ outer join 사용

select e.eid, e.ename, d.dname from employee e inner join depart d on e.did = d.did

ㄴ 상기 코드는 위의 e키조인과 같음

select e.eid, e.ename, d.dname from employee e inner join depart d on e.did = d.did

ㄴ 상기 코드는 innerjoin에 '왼쪽'인 employee 값을 전부 출력함

select e.eid, e.ename, d.dname from employee e right outer join depart d on e.did = d.did

ㄴ 상기 코드는 innerjoin에 '오른쪽'인 depart값을 전부 출력함

 

 

 

생년월일 입력,조회하는 함수

create table agetest(
birth date
)

insert into agetest values ('2010-12-17')

select * from agetest

select floor(months_between(sysdate, birth)/12) age from agetest

select floor(months_between(sysdate, '1991-08-30')/12) age from dual;

months_between = 두 요소값의 사이 시간을 개월수로 환산

sysdate = 현재시간 호출

floor = 소숫점 버리기

 

한국나이 출력하는 코드

select (cyear-birth)+1 한국나이
from (select to_char(birth, 'yyyy') birth, to_char(sysdate, 'yyyy') cyear from agetest)

 

트리거

- 특정 기능이 실행되었을 때 또 다른 기능을 추가적으로 실행할 필요가 있을 때.

create or replace trigger afterinsertmember

after insert on member for each row

beclare

begin

insert into member_back

(ssn, name, age) values (:new.ssn, :new.name, :new.age);

end;

/

sfterinsertmember = 이름

after = 작업 후에 트리거를 발동하겠다. insert = insert작업 후에 member = 멤버 테이블에서 for each row = 매번 실행할 것


오라클 DB의 데이터 백업 방법

exp userid=아이디/비밀번호 @xe file=c:\파일명.확장자

exp userid=아이디/비밀번호 @xe file=c:\dump.dmp

tables = member(member, employee, depart)

멤버, 임플로이, 디파트 테이블만 백업받으려면 마지막줄을 추가사용

를 사용하여 백업을 하며, 일반 커맨드창에서 하여야 함.(db에 연결해서는 안됨)

덧. 비밀번호 후 @xe는 붙여써야 하나 메일주소로 입력되기에...

 

백업된 데이터 사용 방법

imp system/sys1234 @xe

fromuser=joeun

touser=system

file=c:\dump.dmp

상기 코드를 통하여 system계정을 이용하여 joeun의 자료 dump.dmp를 system계정에 업로드할 수 있음.

 

view = 가상 테이블

view의 작성법

create or replace view view_emp

as

select e.eid, e.ename, d.dname from

employee e inner join depart d

on e.did = d.did

 

view에는 새로운 자료의 추가는 불가능하나,

자료의 변경 및 삭제는 가능함.

그 방법은 통상의 방법으로 가능 하며

view의 삭제는

drop view를 통하여 진행하게 됨.

 

left outer join의 이용

create or replace view view_empleft

as

select e.eid, e.ename, d.dname from

employee e left outer join depart d

on e.eid=d.did

 

create or replace view view_empleft

as

select e.eid, e.ename, d.dname from

employee e left outer join depart d

on e.eid=d.did

where e.did is null

with check option;

 

with에 view용 옵션을 부여할 수 있음.

create or replace view view_member2

as

select * from member2 with read only;

상기는 읽기전용

 

index

ㄴ 테이블 내의 자료를 빠르게 찾아내기 위한 방식. 조건을 만들어 부여하는 것.

ㄴ 인덱스의 제작

create index idx_member

on member (name, age)

 

stored procedure, 저장 프로시저

ㄴ특정 기능을 축약하여 저장하는 기능

create or replace procedure insertmember (

myssn in varchar2,

myname in varchar2,

myage in number

)

as

begin

insert into member (ssn, name, age)

values (myssn, myname, myage);

end;

/

를 사용하여 저장 프로시저 insertmember를 작성할 수 있음.

사용은 아래와 같음

exec insertmember (ssn값, name값, age값);

 

상기 저장 프로시저를 이용하여 이클립스에서 사용하는 법은

Connection conn = null;
CallableStatement cstmt = null;
String sql = "{call insertmember(?,?,?)}";
try {
     conn = DriverManager.getConnection(URL, USER, PW);
     cstmt = conn.prepareCall(sql);
     cstmt.setString(1, dto.getSsn());
     cstmt.setString(2, dto.getName());
     cstmt.setInt(3, dto.getAge());

 

사용자 함수 제작

0.9를 곱하고 반환

create or replace function fn_haha (price in number)

return number

is

begin

return price*0.9;

end;

/

select fn_haha(100000) from dual;

판매금액*할인율

= 할인가격 반환

create or replace function fn_sale (price in number, sale in number)

return number

is

begin

return price*sale;

end;

/

select fn_sale(35000, 0.9) from dual;

 

자신이 가진 오브젝트 정보

select object_name, object_type, timestamp

from user_objects;

로 확인가능

 

현재 접속중인 사용자의 테이블을 확인하는 법(카탈로그 정보 조회)

select * from user_catalog;

 

데이터 사전 = data dictionary

ㄴ system catalog

ㄴ 데이터에 대한 데이터

ㄴ meta data

'JAVA > JAVA 기본' 카테고리의 다른 글

JAVA URL의 사용  (0) 2017.10.11
JAVA Calender클래스  (0) 2017.10.11
Oracle DB  (0) 2017.10.11
JAVA ioStream  (0) 2017.10.11
JAVA File클래스  (0) 2017.10.11

https://www.oracle.com/index.html

오라클 로그인

http://www.oracle.com/technetwork/database/enterprise-edition/overview/index-091043.html

오라클 데이터베이스 11g 릴리즈2

다운로드

Oracle Database 11g Express Edition

 

오라클 DB삭제

내컴퓨터 - 우클릭 - 관리 - 서비스 및 응용프로그램 - 서비스 - OracleServiceXe, OracleXETNSListener 중지

 

regedit - HKEY로컬머신 -

소프트웨어 - ODBC삭제 - ORACLE삭제

시스템 - 컨트롤셋001 - 서비스 - 오라클 관련 레지스트리 삭제

컨트롤셋002, 커런트컨트롤셋 역시 마찬가지

 

내컴퓨터 - 속성 - 고급시스템설정 - 환경변수 - path

C:\oraclexe\app\oracle\product\11.2.0\server\bin;;

부분만 지움

 

pc재부팅

 

바탕화면 아이콘, 시작프로그램의 프로그램 뭉치 역시 삭제

c드라이브의 오라클xe 삭제

오라클xe setup파일을 실행하여 remove

 

 

cmd에서 오라클 접속

cmd - sqlplus

enter user-name : system(처음엔 시스템)

enter password : 비밀번호 입력

sqlplus 아이디/비밀번호 ->로도 가능함.

계정 생성

create user 유저명 identified by 비밀번호;

다른 계정에 접속

conn 아이디/비밀번호;

현재 계정 확인

show user;

계정에 권한부여

grant connect, resource, dba to 계정명;

sql을 전부 사용한 후에는 quit 를 치고 엔터를 쳐 정상종료시킬 것

 

레코드 하나하나가 하나의 객체를 의미함

아래는 테이블을 만드는 것

no

이름

수학

영어

비고

1

 

 

 

 

2

 

 

 

 

3

 

 

 

 

 

테이블 생성

create

create table 테이블명(

ssn varchar2(6) primary key,

name varchar2(15),

age number(3)

);

테이블명을 가진 테이블 생성

ssn이라는 범주(컬럼)명 생성. char형태, 6바이트

name이라는 범주명 생성. char형태, 15바이트

age라는 범주명 생성. int형태,  3자리까지 입력

원하는 곳에 primary key를 넣어 ㅔㅏwl

테이블 생성시 pk부여

 

create table 테이블명(

ssn varchar2(6),

name varchar2(15),

age number(3),

constraint pk_number primary key(ssn)

);

 

테이블 생성후 pk부여

 

alter table member add constraint pk_member primary key(ssn)

 

테이블 삭제

drop

drop table 테이블명;

테이블 삭제

기본키 설정

alter

primary key

alter table 테이블명 modify ssn varchar2(6) primary key;

기본키는 자료의 주민등록번호와도 같은 기능을 함.

(식별 및 중복방지, 데이터를 반드시 투입하여야 함)

데이터 입력

insert

insert into 테이블명 (ssn, age, name) values ('ssn', 나이, '이름');

테이블에 ssn, age, name 순서대로 ssn과 나이, 이름을 입력

데이터 입력(약식)

insert into 테이블명 values('ssn', '이름', 나이);

테이블 생성시에 ssn, name, age순으로 적혀있기에,

입력시에도 그 순서를 맞춘다면 입력이 됨.

데이터 검색

select

select * from 테이블명

select ssn, name, age from 테이블명

* : 모든 컬럼정보 열람

ssn, name, age를 가져와 열람

데이터 입력 확정

commit

commit;

입력한 데이터의 확정

데이터 롤백

rollback

rollback

최종 commit상태로 되돌림

sql종료

quit

quit

자동으로 commit이 됨

컬럼 바꾸어 출력

as

select ssn as 주민번호, name as 이름, age as 나이 from member;

as를 통해서  컬럼을 바꾸어 출력할 수 있음.

as는 생략할 수 있음

중복자료 제외하고 출력

distinct

select distinct name from 테이블명;

부서명 등의 확인을 위해 사용하면 좋음

distinct : 중복을 허용하지 않음

정렬

order

select * from 테이블명 order by ssn asc;

select * from 테이블명 order by age desc;

select * from 테이블명 order by age desc, name desc;

order : 정렬 명령어

asc : 오름차순

desc : 내림차순

갯수 카운트

count

select count(ssn) from 테이블명;

몇개인지 세주는 기능

특정 값 추출

where

select * from 테이블명 where age=1;

select * from 테이블명 where name='홍길동';

select * from 테이블명 where name='이순신' and age>10;

where : 특정 값을 가진 자료만 추출하는 기술.

age가 1인 자료만 추출

name이 홍길동인 사람만 추출

name이 이순신이고 age가 10이상인 사람만 추출

특정 값 추출 다중사용

select * from (select * from member where name='이순신') where

age > 10;

특정 값 추출의 다중 사용

name이 홍길동인 사람 중 age가 10 초과인 사람

null값 검색

null

select * from 테이블명 where age is null;

select * from 테이블명 where age is not null;

age가 null값인(비어있는) 사람을 추출

age가 null값이 아닌 사람을 추출

부분자료로 검색

like

select * from 테이블명 where name like '_순신';

select * from 테이블명 where name like '_순_';

select * from 테이블명 where name like '%신';

이름이 '?순신' 인 사람을 검색

이름이 '?순?' 인 사람을 검색

이름이 '~~신' 인 사람을 검색

이미 적용된 자료의 변경

update

set

update member set name='고길동', age=44

where name='세종' and age is null;

update member set name='세종' where ssn='세종';

update member set ssn='m004' where name='세종';

이름이 '세종'이고 나이가 null값인 데이터를

이름은 '고길동'으로, 나이를 44로 변경함

ssn이 '세종'인 값의 name을 '세종'으로 변경함

name이 '세종'인 값의 ssn을 'm004'로 변경함

자료의 삭제

delete

delete from 테이블명 where name like '이%';

delete from 테이블명 where name is null;

name이 '이'로 시작하는 이름을 가진 자료의 삭제

name이 null값인 데이터의 삭제

테이블 묘사

desc

desc 테이블명;

 

컬럼명 변경

rename

alter table member rename column ssm to ssn;

컬럼 ssm을 ssn으로 변경


'JAVA > JAVA 기본' 카테고리의 다른 글

JAVA Calender클래스  (0) 2017.10.11
JAVA-Oracle JDBC  (0) 2017.10.11
JAVA ioStream  (0) 2017.10.11
JAVA File클래스  (0) 2017.10.11
JAVA Thread  (0) 2017.10.11

파일 입력/출력(IO)

 

스트림은 First In, First Out(fifo)구조를 통함

(선입선출법)

 

자바프로그램

 

현재 프로그래머가 작성중인 자바 프로그램

 

 

 

입력

inputstream

장치

 

-키보드

-마우스

-메모리

-프린터

-파일

-DB 등

출력

outputstream

 

스트림의 종류

1. 전송되는 데이터의 크기로 분류

- 바이트스트림 : 1바이트 전송 : 멀티미디어 파일 등에 사용 ~Stream으로 끝남

- 문자스트림 : 2바이트 전송 : 텍스트파일에 사용 ~er로 끝남

2. 특별한 기능을 갖는 스트림 여부

- 장치와 직접적으로 연결이 되는지 여부에 따라 나뉨

- 노드스트림 : 장치와 직접적으로 연결되는 스트림

- 필터스트림 : 장치와 직접적으로 연결하면 안 됨. 특별한 기능을 가지고 있음

 

범주

클래스명

설명

기타

byte스트림

InputStream

입력에 관한 부모클래스

 

OutputStream

출력에 관한 부모클래스

 

문자 스트림

Reader

입력에 관한 부모클래스

 

Writer

출력에 관한 부모클래스

 

 

바이트스트림별 사용시기

필터스트림

좀 더 빠른 속도를 위해서

ex) 일반 스트림의 속도를 더 빠르게 함

데이터스트림

특정 데이터를 전달하기 위해서

ex) 특정 데이터값(int, float, String등)을 전달

오브젝트스트림

특정 오브젝트를 전달하기 위해서

ex) 특정 오브젝트(Dog클래스 등의 클래스 내용을 전달함)

ex2) new Dog("D001", "name", 3); 의 전달도 가능

 

 

일반적인 경우

자바프로그램

car.jpg

cpcar.jpg

 

필터스트림의 사용

자바프로그램

필터스트림

​노드스트림

car.jpg

필터스트림

​노드스트림

cpcar.jpg

InputStream in = null;
BufferedInputStream bis = null;
OutputStream out = null;
BufferedOutputStream bos = null;

in = new FileInputStream("c:\\car.jpg");
bis = new BufferedInputStream(in);
   
out = new FileOutputStream("c:\\cp3car.jpg");
bos = new BufferedOutputStream(out);
   
int what = -1;
   
while(true) {
     what = bis.read();
     if(what == -1) {
           break;
     }
     bos.write(what);
}
System.out.println("end");

필터스트림은 '항상' 노드스트림보다 먼저 close(); 되어야 함.

자바 프로그램에서 가까운쪽의 스트림부터 제거해나가야 함.

​입/출력은 자바프로그램에서 가까운 쪽을 이용해서 사용함.

 

데이터스트림의 사용

자바프로그램

​데이터 인풋

​스트림

​노드스트림

a.txt

데이터 아웃풋

​스트림

​노드스트림

a.txt

  OutputStream out = null;
  DataOutputStream dos = null;
  
  try {
   out = new FileOutputStream("c:\\a.txt");
   dos = new DataOutputStream(out);
   
   dos.writeInt(365);
   dos.writeFloat(3.14F);
   dos.writeUTF("hello");
  }

  InputStream in = null;
  DataInputStream dis = null;
  
  try {
   in = new FileInputStream("c:\\a.txt");
   dis = new DataInputStream(in);
   int year = dis.readInt();
   float pie = dis.readFloat();
   String hello = dis.readUTF();
   System.out.println(year);
   System.out.println(pie);
   System.out.println(hello);
  }

 

 

인풋스트림리더의 사용

자바프로그램

버퍼드스트림

인풋스트림리더

노드스트림 

memo.txt

InputStream in = null;
InputStreamReader isr = null;
BufferedReader br = null;
  
try {
     in = new FileInputStream("c:\\memo.txt");
     isr = new InputStreamReader(in);
     br = new BufferedReader(isr);
   
     while(true) {
          String str = br.readLine();
          if(str == null) {
               break;
          }
          System.out.println(str);
     }
}

 

오브젝트스트림의 사용

자바프로그램

오브젝트스트림

노드스트림

 

자바프로그램

오브젝트스트림

노드스트림

 

OutputStream out = null;
ObjectOutputStream os = null;
  
try {
     out = new FileOutputStream("c:\\show.txt");
     os = new ObjectOutputStream(out);
   
     os.writeObject(new Dog("d001", "happy", 4));
     os.writeObject(new Dog("d002", "merry", 10));
}

InputStream in = null;
ObjectInputStream ois = null;
  
try {
     in = new FileInputStream("c:\\show.txt");
     ois = new ObjectInputStream(in);
   
     Dog d1 = (Dog)ois.readObject();
     Dog d2;
     Object obj = ois.readObject();
     if(obj instanceof Dog) {
          d2 = (Dog)obj;
          System.out.println(d2);
   }

 

문자스트림의 사용

자바프로그램

노드스트림

go.txt

노드스트림

go.txt

Writer out = null;
Reader in = null;
  
try {
     out = new FileWriter("c:\\go.txt");
     out.write("hello");
     out.write(System.getProperty("line.separator"));
     out.write("hi");
   
     out.flush();
   
     in = new FileReader("c:\\go.txt");
     char[] arr = new char[2];
     int leng = -1;
   
     while(true) {
          leng = in.read(arr, 0, arr.length);
          if(leng == -1) {
               break;
          }
          for(int i = 0; i < leng; i++) {
               System.out.print(arr[i]);
          }

     }
}

out.write(System.getProperty("line.separator"));

는 줄바꿈을 만드는 코드이다.

이는 ("\r\n");역시 마찬가지이나, 위의 것이 모든 운영체제에서 작동한다.

out.flush();

는 문자스트림에서 인풋과 아웃풋을 하나에서 같이 사용할 때, 꼭 사용해야 하는 메소드이다.

 

문자스트림 bufferedWriter의 사용

자바프로그램

버퍼드라이터

노드스트림

must.txt

자바프로그램

버퍼드리더

노드스트림

must.txt

Writer out = null;
BufferedWriter bw = null;
Reader in = null;
BufferedReader br = null;
  
try {   
     out = new FileWriter("c:\\must.txt");
     bw = new BufferedWriter(out);
   
     bw.write("안녕하세요");
     bw.newLine();
     bw.write("hello world");
     bw.newLine();
   
     bw.flush();
   
     in = new FileReader("c:\\must.txt");
     br = new BufferedReader(in);
   
     while(true) {
          String msg = br.readLine();
          if(msg == null) {
               break;
          }
          System.out.println(msg);
     }
}

 

ioStream 기본 작성법

InputStream in = null;

OutputStream out = null;

try~catch문 작성

첫번째 try~catch문에 finally 추가

finally에 try~catch문 추가

finally내부 try~catch문에 if문을 사용

    if(in != null) {
     in.close();
    }
    if(out != null) {
     out.close();
    }

첫번째 try에 해야 할 작업을 입력

 

팁.

System.currentTimeMillis();은

1970년 1월 1일 0시 0분 0초 000을 0으로 가정함.

1970년 1월 1일 0시 0분 0초 001은 1이 됨

 

팁.

중요한 값이기에 io스트림 사용을 막고 싶다면, transient를 사용하면 된다.

ex) private transient int age;

 

팁.

c:\\memo.txt

"c:"+file.separator+"memo.txt"처럼 넣어주는 것이 호환성에 좋다.

file.separator 는 \\와 같은 기능을 한다.

'JAVA > JAVA 기본' 카테고리의 다른 글

JAVA-Oracle JDBC  (0) 2017.10.11
Oracle DB  (0) 2017.10.11
JAVA File클래스  (0) 2017.10.11
JAVA Thread  (0) 2017.10.11
JAVA 컬렉션 프레임워크  (0) 2017.10.11

파일(File)클래스

- 파일을 관리하기 위해서 만들어짐

- 실제 파일, 디렉토리(폴더)까지 포함하여 파일클래스라고 함.

- 디렉토리를 생성, 삭제

- 파일 삭제 가능, 생성은 불가능(파일 객체와 파일은 다름)

File file1 = new File("c:" + File.separator + "AAA");

     if(!file1.exists()) {
     file1.mkdirs();
     }else {

          file1.delete();

     }

file1을 선언하고,

file1이 없다면 c드라이브에 AAA라는 이름의 폴더를 생성할 것

else라면 AAA라는 폴더를 지울 것

public void me2(String path) {
     File file2 = new File("c:" + File.separator + path);
     file2.delete();
}

메인메서드에서 me2를 호출할 때, 폴더명을 입력하여, 그 폴더명을 c드라이브에서 제거하는 메서드

public void me3(String path1, String path2) {
     File file3 = new File("c:" + File.separator + path1);
     File file4 = new File("c:" + File.separator + path2);
     file3.renameTo(file4);
}

path1과 2를 입력받고,

path1을 이름으로 가진 폴더를

path2에 기록된 이름으로 변경하는 기능을 가진 메서드


'JAVA > JAVA 기본' 카테고리의 다른 글

Oracle DB  (0) 2017.10.11
JAVA ioStream  (0) 2017.10.11
JAVA Thread  (0) 2017.10.11
JAVA 컬렉션 프레임워크  (0) 2017.10.11
JAVA 에러와 예외, try~catch, throw  (0) 2017.10.11

Thread

동시에 실행해야 하는 일이 있을 때 스레드를 사용함

메인스레드

사용자

생성스레드 

사용자

생성스레드

클래스

클래스

클래스

스택

스택

스택

 

스레드끼리는 클래스 및 힙영역의 데이터를 주고받을 수 있음

단. 스택영역의 데이터는 주고받을 수 없음

 

스레드끼리는 데이터를 주고받는 과정에서 오류가 발생할 수 있으며,

이는 스레드 동기화를 통하여 해결하여야 한다.

 

Thread ct = Thread.currentThread();

String tName = ct.getName();
System.out.println(tName);

 

스레드ct에 현재 사용중인 스레드를 받아와, tName에 그 스레드의 이름값을 투입하여 출력함.

 

스레드의 구현

스레드 클래스 생성 - 스레드 객체 생성 - 스레드 생성

 

스레드 생성 방법

 

1. Thread 클래스를 상속(extends)하는 클래스를 이용

ㄴ 소스 - 오버라이드/임플리먼츠 메서드 - run()을 오버라이드하여 사용

ㄴ 스레드클래스명 변수명 = new 스레드클래스명

ㄴ 변수명.start(); -현재 시점에서 스레드가 생성됨

 

2. Runnable인터페이스를 구현(implements)하는 클래스를 이용

ㄴ 스레드클래스명 러너블변수명 = new 스레드클래스명

ㄴ Thread 변수명 = new Thread(러너블변수명);

 

스레드의 생애

1. 스레드 생성(start() 호출)

2. runnable상태

3. running 상태

ㄴ Thread.sleep();등을 만나면 Blocked 상태로 변경

ㄴ 블락상태의 스레드는 블락이 끝난 후 러너블상태로 돌아감

4. 스레드 종료(Dead상태)

 

스레드 동기화

1. join()메서드

ㄴ join()메서드를 호출한 스레드의 작업이 끝날때까지 현재의 스레드는 작업을 멈춘다.

ㄴ 메인스레드에서 t1.join();으로 호출할 시, t1스레드의 작업이 종료될때까지 메인스레드의 작업이 멈춤

메인스레드 이외에의 스레드 동기화 방법

ex) 스레드 a가 끝날때까지 스레드 b를 멈춰라!

멈춰야 할 스레드 bbbbbbbbbbbaaaabbbbbbbbbbbbb인 타임라인이 그려짐.

이 경우 스레드b에서 작업을 시행해야 함.

스레드 b에서 a.join();을 선언함

a.join();을 선언하기 위해서 인스턴스변수

Thread a;를 선언

Thread a;를 선언하고, 사용하기 위해서 사용자 생성자(컨스트럭터 유징필드)를 선언해줌.

사용자 생성자를 선언하였음. 해당 사용자 생성자를 사용하였으니 스레드 b에 a값을 넣어줌

ChildThread3 rt3 = new ChildThread3(a);

 

 

 

 

메인 스레드

package kr.co.joeun;

public class MainEx {
     public static void main(String[] args) {

          ChildThread at1 = new ChildThread(); //스레드 1을 만듦 //스레드1은 스레드 상속
          t1.start();

          ChildThread3 rt3 = new ChildThread3(at1); //스레드 3을 만들 때 스레드 1을 넣어줌 //스레드3은 임플리먼츠 러너블
          Thread at3 = new Thread(rt3);
          t3.start();

     }

}

멈추어야 할 스레드

package kr.co.joeun;

public class ChildThread3 implements Runnable {


     Thread t1; //스레드 1호출(스레드 1은 스레드 3을 멈춘 동안 작동할 스레드) 

     public ChildThread3(Thread t1) {
          super();
          this.t1 = t1;
     } //스레드 1의 사용자 생성자(컨스트럭터 유징필드)

 

     @Override
     public void run() {
          try {
               t1.join();
          } catch (InterruptedException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
          }

     } //t1.join의 트라이캐치

}

상기 표의 설명

1. 스레드 at3의 생성자에 요구되는 값 t1

2. 스레드 at3의 변수 t1에  메인클래스에서 스레드 at1값을 넣어줌.

3. 스레드 at3이 실행되는 중 at1에서 (스레드3의 변수)t1을 거친 스레드at1이 join();을 요청함.

4. 스레드 at3은 잠시 중지되고 스레드at1이 실행됨

 

 

데이터의 동기화(하나의 작업을 입/출력까지 하나로 묶어서 처리하는 것)를 임계영역별로 나누어 동기화 처리

해당 동기화 처리는

메서드를 syncronized 처리함.

public syncronized void me1(){}

 

동기화 블럭의 사용법

메서드 내부의 영역에 서라운드위드 - 싱크로나이즈드 - mutax를 this로 수정, 또는 Object obj = new Object(); 등의 선언 이후 obj를 넣어서 동기화 블럭의 열쇠로 활용

public void plusNum(int add) {
     synchronized (this) {
          num += add;
     }
}

등의 방식으로 사용

 

접근순서에 대한 동기화

 

if문, try~catch, 동기화 블록, notify(); , waiting(); 등의 문법을 사용

 

if문을 통하여 wait();를 실행할 지 정하고, wait문은 싱크로나이즈드로 감싸줌(서라운드 위드-싱크로나이즈드)

 

notify();가 실행되면 wait();문에 의한 대기를 끝냄. notify문 역시 싱크로나이즈드로 감싸줌.

 

작가가 글을 올리면 독자가 읽는다!

일 때, 독자가 먼저 글을 읽기 위해 접근할 경우 wait문으로 정지시키고

작가가 글을 올리면 notify문으로 독자의 wait를 해제시켜 주는 형식.

 

 

익명으로 만든 스레드

     new Thread(new Runnable() {
          @Override
          public void run() {
               // TODO Auto-generated method stub
               System.out.println("익명으로 만든 스레드");
          }
     }).start();

'JAVA > JAVA 기본' 카테고리의 다른 글

JAVA ioStream  (0) 2017.10.11
JAVA File클래스  (0) 2017.10.11
JAVA 컬렉션 프레임워크  (0) 2017.10.11
JAVA 에러와 예외, try~catch, throw  (0) 2017.10.11
JAVA 스캐너클래스, DTO클래스, 내/외부클래스  (0) 2017.10.11

큰 숫자의 처리

ㄴlong형 이상의 큰 수를 처리할 때 사용하는 방법

복잡한 실수의 처리

ㄴ double 이상의 복잡한 실수를 처리할때 사용하는 방법

목차

선언

예시코드

설명

큰 숫자의 선언

BigInteger 이용하여 선언 

BigInteger bin1 = new BigInteger("10000000");

bin1에 큰 수를 투입

복잡한 실수의 선언

BigDecimal 이용하여 선언

BigDecimal bd1 = new BigDecimal("1.6");

bd1에 복잡한 실수를 투입

숫자의 더하기

bin1.add 이용하여 선언

BigInteger result = bin1.add(bin2);

result에 bin2와 bin1을 더한 값을 투입

숫자의 빼기

bin1.substract 이용하여 선언

result = bin1.subtract(bin2);

result에 bin2를 bin1으로 뺀 값을 투입

숫자의 곱하기

bin1.multiply 이용하여 선언

result = bin1.multiply(bin2);

result에 bin2를 bin1과 곱한 값을 투입 

숫자의 나누기

bin1.divide 이용하여 선언

result = bin1.divide(bin2);

result에 bin2를 bin1으로 나눈 값을 투입

숫자의 나누기/나머지값 받기

bin1.divideAndRemainder 이용하여 선언

BigInteger[] arr = bin1.divideAndRemainder(bin2);

arr에 bin2를 bin1으로 나눈 값과 나머지값을 투입

 

랜덤함수의 사용

Random rnd = new Random();

int result = rnd.nextInt(2);

0부터 2 미만(1까지)의 랜덤값을 뽑아내는 코드

 

min~max까지의 값을뽑아내고 싶을 때

rnd.nextint(max-min+1) + min

 

자바 컬렉션 프레임워크

자료구조론 : 최소한의 공간에 최대의 데이터를 저장하고, 가장 빠른 속도의 서비스를 구현할 수 있는 구조론

ㄴ 자료구조론을 클래스로 만든 것 = 자바 컬렉션 프레임워크

 인터페이스

 List

 구현체

 ArrayList

 사용

 ArrayList<String> list1 = new ArrayList<String>();

 ArrayList<Dog> list11 = new ArrayList<Dog>();

 ArrayList<String> list2 = new ArrayList<String>();

 list2.add(new String("hello"));

 list2.add("hello");

 list2.add("hello");

 list2.get(0);

 list2.indexOf(요소값);

 list2.remove(삭제할값);

 list6.remove(new Integer(2));

 list7.clear();

 설명

 어레이리스트에 String값만 넣겠음.

 어레이리스트에 Class<Dog>값만 넣겠음

 list2에 "hello"를 넣겠음.

 int = Integer

 Char =

 상기 2가지 제외, 나머지는 첫글자를 대문자로 변경해서 사용할 수 있음.

 어레이리스트의 크기는 size를 통해 잴 수 있음.

 remove에서 숫자를 넣으면 해당 인덱스의 값을 삭제.

 remove에서 특정값을 지우기 위해서는 new 자료형(삭제할값)으로 삭제가능

 clear는 배열 내부를 전부 삭제하는 기능

 

 인터페이스

 Set

 구현체

 HashSet

 사용

 HashSet<Integer> hs6 = new HashSet<Integer>();

 ArrayList<Integer> list = new ArrayList<Integer>();

 Iterator<Integer> it = hs6.iterator();

 while (it.hasNext()) {
      list.add(it.next());
 }

 설명

 중복데이터를 허용하지 않음

 순서가 존재하지 않음

 요소값을 가져올 때, iterator() 메서드를 이용하여 Iterator인터페이스를 받아옴

 add() : 값 추가

 size() : 크기

 remove() : 특정값 제거

 clear() : 전체값 제거

 iterator() : List - Set간 정보교류시 사용

 

 인터페이스

 Map

 구현체

 HashMap

 사용

 HashMap<String, String> map1 = new HashMap<String, String>();

 HashMap<키, String> 변수명 = new HashMap<키, String>();

 변수명.put(키, String);

 변수명.get(키);

 Set<Integer> 변수명 = 해시변수명.keySet();

 Set<Integer> set = hm7.keySet();
  
     Iterator<Integer> it = set.iterator();
     while(it.hasNext()) {
          Integer key = it.next();
          System.out.println(key);
     }

 설명

 index 없음

 index 대신 key가 있음.

 ksy는 개발자가 직접 만들어 줌

 HashMap 객체를 만들 때 첫번째 제네릭타입이 키의 자료형이 됨

 key는 index 역할을 함. key값은 중복되서는 안됨.

 key값은 인덱스역할이기에 HashSet을 이용하여 중복하지 않게 사용함.

 값을 입력할 때 이미 존재하는 key를 사용할 수 있음.

 ㄴ 이미 존재하는 key에 값을 입력하면 수정 처리함

 키셋(변수명.keySet();)은 해시맵타입의 키를 set에 넣어주는 변수이며,

 셋을 iterator를 사용하여 while문에 투입하여, iterator에 투입된 키셋과, 본래 해시맵의 자료를 사용한다

 

Generic(제네릭) : 자바 컬렉션 프레임워크에 이름을 붙이는 행위

컬렉션 프레임워크의 최대 단점 : 객체만 투입가능

 

대문자 A의 아스키코드는 65

소문자 a의 아스키코드는 97

32개의 차이가 남.

 

 기본자료형

 참조자료형화

 boolean

 Boolean

 char

 Character

 byte

 Byte

 short

 Short

 int

 Integer

 long

 Long

 float

 Float

 double

 Double

Character클래스를 제외하고

int i = Integer.valueOf("33")을 입력하면 33이 됨.

long l = Long.valueOf("33L")을 입력하면 33L이 됨.

boolean b = Boolean.ValueOf("true")를 입력하면 true가 됨.

다른 wrapper클래스에는 valueOf()가 있지만, character클래스에는 없음.

 

특정 내용의 변경을 이용하기 위해서는

MemberDTO m = MainEx.db.get(idx);
m.setName(name);
m.setAge(age);

의 방식을 사용함.

MemberDTO m이 MainEx.db.get(idx);값을 가리키게 만들고

m.setName(name);을 통하여 상기 힙메모리값에 저장함.

 

it.hasNext();

다음 값이 있는가

 

it.next();

다음 값을 반환하고, 지시자를 다음 값으로 옮길 것

 

 커서→

 

 

 100

 

 200

 

 300

 

 400

 

 500

 

상기 상황에서 hasNext의 경우 두번째 커서칸에 값이 있으므로 true

next의 경우 100을 반환하며, 100의 위치로 이동함.

 

 

 

 커서→

 100

 

 200

 

 300

 

 400

 

 500

 

상기 상황은 it.next까지 1회 실행된 상태이다.

상기 it는 100~500의 5개 값이 들어 있다.

 

정렬

 

Arrays.sort(소트할변수명, 컴퍼레이터_인터페이스_클래스)

컴퍼레이터 인터페이스 클래스는 implements Comparator<Integer>하여 사용 Integer는 원하는 것을 넣어 사용

public class MyComparator implements Comparator<Integer> {

     @Override
     public int compare(Integer o1, Integer o2) {

          // TODO Auto-generated method stub

          if(o1 > o2) {
          return 1;
          }else {
          return -1;
          }
     }

}

 

 

팁.

2개 이상의 데이터를 입력할 시에는 put이라는 단어를 포함한 키워드로 작동하는 경우가 많음.


어레이리스트에서 자주 사용하는 메서드

boolean add(Object o)

ArrayList의 마지막에 객체를 추가하고 성공시 true값을 반환

void add(int index, Object element)

지정된 index값에 객체를 저장

Object get(int index)

index값의 객체를 반환

int indexOf(Object o)

지정된 객체가 저장된 index값 반환

boolean isEmpty()

ArrayList가 비어있는지를 확인

Object remove(int index)

index값에 위치한 객체를 제거

boolean removeAll(Collection c)

특정 컬렉션 c를 파라미터로 받아 c에 저장된것과 동일한 객체를 ArrayList에서 삭제

int size()

ArrayList에 저장된 갯수를 반환

 

를 자주 사용함.


 

해시맵에서 자주 사용하는 메서드

void clear()

HashMap에 저장된 모든 객체를 제거

boolean containsKey(Object key)

HashMap에 지정된 가 포함되어있는지 확인하여 있을때 true값 반환

boolean containsValue(Object value)

HashMap에 지정된 이 포함되어있는지 확인하여 있을때 true값 반환

Object get(Object key)

지정된 키의 값을 반환. 찾지 못하면 null값 반환

boolean isEmpty()

HashMap이 비어있는지 확인

Object put(Object key, Object value)

지정된 키와 값을 HashMap에 저장

Object remove(Object key)

HashMap에서 지정된 키로 저장된 값을 제거

int size()

HashMap에 저장된 요소의 개수를 반환


'JAVA > JAVA 기본' 카테고리의 다른 글

JAVA File클래스  (0) 2017.10.11
JAVA Thread  (0) 2017.10.11
JAVA 에러와 예외, try~catch, throw  (0) 2017.10.11
JAVA 스캐너클래스, DTO클래스, 내/외부클래스  (0) 2017.10.11
JAVA 인터페이스  (0) 2017.10.11

에러와 예외

- 에러 : 프로그래머가 처리할 수 없는 오류/장애

- 예외 : 프로그래머가 처리할 수 있는 오류/장애

ㄴ 일반적으로 프로그래머가 코드를 잘못 구현해서 일어남

ㄴ 사용자가 잘못된 값을 입력한 경우

 

예외

- 컴파일 예외 : 컴파일 과정 중 예외가 발생하는 경우.

- 런타임 예외 : 실행 시에 발생하는 예외

 

예외를 처리하는 방법

- try~catch 구문 사용

- throws 예외가 발생하면, 해당 코드를 호출한 곳에서 try~catch를 하라는 의미

- try~catch/throws finally 사용법

ㄴ try : 예외가 발생할 수 있는 코드를 삽입

ㄴ catch : 예외가 발생했을 때, 실행할 코드를 삽입.

ㄴ throws : catch 구문에 사용할 코드를 모를 때 사용

ㄴ finally : 성공/실패여부에 무관하게 사용할 코드를 삽입

 

예외 코드 읽는 방법

- 예외 발생 원인 정보

- 어디에서 발생했는지에 대한 정보

 

throw : 예외상황이 아니지만, 강제로 예외를 발생시키고 싶을 때 사용

 

사용자 정의 예외 클래스

- 익셉션을 상속받고 기본 컨스트럭터와 사용자 생성자를 생성한 후 사용

'JAVA > JAVA 기본' 카테고리의 다른 글

JAVA Thread  (0) 2017.10.11
JAVA 컬렉션 프레임워크  (0) 2017.10.11
JAVA 스캐너클래스, DTO클래스, 내/외부클래스  (0) 2017.10.11
JAVA 인터페이스  (0) 2017.10.11
JAVA 다형성  (0) 2017.10.11

스캐너

Scanner sc = new Scanner(System.in);

String name = sc.nextLine();

시 name에 입력한 내용이 들어감

 

nextLine의 경우 가나다라(enter)까지 인식함.

nextInt의 경우 123까지 인식하는데, enter를 인식하지 못하고enter는 메모리상 떠돌고 있음.

그 이후 다시 nextLine을 실행할 시, enter가 바로 인식되며 즉시 종료되게 됨.

 

해결책으로는 nextInt이후 비어있는 nextLine();을 입력하여, 엔터를 공백에 넣어주고 처리하는 것으로 함.

 

모든 입력이 끝나고, sc.close();를 입력(sc는 Scanner 변수명임)

 

DTO(Data Transfer Object)

= TO, VO(Value Object), 데이터 저장 전용 클래스

- implements Serializable를 클래스 뒤에 선언해주어야 함.

- 이후 Add default serial version ID를 눌러 Serializable 인터페이스 구현

- private static final long serialVersionUID = 1L;

- 상기와 같은 문구를 추가

 

Serializable 인터페이스 구현법

1. 테이블(DB)의 컬럼과 같은 멤버변수를 선언하되 private으로 선언

2. 디폴트 생성자와 사용자 생성자 선언

3. get/set메서드 선언

4. object클래스의 주요 3메서드(hashcode, equals, toString)를 오버라이딩

 

static

 

변수 : 스태틱 변수 = 클래스 변수

상수 : 스태틱 상수 = 클래스 상수

메서드 : 스태틱 메서드 = 클래스 메서드

내부클래스 : 스태틱 내부 클래스

 

스태틱으로 생성된 변수는 '하나의 변수를 선언'하고 그 스태틱 변수를 '가리키는' 효과를 가짐.

스태틱 변수를 수정하면, 스태틱변수를 사용하는 모든 변수의 내용이 바뀜.

 

아우터(Outter)클래스/ 내부(Inner)클래스

- 클래스명.java와 이름이 같은 클래스만 public 선언이 가능함

- 클래스 내부의 Inner클래스는 멤버 내부 클래스라고 함

ㄴ OutterClass1의 내부클래스 InnerClass1에 있는 innerMe1();에 접근하기 위해, 아래와 같이 선언함.

ㄴ OutterClass1.InnerClass1 ic1 = new OutterClass1().new InnerClass1();

ㄴ new를 두개를 사용하는 이유는 OutterClass역시 클래스이기에, 생성자를 통해 innerClass1();에 접촉하여야 함

- 내부클래스에서 static을 사용하기 위해서는, 내부클래스를 static클래스로 선언해주어야 함.

- static내부클래스 = 정적 내부클래스

 

- 멤버 내부클래스는 외부클래스의 자원을 가져다 쓰고 싶을때 사용

- 스태틱 내부클래스는 외부클래스에서 내부클래스의 자원을 가져다 쓰고 싶을때 사용

ㄴOutterClass2 의 정적내부클래스 InnerClass2 에 있는 innerMe2();에 접근하기 위해 아래와 같이 선언함

ㄴOutterClass2.InnerClass2 ic2 = new OutterClass2.innerClass2();

ㄴinnerClass2();가 static클래스이기에 OutterClass2.InnerClass2(); 처럼 new를 하나만 사용하고, 뒤에있는 것만 생성자로 사용함.

 

익명의 내부클래스

아래는 예시

me4 메서드를 가진 인터페이스 Inter1을

Inter1 anonymous1 = new Inter1() {
  
     @Override


     public void me4() {
     // TODO Auto-generated method stub
     }


};

로 불러올 경우

위 Inter1 anonymous1 = new Inter1()을 익명의 내부클래스라고 함.

 

public void me42() {
     new Inter1() {
   
          @Override

          public void me4() {
               // TODO Auto-generated method stub
               System.out.println("호출이 될까요?");
          }

     }.me4();;

}

 

방식으로 사용할 경우 한번만사용할 수 있음


'JAVA > JAVA 기본' 카테고리의 다른 글

JAVA 컬렉션 프레임워크  (0) 2017.10.11
JAVA 에러와 예외, try~catch, throw  (0) 2017.10.11
JAVA 인터페이스  (0) 2017.10.11
JAVA 다형성  (0) 2017.10.11
JAVA 상속  (0) 2017.10.11

인터페이스

 public static 상수

 public 추상 메서드

로만 구성된 파일 = 인터페이스

클래스가

public interface 클래스명

일 경우, 상수 선언은 자동으로 static으로 처리됨.

인터페이스에서는 접근제한자생략하면 public으로 인식함

static을 생략해도 static

final을 생략해도 final

 

인터페이스가 인터페이스를 상속할 수 있음.

클래스가 인터페이스를 구현할 때 : implements 사용

 

인터페이스는 다중상속이 가능함.

 

인터페이스간 다중상속 가능

클래스가 여러개의 인터페이스를 구현할 수 있음

 

인터페이스의 기능

- 다중 상속

- 여러 기능을 하나로 통합

- 병렬 개발 기능

- ~able로 끝나는 인터페이스는 특정 기능이 가능하다는 마크업 역할

 

'JAVA > JAVA 기본' 카테고리의 다른 글

JAVA 에러와 예외, try~catch, throw  (0) 2017.10.11
JAVA 스캐너클래스, DTO클래스, 내/외부클래스  (0) 2017.10.11
JAVA 다형성  (0) 2017.10.11
JAVA 상속  (0) 2017.10.11
JAVA String 클래스에 대하여  (0) 2017.10.11

+ Recent posts