* 5개의 로또번호 출력하기
ex :

package collection;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.TreeSet;

public class Lotto {

 public static void main(String[] args) {
  //1~45의 숫자중 중복하지 않는 숫자 6개를 만들어 출력하시오.
  //[5,23,1,8,9,14]
  //랜덤한 숫자
  //숫자 - 6개
  //중복되지 않는 숫자를 어떻게 모을 것인가.
  
  ArrayList arrList = new ArrayList();
  //TreeSet lotto=null;

  for(int i =0;i<5;i++){
   TreeSet  lotto = new TreeSet();
   while(true){
    
    lotto.add((int)(Math.random()*45+1));

    if(lotto.size()==6){
  
     break;
    }
   }
  arrList.add(lotto);
  }
  System.out.println("로또 예상 : ");
  System.out.println(arrList);
  
  System.out.println("로또 예상 : ");
  for(int i=0;i<arrList.size();i++){
   System.out.println(arrList.get(i));
  }
  System.out.println("-----------향상된 for문----------");
  for(Object obj : arrList){
   //TreeSet ts = (TreeSet)obj;
   //System.out.println(ts);
   System.out.println(obj.toString());
   
  }

 }

}

'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글

map실습  (0) 2012.07.28
ArrayList실습  (0) 2012.07.28
컬렉션(collection)  (0) 2012.07.28
인터페이스(interface)  (0) 2012.07.28
추상화(abstract)  (0) 2012.07.28
Posted by 조은성
,

*collection

* 배열은 크기가 한번 정해지면 바뀌지 않는다.
- Collection은 데이터를 계속 집어 넣을 수 있다. (Collection은 자체적으로 데이터를 계속 넣어준다. )
추가 :  add(Object) : boolean (추가가 성공하면 return true, 실패하면 return false)
삭제 :  remove(Object) : boolean (삭제가 성공하면 return true, 실패하면 return false)
조회 : X -> iterator() : Iterator
크기 : size() : int ->관리하는 객체의 수
확인 : contains(Object) : boolean -> 인수로 받은 객체가 collection 안에 있는지 조회.
삭제 : clear() -> 컬렉션 내의 모든 객체 삭체

- Collection<<interface>> -> 값만 모음 - Set : 중복허용(X)
                                               순서(X)

- ~Set - HashSet - 그냥 모으는것.
        TreeSet - 정렬이 필요한 것.


           - List : 중복허용(O)(ex : 똑같은 것을 담을 수 있다.)
       순서(O)(ex : 칸막이가있다.index번호가 생김.배열과 비슷)


 
- ~List - Vector
        - ArrayList(List 중 가장 많이 쓰임) : 전체조회시 좋음.
 - LinkedList : data를 삽입, 삭제시 좋음.

List :  - 추가 :  add(int idx, Object) - 삽입(데이터를 데이터 중간에 넣어주는 것.중간에 값을 넣어주고 데이터가 하나씩 밀려난다.)
            ->idx = 객체를 삽입할 index
        - List는 중간 idx에 null이 있으면 에러가 난다.
 - 수정 : set(int idx, Object) - 교체
 - 구문 : list.Set(2,a);
 - 삭제 : remove(int 삭제할 idx) : Object
  ->특정 idx의 객체를 삭제하고 그 객체를 return
 - 조회 : get(int idx) : Object
         ->특정 index의 객체를 return ->조회
 - indexOf(Object) :  int
  ->인수로 받은 객체의 index(중복된 idx의 0번 idx부터 찾음)를 알려준다.
 - lastIndexOf(Object) : int
  ->인수로 받은 객체의 index(중복된 idx의 마지막 idx)를 알려준다. (ps. 대신 중간에 있는 것은 찾을 수 없다.)

* List ->list -> ArrayList의 객체.

배열 0 ~ length 
for(int i=0;i<list.size();i++){
 Object o = list.get(i);
}

//향상된 for문)
for(Object o : list){
 s.o.p(o);
}


- Map<<interface>> -> 키->값을 쌍으로 모음.  key - value

 

