2013년 8월 31일 토요일

비트아카데미 교육 수업내용 로그정리[WEB Application & Servlet에 관하여 2부..]

#JAVA EE 스펙을 준수하고 매칭하여 개발환경을 설치하도록한다.
 - 개발환경은 기술에 따라 결정된다.

*현재 시장 안전버전  == > JAVA EE 5



*WEB 요청 URL


URL주소의 예    http://www.naver.com  
--> 프로토콜://서버주소:포트번호/리소ID(주로 html파일이나 
정적파일이 놓일수 있다)
- 127.0.0.1 :로컬호스트


*WEB Application 배치/ 배포 (Deployment)
- 서버마다 배치폴더가 다르다.
- 대표적인 배포도구 : TOMCAT (JAVA로 만들어져 있음)





2013년 8월 27일 화요일

8월 27일 비트아카데미 자바수업 내용로그 정리[WEB Application & Servlet에 관하여 1부...]


















              ** 서블릿 라이프 사이클  ==   서블릿  컨테이너 라고도 부른다.  **
   


    To be continue...        



2013년 8월 22일 목요일

8뤌 22일 자바수업 내용 로그정리 [Java Socket & Networking 에 관하여..]

#[초창기 클라이언트와 서버 모델 ]
 - 메인 프레임 세대 구조

 
 *  메인 프레임 워크 시스템에 대한 단점 :
  -   HW 확장의 어려움.
  -   단가가 비싸다.


#[Client/ Server 시대 도래]


# 다운사이징이란?

 - 조작 구성원 변경  ===> 업무 프로세스 변경  ===> 기존 시스템 의 급변 



     
                                           [요청처리릐 문제점]





  TO BE Continue..
 


2013년 8월 15일 목요일

8월 14일 자바스터디 교육내용 로그정리

#[자바에서 생성자란?]

 - 그 객체를 사용하기 위한 최소의 기본 값을  만드는것 (물건이라고 하면 배터리)
   DI (Dependency Injection) ==> IOC
- tar (tape Archive)    .gz  (리눅스 압축 zip 파일)
   .zip   [안타깝게도 특허가 없다..]

[객체지향 프로그램에서 가장 중요한 개념은?]
 * Low Coupling   (약한 결합력)
 * High Cohsen   ()
  이다..

** 인터 페이스란 객체와 객체간에 공개된 규칙이다**


 







#[My SQL 예제]
/*테이블 삭제 */
DROP TABLE MEMBERS2;

/* 테이블 생성 */
create table MEMBERS2
(
MNAME varchar(50) not null,
PHONE varchar(15) not null,
EMAIL varchar(50) not null /*primary key*/,
BLOG varchar(100),
AGE int,
REG_DATE DATETIME
);

/*멤버2 테이블에 프라이머리 키 권한을 부여 */
ALTER TABLE MEMBERS2 ADD PRIMARY KEY(EMAIL);

/*멤버2  테이블 조회 */
SELECT * FROM MEMBERS2;

/*테이블 정보보기 */
DESC MEMBERS2;


/* 테이블에 데이터 입력문 */
INSERT INTO MEMBERS2(MNAME,PHONE,EMAIL,BLOG,AGE,REG_DATE)
VALUES('정승호','1111-1111','jung@test.com',
'jung.blog.com', 30,now());

INSERT INTO MEMBERS2(MNAME,PHONE,EMAIL,BLOG,AGE,REG_DATE)
VALUES('이철수','2222-2222','lee@test.com',
'lee.blog.com', 33,now());

INSERT INTO MEMBERS2(MNAME,PHONE,EMAIL,BLOG,AGE,REG_DATE)
VALUES('김수일','3333-3333','kim@test.com',
'kim.blog.com', 40,now());

INSERT INTO MEMBERS2(MNAME,PHONE,EMAIL,BLOG,AGE,REG_DATE)
VALUES('장호순','5555-5555','jang@test.com',
'jang.blog.com', 20,now());

INSERT INTO MEMBERS2(MNAME,PHONE,EMAIL,BLOG,AGE,REG_DATE)
VALUES('박해일','7777-7777','park@test.com',
'park.blog.com', 28,now());

