2013년 8월 9일 금요일
오라클 시퀀스란(oracle sequence)
ORACLE SEQUENCE 개념
- Sequence는 순차적인 일련번호를 생성한다.(최대 38자리의 Oracle정수)
- Sequence는 다중 사용자환경에서 디스크 입출력 오버헤드나 Transaction Locking없이
고유한 순번을 생성하는데 용이하다.
- Sequence생성시 Sequence이름, 오름차순또는 내린차순여부, 번호간격등을 정의한다.
- Sequence번호는 Table과 독립적으로 생성되며,따라서 동일한 Sequence를 하나또는 여러
개의 Table에 사용할수 있다.
B. Sequence생성
- create sequence emp_sequence
increment by 1
start with 1
nomaxvalue
nocycle
cache 10;
cache Optiom은 일련의 Sequence를 미리 할당하고 메모리에 유지하면서 시퀀스를 빠르게 Access
할수있게 한다. 일련의 Sequence를 Cache하면 Sequence를 건너 뛸수있다.
예를들어 Instance가 비정상적으로 종료되면 캐시되었지만 사용안된 Sequence를 잃어버리게 된다.
즉 Cache를 상요하면 Sequence를 빠르게 Access할수 있으나 비정상적으로 종료돨 경우에는 번호가
건너 뛰게된다.
C. Sequence 변경
Alter sequence emp_sequence
Increment by 10
Maxvalue 10000
Cycle
Cache 20;
D. Sequence에 영향을 주는 변수
Sequence_cache_entries매개변수는 캐시될 시퀀스를 설정하다. 너무 낮으면 시퀀스값을 건너
뛸수도 있다. 예를들면 다섯개의 Cache된 Sequence를 사용하고 캐시가 다찼으며,매개변수 값이
4라면 현재 4개의 시퀀스가 Cache되었다면 캐시에서 최근에 가장적게 사용한 Sequence는 5번째
Sequence로 바뀌면서 이 Sequence의 모든 다른값(캐시된 마지막 Sequence까지)은 손실된다.
E. Sequence삭제
- drop sequence emp_sequence;
2013년 8월 8일 목요일
[ORACLEJAVA커뮤니티]자바 제어문, 반복문
이번 강좌에서는 자바의 제어문과 반복문에 대해 알아 보기로 하겠습니다.
1. 제어문(if else)
형식 :
if (boolean- 수식 ) 문장
if (boolean- 수식 ) 문장 else 문장
if문에 대해서는 별다른 설명이 필요 없을것 같습니다. (당연하죠^^)
[예제]
class IfTest {
public static void main( String args[] ) {
int i=3;
if (i%3 == 0)
System.out.println("3의 배수");
else if (i % 3 == 1)
System.out.println("3의 배수 + 1");
else
System.out.println("3의 배수 + 2 ");
}
}
[결과]
3의 배수
2. 제어문 (switch, case, break)
정수를 조건으로 해서 해당되는 실행문을 실행 하게 합니다. break 의 경우 자신을 둘러싸는 가가운 {} 를 벗어난 다음으로 실행 순서를 옮깁니다. default 는 case 로 명시하지 못한 정수 값 일때(이도 저도 아닐때)수행 되 는 겁니다.
[예제]
class SwitchTest
{
public static void main( String args[] )
{
func(1);
func(2);
}
static void func(int i)
{
switch( i % 3 )
{
case 0:
System.out.println( "3의 배수 " );
break;
case 1:
System.out.println( "3의 배수 + 1" );
default:
System.out.println( "3의 배수 + 2" );
}
}
}
[결과]
3의 배수 + 1
3의 배수 + 2
3의 배수 + 2
3. 제어문 (for, continue)
지정된 조건이 해당될 때까지 문장 ( 혹은 블록 ) 을 실행하는 반복문 입니다.For 문의 괄호 안은 3 가지 부분으로 나뉘어져 있는데 구 분 세미콜론 (;) 이며 첫번째 부분은 초기치 , 두 번째 부분은 조건 , 세번째 부분은 증감 부분 입니다.(다들 아시죠^^). 복잡한 다중 루프인 경우에는 label 을 사용하여 기존 언어의 goto문의 효과를 나타낼 수 있습니다.
continue 명령을 사용하면 그 이후부터 블록의 끝까지를 수행하지 않고(Skip해 버림) for 문이 있는 곳으로 제어를 이동 시킵니다. continue 에 label 을 기술하여 그 label 이후부터 다시 실행하게 할 수 있으며 Break 명령어의 경우도 label 을 써서 중첩된 구조를 빠져 나올 수 있으나 continue 와는 다르게 다음 반목 문을 수행하지 않습니다. For(;;) 의 경우 무한반복을 수행하며 빠져 나오기 위 해서는 별도의 조건을 이용하여 break 로 빠져 나옵니다 .
[예제]
//ForTest.java
class ForTest {
public static void main(String[] args) {
myLabel :
for(int i=0; i < 9; i++) { >
for(int j=0; j < 5; j++) { >
if (i % 2 ==0) {
System.out.println("continue myLabel");
continue myLabel;
}
else if (i == 5) {
System.out.println("break myLabel");
break myLabel;
}
System.out.println(i + " " + j);
}
}
}
}
[결과]
continue myLabel
1 0
1 1
1 2
1 3
1 4
continue myLabel
3 0
3 1
3 2
3 3
3 4
continue myLabel
break myLabel
4. 제어문 (while, do while)
‘ for ' 문과 마찬가지로 반복 수행을 가능하게 해주는 제어문 이며 지정된 조건이 참인 동안에 수행된다 .while문인 경우 만약 조건에 맞지 않다면 한번도 수행되지 않을 수 있지만 do~while문은 일단 한번 수행한 후 조건을 비교하므로 최소 한번은 수행한다는 것이 차이가 있습니다.
[예제]
//While.java
class While {
public static void main(String[] args) {
//1부터 10까지의 합을 구합니다.
int i=0, sum=0;
while(i<10) { >
i++;
sum += i;
}
System.out.println("while문으로 구한 합 : " + sum);
i=0; sum=0;
do
{
i++;
sum += i;
}while (i<10); >
System.out.println("do~while문으로 구한 합 : " + sum);
}
[결과]
while문으로 구한 합 : 55
do~while문으로 구한 합 : 55
오라클자바커뮤니티에서 설립한 오엔제이프로그래밍
실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)
1. 제어문(if else)
형식 :
if (boolean- 수식 ) 문장
if (boolean- 수식 ) 문장 else 문장
if문에 대해서는 별다른 설명이 필요 없을것 같습니다. (당연하죠^^)
[예제]
class IfTest {
public static void main( String args[] ) {
int i=3;
if (i%3 == 0)
System.out.println("3의 배수");
else if (i % 3 == 1)
System.out.println("3의 배수 + 1");
else
System.out.println("3의 배수 + 2 ");
}
}
[결과]
3의 배수
2. 제어문 (switch, case, break)
정수를 조건으로 해서 해당되는 실행문을 실행 하게 합니다. break 의 경우 자신을 둘러싸는 가가운 {} 를 벗어난 다음으로 실행 순서를 옮깁니다. default 는 case 로 명시하지 못한 정수 값 일때(이도 저도 아닐때)수행 되 는 겁니다.
[예제]
class SwitchTest
{
public static void main( String args[] )
{
func(1);
func(2);
}
static void func(int i)
{
switch( i % 3 )
{
case 0:
System.out.println( "3의 배수 " );
break;
case 1:
System.out.println( "3의 배수 + 1" );
default:
System.out.println( "3의 배수 + 2" );
}
}
}
[결과]
3의 배수 + 1
3의 배수 + 2
3의 배수 + 2
3. 제어문 (for, continue)
지정된 조건이 해당될 때까지 문장 ( 혹은 블록 ) 을 실행하는 반복문 입니다.For 문의 괄호 안은 3 가지 부분으로 나뉘어져 있는데 구 분 세미콜론 (;) 이며 첫번째 부분은 초기치 , 두 번째 부분은 조건 , 세번째 부분은 증감 부분 입니다.(다들 아시죠^^). 복잡한 다중 루프인 경우에는 label 을 사용하여 기존 언어의 goto문의 효과를 나타낼 수 있습니다.
continue 명령을 사용하면 그 이후부터 블록의 끝까지를 수행하지 않고(Skip해 버림) for 문이 있는 곳으로 제어를 이동 시킵니다. continue 에 label 을 기술하여 그 label 이후부터 다시 실행하게 할 수 있으며 Break 명령어의 경우도 label 을 써서 중첩된 구조를 빠져 나올 수 있으나 continue 와는 다르게 다음 반목 문을 수행하지 않습니다. For(;;) 의 경우 무한반복을 수행하며 빠져 나오기 위 해서는 별도의 조건을 이용하여 break 로 빠져 나옵니다 .
[예제]
//ForTest.java
class ForTest {
public static void main(String[] args) {
myLabel :
for(int i=0; i < 9; i++) { >
for(int j=0; j < 5; j++) { >
if (i % 2 ==0) {
System.out.println("continue myLabel");
continue myLabel;
}
else if (i == 5) {
System.out.println("break myLabel");
break myLabel;
}
System.out.println(i + " " + j);
}
}
}
}
[결과]
continue myLabel
1 0
1 1
1 2
1 3
1 4
continue myLabel
3 0
3 1
3 2
3 3
3 4
continue myLabel
break myLabel
4. 제어문 (while, do while)
‘ for ' 문과 마찬가지로 반복 수행을 가능하게 해주는 제어문 이며 지정된 조건이 참인 동안에 수행된다 .while문인 경우 만약 조건에 맞지 않다면 한번도 수행되지 않을 수 있지만 do~while문은 일단 한번 수행한 후 조건을 비교하므로 최소 한번은 수행한다는 것이 차이가 있습니다.
[예제]
//While.java
class While {
public static void main(String[] args) {
//1부터 10까지의 합을 구합니다.
int i=0, sum=0;
while(i<10) { >
i++;
sum += i;
}
System.out.println("while문으로 구한 합 : " + sum);
i=0; sum=0;
do
{
i++;
sum += i;
}while (i<10); >
System.out.println("do~while문으로 구한 합 : " + sum);
}
[결과]
while문으로 구한 합 : 55
do~while문으로 구한 합 : 55
java.awt.Container(Abstract) , ORACLEJAVA 프로그래밍
java.awt.Container(Abstract)
오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)
java.lang.Object --> java.awt.Component --> java.awt.Container
자신의 영역안에 다른 Component를 포함할수 있는 Component
Container도 Component Class의 하위Class 이므로 그 자체도 Component로 취급되며 다른 Container에 부착될 수 있습니다.
일반적으로 GUI를 만들때는 Component를 Container에 배치하고, 그런 작은 Container를 더 큰 Container에 포함시켜서 GUI를 구성 합니다.
Frame과 Applet은 대표적인 최상위 Container이다. 최상위 Container란 다른 Container를 포함하여 맨 바깥쪽 Container로 사용되는 컨테이너를 지칭 합니다. 이에 비해 Panel은 다른 Container에 부착되어 일부 영역을 Control하는 경우에 사용 됩니다. Window는 많이 사용되지 않으며 하위 Class인 Frame이 많이 사용 됩니다.
Dialog와 FileDialog Container는 대화창에서 주로 사용 됩니다.
컴포넌트를 컨테이너에 추가할 때 색인이 지정되지 않을 경우, 목록 끝(즉, 스택 순서 아래)에 추가 됩니다.
Panel, ScollPane, Window의 상위 클래스
Window클래스나 Window 클래스의 파생클래스(Frame등)는 포함 할 수 없습니다.
Container – component 추가/제거/추출 메소드
add(Component) : 지정된 컴포넌트를 컨테이너의 끝에 추가 합니다.
add(Component, int) : 해당 위치에 있는 컨테이너에 지정된 컴포넌트를 추가 합니다.
add(Component, Object) : 지정된 컴포넌트를 컨테이너의 끝에 추가 합니다.
add(Component, Object, int) : 지정된 색인에서 지정된 제약 조건이 있는 컨테이너에 지정된 컴포넌트를 추가 합니다.
add(String, Component) : 컨테이너에 지정된 컴포넌트를 추가 합니다.
remove(Component) : 컨테이너에서 지정된 컴포넌트를 제거 합니다.
remove(int) : 컨테이너에서 index에 의해 지정된 컴포넌트를 제거 합니다.
remove() : 컨테이너에서 모든 컴포넌트를 제거합니다.
getcomponent(int) : 컨테이너에 있는 n번째 컴포넌트를 가져 옵니다.
getcomponentAt(int, int) : x,y 위치가 포함된 컴포넌트 위치를 찾습니다.
getcomponentAt(Point) : 지정된 지점이 포함된 컴포넌트를 가져 옵니다.
getcomponentCount() : 패널에 있는 컴포넌트의 수를 가져 옵니다.
getComponents() : 컴포넌트에 있는 모든 컴포넌트를 가져 옵니다.
isAncestorOf(Component) : 컨테이너의 컴포넌트 계층구조에 컴포넌트가 포함되어 있는지 확인 합니다.
Container – 그래픽/이벤트와 관련된 메소드
update(Graphics) : 컨테이너를 갱신 합니다.
paint(Graphics) : 컨테이너의 색상을 표시 합니다.
paintComponents(Graphics) : 컨테이너에 있는 각 컴포넌트의 색상을 표시 합니다.
print(Graphics) : 컨테이너를 인쇄합니다.
printComponents(Graphics) : 컨테이너의 각 컴포넌트를 인쇄 합니다.
addContainerListener(ContainerListener) : 컨테이너로부터 컨테이너 이벤트를 수신하기 위해 지정된 컨테이너 수신기(listener)를 추가 합니다.
processContainerEvent(ContainerEvent) : 등록된 ContainerListener 객체로 보내어 컨테이너에서 발생하는 컨테이너 이벤트를 처리 합니다.
processEvent(AWTEvent) : 컨테이너의 이벤트를 처리 합니다.
doLayout() : 컨테이너가 컴포넌트를 배치하도록 합니다.
getLayout() : 컨테이너의 배치 관리 프로그램을 가져 옵니다.
setLayout(LayoutManager) :컨테이너에 대한 배치 관리 프로그램을 설정 합니다.
validate() : 컨테이너와 모든 부속 컴포넌트를 확인합니다. 컨테이너와 하부 컴포넌트를 다시 배치 합니다.
invalidate() : 컨테이너와 모든 부속 컴포넌트가 다시 그려져야 한다고 표시 합니다.
Container – 기타 메소드
addNotify() : 컨테이너가 피어(peer)를 작성하도록 통지 합니다.
getAlignmentX() : x축을 따라 정렬 합니다.
getAlignmentY() : y축을 따라 정렬 합니다.
getInsets() : 컨테이너의 경계 크기를 표시하는 컨테이너의 인세트(inset)를 결정 합니다.
getMaximumSize() : 컨테이너의 최대 크기를 리턴 합니다.
getMinimumSize() : 컨테이너의 최소 크기를 리턴 합니다.
getPreferredSize() : 컨테이너의 선호 크기를 리턴 합니다.
invalidate() : 컨테이너를 무효로 합니다.
list(PrintStream, int) : 지정된 출력 스트림에 컨테이너 목록을 인쇄 합니다.
list(PrintWriter, int) : 지정된 들여쓰기 위치에서 시작하여 지정된 인쇄 작성자로 목록을 인쇄 합니다.
removeNotify() : 컨테이너와 모든 부속 컴포넌트가 피어를 제거하도록 통지 합니다.
------------------------------
java.awt.Panel
--------------------------
다른 Component나 그하위 Component들이 표시될수 있는 장소를 제공하나 , 스스로 화면에 그릴수는 업습니다.
자기를 스스로 그릴수 있는 다른 Window나 그하위의 Frame, Dialog 와 같은 Component에 포함시켜서 사용해야 합니다.
Panel Class에서만 제공하는 주요한 메소드 특별히 없습니다. 결국 다른 Component를 포함할수 있다는 점을 제외하면 Canvas와 별차이가 없다고 할수 있습니다.
Applet Class가 Panel Class를 상속합니다.
Applet은 브라우저창에서 실행되므로 자신을 그릴수 있는 기능을 제공하지 않는 Panel을 상속한다고 볼 수 있습니다.
[예제]
/* 프레임에 Panel을 올리는 예제 */
import java.awt.*;
public class PanelTest extends Frame{
public PanelTest(String s) {
super(s);
}
public static void main(String[] args) {
PanelTest f = new PanelTest("Frame에 Pamel을 넣는예제");
Panel p = new Panel();
f.setSize(300,300);
f.setLayout(null);
p.setSize(150,150);
p.setBackground(Color.blue);
f.add(p);
f.setVisible(true);
}
}
2013년 8월 6일 화요일
[ORACLE SGA Tuning, 오라클자바커뮤니티]X$KSMLRU
X$KSMLRU 에 대해 알아봅니다.
오라클자바커뮤니티에서 설립한 오엔제이프로그래밍
실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)
X$KSMLRU는 Shared Pool 영역에서 다른 오브젝트를 age out 시키고 연속된 공간을 할당 받은 Object에 대한 정보를 담고 있어 많은 양의 메모리를 사용하는 Object에 대한 Flush 상태를 확인 할 수 있습니다. SYS 사용자만 질의 가능 합니다.
많은 Object를 Flush 시키고 할당이 되는 객체들이 자주 변한다면 Response Time이 나빠지며 Flush 되었던 객체가 다시 로드 됨으로서 Library Cache Latch Contention을 일으킬 수 있습니다.
그러므로 많은 Object들을 Flush 시키며 로드되는 Object들이 자주 사용 된다면 Memory에 KEEP 시키도록 하는 것이 유리 합니다. 이 Fixed Table(X$KSMLRU)에서 한번 조회된 ROW는 테이블에서 없어 집니다.
아래는 Object의 할당으로 인해 Flush 된 Object 수가 0보다 큰 것을 조회하는 겁니다. 즉 여기에 나타나는 것이 큰 Object이죠… 이놈을 Shared Pool에 올리려니 크기가 크니까 다른 Object를 쫓아 보리는 겁니다. 물론 그러한 새션의 아이디도 확인 할 수 있습니다.
SQL> select * from x$ksmlru where ksmlrnum > 0;
ADDR INDX INST_ID KSMLRIDX KSMLRDUR KSMLRCOM
-------- ---------- ---------- ---------- ---------- --------------------
KSMLRSIZ KSMLRNUM KSMLRHON KSMLROHV KSMLRSES
---------- ---------- -------------------------------- ---------- --------
02EE6B54 0 1 1 0 work area tabl
4216 8 0 799FC2D8
02EE6B00 1 1 1 0 BAMIMA: Bam Buffer
4132 8 BEGIN dbms_shared_pool.sizes... 335996982 799FC2D8
SQL> select * from x$ksmlru where ksmlrsiz > 5000;
선택된 레코드가 없습니다.
SQL> select * from x$ksmlru where ksmlrnum > 0;
선택된 레코드가 없습니다. 위에서 조회 했으므로 데이터가 사라 졌다.
Columns Desc
KSMLRSIZ : allocate된 연속된 memory size, 이 크기가 5K 넘으면 문제의 소지가 있으며 10K가 넘으면 심각, 20K가 넘으면 심각한 문제를 야기 시킬 가능성이 있습니다.
KSMLRNUM : 이 Object의 할당으로 인해 Flush 된 Object 수
KSMLRHON : Load되고 있는 Object의 이름(PL/SQL or Cursor)
KSMLROHV : Load되고 있는 Object의 Hash Value
KSMLRSES : 이 Object를 Load한 Session의 SADDR 값
2013년 8월 2일 금요일
JAVA AWT TabedPane 예제 - Tab
//일반 응용 프로그램에서의 Tab control을 자바에서 만들어 보는 겁니다.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
class TabbedPane {
public static void main(String[] args) {
JTabbedPane tp = new JTabbedPane();
String tabs[] = {"첫번째탭","두번째탭","세번째탭"};
for(int i=0;i<tabs.length; i++) {
JLabel label = new JLabel(i+"번째 컴포넌트",JLabel.CENTER);
label.setBackground(SystemColor.control);
label.setOpaque(true);
tp.addTab(tabs[i], null, null, tabs[i]+"에 대한 툴팁");
}
tp.setSelectedIndex(0);
JFrame f = new JFrame();
f.getContentPane().add(tp, "Center");
f.setSize(400, 500);
f.setVisible(true);
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
class TabbedPane {
public static void main(String[] args) {
JTabbedPane tp = new JTabbedPane();
String tabs[] = {"첫번째탭","두번째탭","세번째탭"};
for(int i=0;i<tabs.length; i++) {
JLabel label = new JLabel(i+"번째 컴포넌트",JLabel.CENTER);
label.setBackground(SystemColor.control);
label.setOpaque(true);
tp.addTab(tabs[i], null, null, tabs[i]+"에 대한 툴팁");
}
tp.setSelectedIndex(0);
JFrame f = new JFrame();
f.getContentPane().add(tp, "Center");
f.setSize(400, 500);
f.setVisible(true);
}
}
2013년 7월 28일 일요일
(오라클자바개발자실무교육,오엔제이프로그래밍실무교육센터)자바 리플렉션(JAVA Reflection)에 대해 ,
오라클자바커뮤니티에서 설립한
오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝,
힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)
Runtime에 클래스를 전달받아서 임의의 method를 실행하는 시스템이 있다고 가정하면 이 때 전달되는
파라미터, return되는 파라미터 모두 개발당시에는 알지 못한다고 하자 이러한 시스템에는 임의의 클래스가 주어졌을 때, 그 클래스에 대한
정보, 다시 말해서 해당 클래스의 생성자 (constructor), 멤버변수, method, 슈퍼 클래스 , 상위 인터페이스에 대한 정보를 얻을
수 있는 기능이 필요하다 이렇게 임의의 클래스에 대한 정보를 얻을 수 있게 해 주는 API가 바로 reflection API이다.
Ex) import java.lang.reflect.*;
Object o;
Class c = o.getClass();
……
Method m = c.getMethod(“setText”, new Class[] {String.class} );
……
import java.lang.reflect.*;
import java.awt.*;
class ReflectionTest {
public static void main(String[] args) {
Button b = new Button();
getNameSuperClass(b);
}
static void getNameSuperClass(Object o) {
Class c = o.getClass();
String s = c.getName();
String s1 = c.getSuperclass().toString();
System.out.println(s + "\n" + s1);
}
}
Ex) import java.lang.reflect.*;
Object o;
Class c = o.getClass();
……
Method m = c.getMethod(“setText”, new Class[] {String.class} );
……
import java.lang.reflect.*;
import java.awt.*;
class ReflectionTest {
public static void main(String[] args) {
Button b = new Button();
getNameSuperClass(b);
}
static void getNameSuperClass(Object o) {
Class c = o.getClass();
String s = c.getName();
String s1 = c.getSuperclass().toString();
System.out.println(s + "\n" + s1);
}
}
(오라클자바개발자실무교육,오엔제이프로그래밍실무교육센터)자바의 객체지향적 특징
******** 자바의 특성(객체지향적) ************
오라클자바커뮤니티에서 설립한
오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝,
힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)
추상화(Abstraction) : 실제 사물을 명사화/동사화 시켜서 프로그램에 적용할수 있는 형태로 만드는 것
상속성(Inheritance) : 미리 만들어진 소스를 가지고 공유하며 재사용하고, 또한 특별한 부분에 대 해서는 다시 재정의해서 사용하는 것 자바에서 상속은 한 클래스를 확장하여 새로운 클래스를 만드는 것을 말한다. 이렇게 새로 만들어지는 클래스를 하위클래스(subclass)라고 부른다. 그리고 원래의 클래스는 상위클래스(superclass)라고 부른다.
다형성(Polymorphism) : 상속을 받은 것을 그대로 사용하지 않고 입맛에 맞게 바꾸어 줄 수 있도록 하는것이며 이 때문에 다형성 함수는 전달하는 변수의 타입을 고려하지 않게된다.
캡슐화(Encapsulation) : 캡슐화는 사용자로부터 객체 내부의 데이터를 감추는 것이다. 데이터를 변수로 나타내며, 클래스의 함수와 프로시저는 메소드(Method)라고 한다. 클래스가 다른 클래스의 데이터를 다루려면 메소드를 통해야 한다. 이러한 캡슐화는 객체 내부의 처리과정을 알 필요없이 그것을 다루는 메소드에 대해서만 알면 된다는 점에서 편리하다. 변수들(외부에서 임의로 조작되었을때 원하지 않는 결과가 나오는것들 또는 잘못된 결과가 나오는것들) 에대해서 외부로 부터 접근제한을 시키는 것이 바로 encapsulation, 즉 객체내부의 데이터와 메소드 항목을 정의할때 private로 지정하여 클래스 외부에서의 접근을 제한하는것.
다중 쓰레드를 지원한다.
- 프로세스는 실행중인 프로그램을 뜻하는 말입니다. 보통 프로세스가 운영 체제의
여 러 자원을 사용하는 기본 단의 입니다.
- 쓰레드(Thread)란 프로세스 내부에서 실행되는 일련의 명령 흐름을 뜻합니다.
프로세스내의 제어의 단일 순차 흐름을 의미하며, 때때로 수행 문맥
(execution context)또는 가벼운 프로세스(lightweight peocess)라함
- 프로세스가 실행되면서 하나의 흐름만을 갖는 것이 아니라 여러 개의 흐름으로
분기할 수 있으며 하나의 프로세스가 같은 시간에 여러 가지 일을 수행하기
위해서 여러 개의 스레드를 만들게 됩니다.
- 다중 쓰레드란 하나의 프로그램내에서 동시에 수행되며 서로 다른 작업들을
수행하는 복수개의 쓰레드들을 의미한다.
[예제]
class Employee {
String name;
String id;
//생성자
public Employee(String name1, String id1) {
name = name1;
id = id1;
}
public void gotoOffice() {
System.out.println(name+"님 출근하였습니다...");
}
public void gotoHome() {
System.out.println(name+"님 퇴근하였습니다...");
}
}
class Manager extends Employee {
String chargeDept;
public Manager(String newName,String newID,String newDept) {
//super는 상위클래스의 생성자를 의미
super(newName, newID);
this.chargeDept = newDept;
}
public void startJob() {
System.out.println(this.chargeDept +” “+ super.name + "님이 직원관리를 시작합니다...");
}
}
class Example {
public static void main(String args[]) {
Manager m = new Manager("이종철","12345","솔루션개발부");
m.gotoOffice();
m.startJob();
m.gotoHome();
Manager m1 = new Manager("홍길동","12346","고객관리부");
m1.gotoOffice();
m1.startJob();
m1.gotoHome();
}
}
피드 구독하기:
글 (Atom)