* HashSet ex :

project : day19
package : collection.set
class : SetTest

package collection.set;

import java.util.HashSet;
import java.util.TreeSet;

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

  // Set - Collection 계열(값만 저장) - 순서 : X, 중복허용 : X
  // HashSet, TreeSet(정렬기능)
  HashSet set = new HashSet();
  // 추가
  set.add("홍길동");
  set.add("이순신");
  set.add("유재석");
  set.add("박명수");
  System.out.println(set);// [객체.toString(), 객체.toString()]
  // 출력 [박명수, 이순신, 홍길동, 유재석] // 이걸 보면 순서가 없다는 것을 알 수 있다.
  boolean flag = set.add("이순신");
  System.out.println(flag + " : " + set);// 중복허용이 안되서 false가 들어가고, 값이 안들어가
            // 있는 것을 볼 수 있다.
  System.out.println("총 객체의 수 : " + set.size()); // 삭제전 총 객체의 수
  // 삭제
  flag = set.remove("박명수");
  System.out.println("박명수 삭제 여부 - " + flag + " : " + set);
  System.out.println("총 객체의 수 : " + set.size());// 삭제 후 총 객체의 수

  System.out.println("------------TreeSet------------");
  TreeSet tSet = new TreeSet(); // 출력 : [길성준, 노홍철, 박명수, 유재석, 정준하, 정형돈, 하하]
          // 내부적으로 ㄱ,ㄴ,ㄷ,ㄹ식으로 정렬되어 나온다.
  tSet.add("유재석");// 정렬기능이 필요할 때 쓴다.
  tSet.add("박명수");
  tSet.add("노홍철");
  tSet.add("정형돈");
  tSet.add("길성준");
  tSet.add("정준하");
  tSet.add("하하");
  System.out.println(tSet);
  flag = tSet.contains("정형돈");// tSet에 정형돈 값을 가지는 String 객체가 있는지를 조회
  System.out.println("정형돈 객체 유무 : " + flag);// 정형돈이 tSet에 들어가 있어서 true가
             // 출력된다.

  // 향상된 for를 이용해 전체 데이터(객체)들 조회 - jdk1.5이상 사용가능.
  for (Object o : tSet) {
   System.out.println(o);
  }

  flag = tSet.isEmpty();// 컬렉션의 size()가 0이면 true
  System.out.println(flag);// tSet에 데이터가 들어가 있으므로 false가 출력
  if (!flag) {// tSet이 비어 있지 않으면
   tSet.clear();
  }
  System.out.println("clear() 후 : " + tSet+", tSet.size() : "+tSet.size()); //컬렉션 내 모든 객체를 remove
  tSet.add(1);//TreeSet의 경우는 같은 데이터만 들어가고 HashSet은 다른 타입도 들어간다.
  tSet.add(2);//기본타입데이터(프리미티브 타입)를 추가 하는 것은 jdk1.5 이상에서만 가능
  tSet.add(3);
  tSet.add(4);
 // tSet.add("abcde");
 // tSet.add(true);
  tSet.add(new Integer(5));//jdk 1.4이하에서의 추가 방법
  System.out.println(tSet);

 }

}

---------------------------------------

=====================================================================
project :  day19
package : collection
class : Lotto


package collection;

import java.util.HashSet;
import java.util.TreeSet;

public class Lotto {

 public static void main(String[] args) {
  //1~45의 숫자중 중복하지 않는 숫자 6개를 만들어 출력하시오.
  //[5,23,1,8,9,14]
  //랜덤한 숫자
  //숫자 - 6개
  //중복되지 않는 숫자를 어떻게 모을 것인가.
  TreeSet ts = new TreeSet();
  int cnt = 0;
  
  //while로 하는 방법
  while(true){
   ts.add((int)(Math.random()*45+1));
   //System.out.println(hs.size());
   cnt++;
   if(ts.size()==6){
    break;
   }
  }
  System.out.println("반복 횟수 : "+cnt);
  System.out.println("로또 예상 : "+ts);
  
  ts.clear();
  cnt=0;
  while(ts.size()<6){
   cnt++;
   ts.add((int)(Math.random()*45+1));
  }
  System.out.println("반복 횟수 : "+cnt);
  System.out.println("로또 예상 : "+ts);
  
  //for로 하는 방법
//  for(;ts.size()<6;){
//   ts.add((int)(Math.random()*45+1));
//  }
//  System.out.println(ts);


 }

}