/*이름이 정승호 이고 전화번호가 1111-1111 인 사람을 조회 */
SELECT * FROM MEMBERS2
   WHERE MNAME ='정승호' AND  PHONE='1111-1111';

/* 나이가 20세 이상인 사람을 조회 */
SELECT * FROM MEMBERS2
WHERE AGE > 20;

/* 두가지 조건중 한가지 조건만  만족 시켜야 됨 */
/*나이가 20세 이상이거나 또는 이름이 정승호인 사람을 조회 */
SELECT * FROM MEMBERS2
WHERE AGE > 20 OR MNAME='정승호';

/*반드시 두가지 조건을 만족 시켜야 함 */
/* 나이가 20세이상 그리고 성함이 정승호인 사람을 조회만 조회 */
SELECT * FROM MEMBERS2
WHERE AGE > 20 AND MNAME='정승호';

/* 나이가 30살 제외 하거나 나이가 값이 null이 아닌 사람을 조회 */
SELECT * FROM MEMBERS2
WHERE AGE <>30 OR AGE IS NULL;

/* 나이가 서른살 이고 나이의 값이 null인 경우의 사람만 조회 */
SELECT * FROM MEMBERS2
WHERE AGE =30 AND AGE IS   NULL;

/* 이름이 가나다 순서 중에 정 보다 작은 사람을 조회 */
SELECT * FROM MEMBERS2
WHERE MNAME < '정승호';

/*등록일이 2013년 8월 11일 이후에 사람을 조회 */
SELECT * FROM MEMBERS2
WHERE REG_DATE > '2013-08-11';

/* 등록일이 8월 15일전 이거나 8월 16일 이후인 사람을 조회 */
SELECT * FROM MEMBERS2
WHERE REG_DATE >= '2013-08-16' OR
REG_DATE < '2013-08-15';

/*이름에 뒤 두글자가 승호라고 하는 사람을 조회 */
SELECT * FROM MEMBERS2
WHERE MNAME LIKE '%승호';

/*이름 가운데 글자가 수가 들어간 사람 모든 사람을 조회 */
SELECT * FROM MEMBERS2
WHERE MNAME LIKE '%수%';

/* 승호 글자로 시작하는 사람을 조회 */
SELECT * FROM MEMBERS2
WHERE MNAME LIKE '승호_';

/*끝글자가 승이 들어간 사람을 조회 */
SELECT * FROM MEMBERS2
WHERE MNAME LIKE '__승';


/*BETWEEN A AND B */
/*나이 10살부터 20까지인 사람을 조회 */
SELECT * FROM MEMBERS2
WHERE AGE BETWEEN 10 AND 20;

/* IN(VALUE1, VALUE2, VALUE3 ...)*/
/*나이가 10살, 20살,30살, 40살인 사람만 조회 */
SELECT * FROM MEMBERS2
WHERE AGE IN(10,20,30,40);

/*조건에 제외한 나머지를 출력 하라*/
SELECT * FROM MEMBERS2
WHERE AGE NOT IN(30,33,28);

/* 이메일이 jung@test.com가지고 있거나  또는 끝글자가 호라는 이름이 들어간 사람의
    전화번호를 1111-1112로 변경하라 */
UPDATE MEMBERS2 SET PHONE='1111-1112'
WHERE EMAIL='jung@test.com' OR MNAME LIKE '%%호';

/*안전키 해제 */
SET SQL_SAFE_UPDATES=0;

/*SQL UPDATE 정보 변경 문 */
UPDATE MEMBERS2 SET
MNAME = '정일우',
PHONE='1111-1113',
EMAIL='woo@test.com',
BLOG='woo.blog.com',
AGE=35,
REG_DATE=now()
WHERE
EMAIL LIKE 'kim@%';

SELECT * FROM MEMBERS2;
/*이름이 장호순인 사람을 삭제 */
/*삭제 DELETE 문*/
DELETE FROM MEMBERS2
WHERE MNAME='장호순';

/*성이 장 이고 전화번호의 첫숫자뒤에 555-5555인 가진사람만 정보를 삭제하라 */
DELETE FROM MEMBERS2
WHERE MNAME LIKE'장%%' AND PHONE LIKE '%555-5555';




2013년 8월 13일 화요일

8월 13일 자바수업내용 로그정리

*DBMS(DateBaseManagementSystem)
 - 데이터 저장,조회,변경,삭제  ==> 관리 전문 S/W
 - Data 와 Data 사이의 관계관리  == >RDBMS
 - File I/O free
  효율적인 Data 관리
  체계적인 / Data중복제거
  Database ==> 결함제거(무결)
     (틀 )



 **문제점 DBMS 마다API가 다르다.  (function 사용하다)
       IP    ID / PWD , Protocol ==> [DBMS마다 다르다]

    Native API (DBMS가 준 API )  .dll  .lib  .so   [C/C++함수들]

  -  SQL문을 DBMS 프로토콜에 맞추어 서버에 전달
  - 서버에서 보낸 결과를  리턴




         # Open DataBase Connectivity  [ODBC API 명세 C/C++로 만들어진 라이브러리]
            - 모든 DBMS의 기능수용 [마이크로 소프트 사]
             예) 120함수정의                  
 
                                                                            [ODBC Driver]
                                                                            ODBC 명세서에 따라 만든
                                                                            API  Library


JDBC[Java DataBase Connectivity]  API 명세  : ODBC를 자바로 사용하기 위한 도구




* SQL 작성법 ? Data를 저장할 표를 정의
  -  1.Data를 저장할 표를 정의 --> DDL (Data Definity Language)
        Table  생성 / 삭제  / 변경
        View
 -  2.Data를 입력 / 삭제 / 변경  --> DML (Manipulation)

-  3.Data를 제어하는 구문(권한을 넣거나 빼거나 하는 부분)
    -->  DCL [Data Control  Language]

     #[SQL 질의문의 예제  Drop/ Create / Insert ]
=======================================================================

/*기본키를 정의
- 기본키 (PRIMARY KEY)
후보키들 중에서 DB 관리자가 사용하기로 선택한 키
이메일
- 후보키(ALTERNATE KEY)
키들을 최소로 만든키
    예)
이름, 전화번호
블로그
이메일
- 키(KEY)
    데이터들 구분하기 위한 컬럼들의 집합
예)
이름, 전화번호
    전화번호, 블로그
이름, 블로그
이름, 이메일, 전화번호
이메일
이름, 나이, 이메일
전화번호, 이메일
블로그
*/





2013년 8월 12일 월요일

8월 12일 java 수업 내용 []

모든 것들이 하나의 도구라고 생각하기..
 코딩 능력을 업그레이드 하는 방법 (객체지향적 으로 생각하기)
**[모든것을 애니메이션화 하라 ⇒  프로그래머 고수들이 하는 명언]**


e.printStackTrace();  =>
에러메세지의 발생근원지를 찾아서 단계별로 에러를 출력한다.






Mysql 다운로드 및 설치 | MySQL
김상운 2009.03.20 15:06


참조 url : http://blog.daum.net/kimslovehouse/8239491


2013년 8월 9일 금요일

8월 9일 자바수업내용 로그정리 상속에 대하여...



**유닉스에서 read write 는 byte가 int이다.
  -  비트연산자를 이용하여 write를 하여 형변환을 하여야 한다.
  - 결국 자바에서 상속을 이용하여 인터페이스들을 사용..