* project : day19
package : collection.list
class : ArrayListTest

 

package collection.list;

import java.util.ArrayList;

public class ArrayListTest {
 public static void main(String[] args) {
  arraylistBasic();
 }
 public static void arraylistBasic(){
  ArrayList list = new ArrayList(); //배열에 몇개 들어갈지 모르겠다 하면 이렇게 선언하고 딱 몇개 들어갈지 알면 아래와 같이 생성하는게 좋다. 수행시간이 짧아진다.
  //ArrayList list = new ArrayList(10);//초기 length(저장할 수 있는 크기)
  //추가
  list.add("유재석");
  list.add("박명수");
  list.add("정준하");
  list.add("노홍철");
  System.out.println(list);
  
  //조회 - get(int idx) : Object - index의 시작 : 0
  String str = (String) list.get(0);
  System.out.println(str);
  
  System.out.println("-----전체 조회 패턴-----");
  //전체 조회 패턴
  for(int idx=0;idx<list.size();idx++){
   System.out.println(list.get(idx));
  }
  System.out.println("-----향상된 for문 이용 조회 1.5 이상----------");
  for(Object o : list){
   System.out.println(o);
  }
  
  System.out.println("-----삭제----------");
  boolean flag = list.remove("유재석");
  System.out.println("삭제여부 : "+flag+" - "+list);
  
  Object obj = list.remove(1);
  System.out.println("삭제된 객체 : "+obj);
  System.out.println("삭제여부 : "+flag+" - "+list);
  
 }
}


* project : day19
package : collection.dto
class : PersonDTO


package collection.list;

import java.util.ArrayList;

import collection.dto.PersonDTO;

public class ArrayListTest {
 public static void main(String[] args) {
  // arraylistBasic();
  arraylistDTO();
 }

 public static void arraylistDTO() {
  ArrayList list = new ArrayList();
  PersonDTO pdto = new PersonDTO("id-1", "홍길동", 20, "서울");
  list.add(pdto);

  list.add(new PersonDTO("id-2", "이순신", 30, "인천"));
  list.add(new PersonDTO("id-3", "강감찬", 40, "부산"));
  list.add(new PersonDTO("id-4", "김유신", 50, "천안"));
  for (int idx = 0; idx < list.size(); idx++) {
   Object obj = list.get(idx);
   System.out.println(obj.toString());
  }
  System.out.println("-------이름들만 출력 getName()---------");
  for (int idx = 0; idx < list.size(); idx++) {
   PersonDTO obj = (PersonDTO) list.get(idx);
   System.out.println(obj.getName());
  }
  System.out.println("-------향상된 for문을 이용해 나이만 출력---------");
  for (Object o : list) {
   // PersonDTO pto = (PersonDTO)o;
   // System.out.println(pto.getAge());

   System.out.println(((PersonDTO) o).getAge());

  }
 }

 public static void arraylistBasic() {
  ArrayList list = new ArrayList(); // 배열에 몇개 들어갈지 모르겠다 하면 이렇게 선언하고 딱 몇개
           // 들어갈지 알면 아래와 같이 생성하는게 좋다. 수행시간이
           // 짧아진다.
  // ArrayList list = new ArrayList(10);//초기 length(저장할 수 있는 크기)
  // 추가
  list.add("유재석");
  list.add("박명수");
  list.add("정준하");
  list.add("노홍철");
  System.out.println(list);

  // 조회 - get(int idx) : Object - index의 시작 : 0
  String str = (String) list.get(0);
  System.out.println(str);

  System.out.println("-----전체 조회 패턴-----");
  // 전체 조회 패턴
  for (int idx = 0; idx < list.size(); idx++) {
   System.out.println(list.get(idx));
  }
  System.out.println("-----향상된 for문 이용 조회 1.5 이상----------");
  for (Object o : list) {
   System.out.println(o);
  }

  System.out.println("-----삭제----------");
  boolean flag = list.remove("유재석");
  System.out.println("삭제여부 : " + flag + " - " + list);

  Object obj = list.remove(1);
  System.out.println("삭제된 객체 : " + obj);
  System.out.println("삭제여부 : " + flag + " - " + list);

 }
}

'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글

ArrayList실습  (0) 2012.07.28
5개의 로또번호 출력하기 - collection실습  (0) 2012.07.28
인터페이스(interface)  (0) 2012.07.28
추상화(abstract)  (0) 2012.07.28
다형성 - 실습  (0) 2012.07.28
Posted by 조은성
,

* interface

* abstract는 class가 가진 것 모두 가질수 있다.
* 인터페이스는 컴파일 시점에 오로지 부모 타입의 역할만 하지만 abstract는 메소드도 만들어 사용도 가능하다.
* interface(기본적으로 abstract와 같으나 부모의 역할만 하고 type의 역할만하고 객체를 생성할수는 없으나(abstract), interface는 추상메소드와 static final 변수만 가질 수 있다. 생성자도 없고, 구현된 메소드없고 타입 역할만 하는 것이다. )
- interface : 완벽히 추상화된 구조.
- 역할 :  상위 Type으로서의 역할 - 자식(하위)클래스에 대한 type과 template을 위한 구조.
- 구문 : [접근제한자] interface 이름[extends 인터페이스,...] <- 인터페이스만 상속받을 수 있고, 인터페이스 끼리는 다중 상속이 된다.
 {
  구현 :  [ public static final ] 변수 = 값;   //[]안에 내용은 생략가능 자동으로 컴파일러가 넣어준다. 무조건 있어야 하므로
   [ public abstract ] 메소드 선언;
 }

-> 접근제한자에는 : publc과 package friendly만 올 수 있다. (인터페이스는 누구든 접근 가능해야 하므로 대부분 public 을 쓴다.)


* interface

- class에서 interface 상속 - 다중상속 가능
  - 구문
    [제한자] class 이름 extends class명 implements interface명, interface명, ....
    {

    }

    public class A extends B implements interfaceA, interfaceB, interfaceC{

    }

* uml

B            <<interface>>          <<interface>>
             interfaceA             interfaceB
^
|                 ^                     ^
                  |                     |
A----------------------------------------

* 기본적으로 자바에서 단일 상속을 지원하는 이유
  A            B
----          ----
go()          go()
 ^             ^
 |             |
 |--------------
        C
       ----
       go()

* interface는 상위 클래스에는 추상화 된 구문만 받아오므로 아래 C에서 go()를 불러도 오버라이딩 된 C의 메소드가 불릴 것이기 때문에 다중 상속이 가능하다.


C                                      A<<interface>>
--------                              ---------------
+void go(){}      ----------------->   void go();
+void come(){}
                                          |
                                          |
                                          V
                                      B<<interface>>
                                      ----------------
                                      +void come();

* class에서 interface 상속 - 다중상속가능
class ->(가 class를 상속할때) class : extends, 단일 상속
interface -> interface : extends, 다중상속
class -> interface : implements, 다중상속

- 역할 : 상위 type - 하위 class가 정의할 메소드 선언(추상)(반드시 오버라이딩하게 만들어 둠)
                   - 다형성에서 하위 객체를 대입할 변수의 type

- public static final 변수 = 값; (여러 곳에서 사용할 수 있는 코드값, 불변의 값을 만들때 사용)
- program의 다른 class들에서 사용할 상수값 선언->코드값, 불변의 값

- 크게 관계 없는 class들을 하나의 type으로 묶을 때 사용.
ex :                                                                       수퍼히어로
                이동수단                 Flyer                               ^                                                 
                                           ^                                  |
                    ^                      |                --------------------------------------
                    |                      |----------------|                 |                  |