#[상속]  == > Inherit 이란?
  - 기존의 코드를 손대지 않고 기능을 확장하는 방법
     = > 기존의 코드를 건드리지 않으면 버그가 있을 가능성이 줄어든다.
   - 기존의 소스코드가 필요없다.

  * 추상 클래스 [Abstract Class]
    -  서브 클래스들에 공통속성, 기능들을 상속해 주는 역활을 한다.
    -  직접 사용불가
   -  new 인스턴스 사용불가 (new OutputStream)  X 안됨.
   ** 항상 클래스의 첫번째에는 그 클래스의 정보가 들어있다.**

  [  또한, 상속의 개념은 이런 구조가 아니다]
               잘못된 구조 개념의 예..
 






 - 위의 그림은 링크할수있는 정보를 상속 관계에 있는 최종 상속받은 자식 클래스로 부터
    최상위 슈퍼 클래스 까지 자신이 가지고 있는 링크 정보를 전달 해준다.
    이유는 우리 클래스 파일을 로딩 할때 클래스 로더가 로딩시 항상 클래스 의 첫 부분에는
    그 클래스 정보가 들어있기 때문이다.

   # [클래스 로딩 순서  KeyPoint]
  1. 클래스 유효여부 검사
  2. static  변수준비 (클래스 변수준비)
  3. static 블럭수행
  4.인스턴스 생성 super  ===> self 자기 자신
  5. 생성자 호출 (자기 자신에서 슈퍼클래스로 간다음에 --->  실행)


-- Java Source -

package net.bitacademy.java41.step08.test;

class A {
int i;
///* 안만들면 다음과 같이 기본 생성자가 만들어 진다.
public A() {
super(); // 생략하면 컴파일러가 자동으로 붙인다.
System.out.println("A() 실행:");
i = 100;
}
//*/
public void m() {
System.out.println("A의 m()");
}

public void m2() {
System.out.println("A의 m2()");
}
}
class B extends A{
int j;
///*
public B(int v) {
super();
System.out.println("B() 실행:");
j = v;
}
//*/
public void m() {
System.out.println("B의 m()");
}
}
class C extends B{
int k;
///*
public C() {
super(500);
System.out.println("C() 실행:");
k = 300;
}
// */
public void test() {
this.m(); //B's m()
super.m(); //B's m() => 오버라이딩 하지 않았기 때문에,

this.m2(); // C's m()
super.m2();// 오버라이딩 했기 때문에, A's m2()
}

public void m2() {
System.out.println("C의 m2()");
}
}
public class InheritTest {
public static void main(String[] args) {
C p = new C(); // [i][j][k]
/*
p.i = 10;
p.j = 20;
p.k = 30;
*/

System.out.println(p.i);
System.out.println(p.j);
System.out.println(p.k);

p.test();
}

}

======================================================================

#[OOA /D 표기법]

 Grady Booch       ------------
 Ivar Jacobson                        |----->UML(Unified Modeling Language) 을 만든 사람들
 James Rumbaugh ------------        



UML (Unified Modeling Language)
UML이란 소프트웨어 개발 과정에서 산출되는 산출물들을 명시, 개발, 문서화하기 위한 모델링 언어이다. UML은 Rational 사의 Grady Booch, James Rumbaugh에 의해 1994년 10월에 처음 개발에 착수되었다. 이후 1995년 10월에 Unified Method 0.8의 명칭으로 OOPSLA '95에서 발표되었으며, 이후 Ivar Jacobson이 UML 개발에 함께 협력하면서 1996년에 버전 0.9를 발표하였고, 1997년 11월에는 UML 1.1 이 OMG에 의해 표준으로 채택되었다.
UML은 모델링 언어일뿐 메쏘드(또는 방법론)는 아니다. 메쏘드는 프로세스에 대한 정의와 각각의 업무들에 대한 지침과, 업무들 간의 순서들을 명시해야 하는 반면, 모델링 언어는 표기법(또는 다이어그램)들만을 제시하는 것이다. 따라서 UML은 소프트웨어 개발에 사용하기 위한 여러 다이어그램들을 정의하고 있으며, 또 다이어그램들의 의미들에 대해 정의하고 있다.
UML은 여러가지 다이어그램들을 제시함으로써 소프트웨어 개발과정의 산출물들을 비주얼하게 제공하고, 개발자들과 고객 또는 개발자들 간의 의사소통을 원활하게 할 수 있도록 하고 있다. UML은 시스템을 모델링 할 수 있는 다양한 도구들을 제공하기 때문에, 도메인을 모델링하기가 훨씬 용이할 뿐만 아니라 모델링한 결과를 쉽게 파악할 수 있게 된다. 또한 산업계 표준으로 채택되었기 때문에 UML을 적용한 시스템은 신뢰성 있는 시스템으로 평가받을 수 있다.



**또한 상속은  Generalization , Specialization , and Inheritance 
   이란 개념을 가지고 객체  접근한다.  즉 결국 코딩 기법 임..
   
   Inheritance 접근 방법                                     Generalization 접근방법
  

                   
                 





























   위의 그림을 참조하여 new 생성자 인스턴스 변수 생성
   
                   기본로봇  r1   =  new   기본로봇();
                         총     r2   =  new    총(r1);
                      두더지  r3  =  new     두더지(r2);

                                         | |
                                   | ---------- |
                           
                      FileOutputStream  out    =   new   FileOutputStream();
                    DataOutputStream  out2   =  new    DataOutputStream(out);



   #[Buffer  버퍼 란?]
  *  하드 디스크 에 메모리를 많이 읽어와서 메모리에 담을수 있는 
     어떤공간에 저장을 하고 필요할때 마다 꺼내서 사용하는 것..
     이렇게 하는것이 메모리를 로딩 속도를  급격하게 줄일수 있다.        

 버퍼가 읽는 속도 

    



                        













#하드 디스크 가 버퍼를 읽을때 트랙을 찾는다
  - data seak time   :   약 100초
  - data read / writer time : 10 초 ?  (10.000 m/s)? 
   ==>  즉 속도 차이가 10배 가량 난다..


==끝 ==
    
  
   

2013년 8월 8일 목요일

8월 8일 자바수업내용 로그 정리[ JAVA FileIO에 관하여.. ]






*[예외처리 란?]

 - FileOutputStream out = new FileOutputStream(); 생성자 객체를 정의할시

 - Unhandled exception type FileNotFoundException 을 발생  ===> 즉  JVM에게 보고한다.

 - 오류 발생시 자신이 처리하지않고 호출자에게 떠 넘긴다.
 - 호출자에게 오류를 넘기기 위해서 메서드 선언부에 어떤 오류를 넘길지 선언해야한다.

 - 예외처리 방법2  try...catch 문법을 사용하여 오류를 적절히 처리하여 시스템이 멈추지 않게 한다.