-------------------------------------------                슈퍼맨        스파이더맨        배트맨
|                   |                     |               
자동차              배               비행기           

 

* 공통적인 동작을 뽑아서 만든 인터페이스에는 Able을 뒤에 붙인다. (ex : FlyerAble)

*
project : day18
package : interfacetest
class : InterfaceTest
interface : InterfaceA
interface : InterfaceB <- InterfaceA를 상속
interface : interfaceC


package interfacetest;

public class InterfaceTest {
 public static void main(String[] args) {
  SubClass1 s1 = new SubClass1();
  InterfaceA s2 = new SubClass1();
  InterfaceB s3 = new SubClass1();
  
  s2.methodA();
  //s2.methodB();
  s3.methodA();
  s3.methodB();

 }

}


--------

package interfacetest;

public interface InterfaceA {
 public static final int CONST_A = 10;
 //int CONST_A = 10;//public static final을 생략하면 컴파일러가 자동으로 만들어 준다. 위 아래 두개가 같은식이다.
 public abstract void methodA();
 //void methodA(); //public abstract를 생략하면 컴파일러가 자동으로 만들어 준다. 위 아래 두개가 같은식이다.(컴파일러가 자동 생성해 주는 이유는 무조건 필요하기 때문이다.
 
}

---------
package interfacetest;

public interface InterfaceB extends InterfaceA {
 public abstract void methodB();
}

------
package interfacetest;

public interface InterfaceC {
 public abstract void methodC();
}


-----
package interfacetest;


public class SubClass1 implements InterfaceB {

 @Override
 public void methodA() {
  System.out.println("SubClass1.methodA()");

 }

 @Override
 public void methodB() {

  System.out.println("SubClass1.methodB()");

 }

}


--------
================================================================================================

* interface는 class가 아니고 타입의 역할만 하는 거다. 객체화 되지 않는다.
* 추상화class는 class 되고 객체화 되고, 타입의 역할도 한다.

package interfacetest;

public class InterfaceTest {
 public static void main(String[] args) {
  SubClass1 s1 = new SubClass1();
  InterfaceA s2 = new SubClass1();
  InterfaceB s3 = new SubClass1();
  
  s2.methodA();
  //s2.methodB();  //InterfaceB에 선언된 메소드 이므로 컴파일 에러
  s3.methodA();
  s3.methodB();
  SubClass2 su1 = new SubClass2();
  InterfaceA su2  = new SubClass2();
  InterfaceB su3 = new SubClass2();
  InterfaceC su4 = new SubClass2();
  
 }

}


---------

package interfacetest;


public class SubClass1 implements InterfaceB {

 @Override
 public void methodA() {
  System.out.println("SubClass1.methodA()");

 }

 @Override
 public void methodB() {

  System.out.println("SubClass1.methodB()");

 }

}


--------

package interfacetest;


public class SubClass2 implements InterfaceB, InterfaceC {

 @Override
 public void methodA() {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void methodC() {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void methodB() {
  // TODO Auto-generated method stub
  
 }
 
}

--------

package interfacetest;

public interface InterfaceA {
 public static final int CONST_A = 10;
 //int CONST_A = 10;//public static final을 생략하면 컴파일러가 자동으로 만들어 준다. 위 아래 두개가 같은식이다.
 public abstract void methodA();
 //void methodA(); //public abstract를 생략하면 컴파일러가 자동으로 만들어 준다. 위 아래 두개가 같은식이다.(컴파일러가 자동 생성해 주는 이유는 무조건 필요하기 때문이다.
 
}

-------

package interfacetest;

public interface InterfaceB extends InterfaceA {
 public abstract void methodB();
}

--------

package interfacetest;

public interface InterfaceC {
 public abstract void methodC();
}

'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글

5개의 로또번호 출력하기 - collection실습  (0) 2012.07.28
컬렉션(collection)  (0) 2012.07.28
추상화(abstract)  (0) 2012.07.28
다형성 - 실습  (0) 2012.07.28
다형성(polymorephism)  (0) 2012.07.28
Posted by 조은성
,