- java.class -

 /*
      try{
…....
}catch(파라미터 선언){
…....
}......

* 예외처리 방법3

    - 예외 발생 시 ‘방법2’와 같이 적절한 처리를 한다.
    -   추가적으로 보고도 한다.
    - 예외발생 상황을 호출자에게 전달할 필요가 있을때
    -   문법

- java.class -

   try{
...
   }catch(파라미터 선언){
         throws 보고;
   }catch(파라미터 선언){
         throws 보고;
   }finally{
    예외처리
   }        
 
- finally 블럭은 try......catch 블럭을  탈출하기 전에 반드시 수행된다.

** throw 명령어로 던질 수 있는 인스턴스는 오로지 Throwable 만 가능하다.
- Throwable 클래스 - 예외 상황을 보고할 때 사용하는 클래스 - 보통 예외 상황이 발생했을 때의 정보를 담고 있다. - throw 명령어로 해당 객체를 호출자에게 전달한다. - 두 타입의 자식 클래스가 있다.
1) Exception 자식 클래스
- 애플리케이션에 작업 도중에 발생하는 오류를 표현 - 이런 예외를 보고 받는 호출자는 반드시 오류 처리를 해야 한다. 만약 오류 처리를 하지 않으면, 컴파일 시 오류가 발생한다. - RuntimeException 
: Error와 마찬가지로 호출자에게 던졌을 때 오류를 잘 받는지 컴파일러가 검사하지 않는다.
2) Error 자식 클래스 
- JVM 시스템에서 발생하는 오류를 표현 - 이런 예외를 보고 받는 호출자는 
오류를 처리하지 않아도 컴파일 오류가 발생하지 않는다.



# 데이터를 저장하기위해서 서버의 하드디스크에 저장
- 운영 체제(OS) == > 하드 디스크를 엑세스 할수있는 권한을 가지고 있음
-  운영체제 (OS)
*java는 운영체제에 기생한다.


*java IO 패키지에 등록 되어있다.


- FileOutputStream / FileWriter  


- FileInputStream / FileReader  


[ 파일 스트림의 구조도]



$ 드라이버 : 각  시스템을 제어할수있는  기능 (즉 function) 을 만
들어 놓은 시스템
- MS 윈도 운영체제에서 부터 시작

$ Stream API ⇒  장비와 일관된 방법으로 데이터를 읽고 쓰기 위해 정의해
          놓은 인터페이스를 사용할수 있게 가이드 라인을 제시해 놓은 기능

# Stream API를  JAVA에서는 Stream 클래스라고 불리우며
   해당 Stream 인터페이스를 사용할수 있다.

$추상 클래스
 - sub 클래스들에 공통 속성, 기능들을 상속해주는 역활
- 직접 사용불가
- new 인스턴스 사용 불가   => (new OutputStream(); )  X  안됨.
같은 이름을 사용하는

[Data Processing Stream Class ]
:  중간에서 데이터를 가공하는 역활

    - 중간에서 데이터를 제외한 모든 클래스
   -  위의 클래스를 제외한 모든 클래스
   -  구분하는 방법: 생성자에서 다른 스트림을 요구한다면
   -  이것은 혼자 입.출력을 할 수 없다는 뜻이기 때문에
  -   데이터 가공 클래스리 할 수있다.

[Data Sink Stream 의 다양한 클래스들]


**참조 URL





2013년 8월 6일 화요일

8월 6일 자바수업 내용로그 정리


    [연산자]

- 컴퓨터 상에서 - [음수] 를 표현할때 == >> 2의 보수로 표현


[비트 연산자]

 - 데이터 값을 32bit의 이진bit로 변환시켜 각 비트간의 연산을 한다.
AND 연산자 (&)
각 위치에 대은되는 비트가 모두 1을 나타낼 경우에는 그대로 1을 하나라도
0일경우에는 0을 넣는 비트연산자이다.
예)
0000 0000 0000 0000 0000 0000 0101 = 5
0000 0000 0000 0000 0000 0000 0110 = 6
&
0000 0000 0000 0000 0000 0000 0100 = 4

- Exclusive OR 연산자( ^ )
대조되는 비트가 서로 다를 경우에는 결과값을 1로 주고 같을경우에는
0으로 주는 연산자
예)
0000 0000 0000 0000 0000 0000 0111 = 7
0000 0000 0000 0000 0000 0000 0100 = 4
^
0000 0000 0000 0000 0000 0000 0011 = 3
- OR연산자 ( | ) 
대조되는 비트가 모두 0일경우에는 결과 값으로 0을 주고 한쪽이 1일 경우
1을 줌
0000 0000 0000 0000 0000 0000 0111 = 7
0000 0000 0000 0000 0000 0000 0100 = 4
^
0000 0000 0000 0000 0000 0000 0111 = 7

[ 대표적 연산자 사용 케이스  :  어도비 포토샵 ]
  
- 비트연산자에서 NOT은 ~ 으로 표현한다.
* 논리연산자
  - &&은 피연산자 둘다 ture일 경우에는 ture 값을, 하나라도 false일 경우 false를 결과 값     으로 반환
    ex)
    true && true = true
    false & ? =  false
   
* 조건 연산자(Conditional Operator)

 -Java Source-
public class Operator07
{
public static void main(String[] args) 
{
int 정수1 = 10;
int 정수2 = 20;

int 최대값 = 정수1 > 정수2 ? 정수1 : 정수2;
                

System.out.println("최대값은 : " + 최대값);
}
}

 













===================================================================

[제어문]

# if 제어문
  - Java Source -

public class Control01
{
public static void main(String[] args)
{
/* 테스트 1 : 간단한 조건문
int a = 5;
if( a > 4)
System.out.println("a > 4 입니다.");
System.out.println("종료합니다!");
*/
/* 테스트 2 : { } 을 사용하여 수행할 명령어를 묶어줌.
int a = 5;
if(a > 0) {
System.out.println("a > 0 입니다.");
a = -5;
}
if(a < 0) {
System.out.println("a < 0 입니다.");
a = 0;
}
*/
/* 테스트 3 : if... else
int a = 5;
if(a > 0)
System.out.println("a > 0 입니다.");
else
System.out.println("a <= 0 입니다.");

*/
/* 테스트 4 : if... else if... else
int a = 0;
if(a > 0)
System.out.println("a > 0 입니다.");
else
if (a < 0)
System.out.println("a < 0 입니다.");
else
if(a == 0)
System.out.println("a == 0 입니다.");
else
System.out.println("0도, 음수도, 양수도 아닌수가                                                                     있나요?");
}
}

**if 문에서 두개 블럭이상이면 { }묶어주는 것이 좋은 습관이다.
**else if는 자바에서 하나의 명령어가 아니다.

# for 반복제어문
 - 어떤 인덱스 값을 사용하여 반복 처리시 사용한다.
*문법
  for(초기화문장; 조건식 문장; 증가문)
     문장1


-Java Source -
public class Control04 { public static void main(String[] args) { /* 테스트 5 : 중첩된 반복문 // label의 사용 과 break문 AAA: { for(int i = 1; i < 10; i++) { System.out.println("구구단 " + i + " 단"); for(int j = 1; j < 10; j++){ if(i > 5) break AAA; System.out.println(i + " * " + j + " = " + i * j); } } System.out.println("반복문 끝"); } System.out.println("끝"); */ /* 테스트 6 : continue 문 // 0 에서 9까지 출력하되 단, i 값이 5이면 더이상 그 이하는 수행하지 않고 // 막바로 for문의 증가문에서 수행을 계속한다. for(int i = 0; i < 9; i++) { if(i == 5) continue; System.out.println("i = " + i); } */ /* 테스트 7 : continue 레이블; // continue 문에 '레이블'명을 명시하게 되면, 지정된 레이블로 가서 // 실행을 계속한다. AAA: for(int i = 1; i < 10; i++) { for(int j = 1; j < 10; j++) { if(j == 5) continue AAA; System.out.println(i + " * " + j + " = " + i * j);; } System.out.println("*************************************"); } */ } }


** for반복문 중 라벨을 가지고 멈출수있다.

ex)
   /* 테스트 5 : 중첩된 반복문
// label의 사용 과 break문
AAA:
{
for(int i = 1; i < 10; i++) {
System.out.println("구구단 " + i + " 단");
for(int j = 1; j < 10; j++){
if(i > 5)
break AAA;
System.out.println(i + " * " + j + " = " + i * j);
}
}
System.out.println("반복문 끝");
}

System.out.println("끝");
*/


#[배열]

 *참조변수
   -  자바에서 포인터가 없다고 하지만 사실은 단지 축소 되었을 뿐이다.
   -  reference 형에는 .class 형, interface 형, array 형 총 3가지가 있다
   -  reference 값은 객체에 대한 포인터(주소) 이다.
   -  객체는 동적으로 생성된 class의 instance, array 그리고 interface를 구현한 배열이나
       클래스의 인스턴스를 말한다.
   *  [객체는 Heap 영역에 메모리가 올라가고, 더이상 그 객체를 참조하는 참조변수가 없다        면 가비지 컬렉터에 의해 수집된다.]
     
- Java Source -


/* >> 참조 변수!
 * - 자바에서 포인터가 없다고 하지만...허~~~ 정말 없어졌을까?
 * 단지, 역할이 축소되었을 뿐이다.
 * - reference 형에는 3가지가 있다.
 * class 형, interface 형, array 형
 * - reference 값은 객체에 대한 포인터(주소) 이다.
 * - 객체는 동적으로 생성된 class의 instance, array 그리고 interface를 구현한 배열이나
 * 클래스의 인스턴스를 말한다.
 * - 객체는 heap 이라고 불리우는 메모리상에 생성되며, 더 이상 그 객체를 참조하는
 *   참조 변수가 없다면 가비지 컬렉터에 의해 수집된다.
 * - 자바의 객체는 C++과 같은 언어처럼 명시적으로 free(해제)할 수 없다.
 * 또한, 재생할 수 없다.
 * - 객체의 생성은 new 명령어를 사용한다.
 * ==> 결론적으로, 참조변수는 객체의 주소를 담는 변수이다.
 *  
 * >> 배열
 * - 같은 데이터형 값을 여러개 저장하기 위하여, 연속적으로 이어진, 같은 데이터 형의
 *   메모리를 만드는 것!
 * - 국어, 영어, 수학 과목의 점수를 저장하기 위하여 int 형 변수 3개를 선언하면 된다.
 * int 국어, 영어, 수학;
 *   쩝.. 그러나, 만약 과목이 19개 정도 된다면..허~~~~ 변수 만들기도 만만찮은
 *   일이 될 것이다. 또한, 사용할 때도 변수명이 다 틀리니까..허~~~ 그것도 만만잖네..그려..
 * - 자~~~ 배열이 왔습니다! 배열이... 아주 사용하기 쉽고~~ 다루기 쉬운 배열이 왔어요~~~
 * - 사용방법
 * 배열 선언 : 만약, 위에서 얘기한 19과목의 정수형 점수를 저장하고 싶다면?
 * 1) 먼저 배열 객체의 주소를 담을 참조변수를 선언한다.
 * 방법 1 -> int[] a = null;
 * 방법 2 -> int a[] = null;
 * : [방법 1]은 자바에서 권장하는 방식이다. [방법 2]는 C, C++ 방법과 유사하다.
 *
 * %% 'null' 값은 객체가 없음을 나타내는 reference 값이다. 참조변수를 초기화하는데
 * 사용한다.
 *
 * 2) 배열 객체를 만들어 참조변수에 할당한다.
 * a = new int[10];
 * : int 형 메모리 10개를 만들고, 참조변수 'a'에 할당한다.
 *  즉, 배열 객체의 주소를 변수 'a'에 할당한다고 보면된다.
 *
 * 3) 준비됐나?... 준비됐다... 드뎌 사용을 해보자!
 * a[0] = 10;
 * a[1] = 100;
 * : 배열 참조변수 'a' 에대해 '[]'를 사용하여 인덱스를 지정해 주고, 값을 할당한다.
 *  즉, 위의 예는 참조변수 'a'가 가르키는 배열객체의 0번째 항목에 10을 할당하고
 *  1번째 항목에 100 값을 할당하라는 뜻이된다.
 *
 */

public class Array01 /*extends Object */
{
public static void main(String[] args)
{
/* 배열 객체를 가르킬 참조변수를 만들고, null 값으로 초기화한다.*/
int[] 과목 = null;
과목 = new int[19];

for(int i = 0; i < 10; i++)
과목[i] = 10 * i;

for(int i = 0; i < 10; i++)
System.out.println("과목[" + i + "] = " + 과목[i]);

/* '과목' 참조변수가 다른 배열을 가르키도록 하자!*/
과목 = new int[10];

for(int i = 0; i < 10; i++)
과목[i] = 100 * i;

for(int i = 0; i < 10; i++)
System.out.println("과목[" + i + "] = " + 과목[i]);

/* int 형 메모리 10개를 새로 만들고, 과목은 그 배열을 참조한다.
* 그럼... 이전에 만든 int 형 19개 배열 객체는 어떻게 되었을까?
* - 그 배열의 주소를 잃어 버렸으니 더이상 그 배열을 사용할 방법이 없지 않은가?
*   그러면... 어쩔수 없이 쓰레기 메모리로 취급 되어, 가비지 컬렉터에 의해
*   수집된다. 물론..지금 당장 수집되는 것은 아니고...
*   우리가 신경쓸거 없이.. 수집기가 알아서 하겠지모... ^-^...
*   쓰레기 수집기(garbage collector)에 대해선는 "객체지향 프로그래밍" 편에서
*   다루기로 하겠다!
*/
}
====================================================================