[Day27] Java 27 [9/16]

 

์—ด๊ฑฐํ˜•( enums )

 

1. ์—ด๊ฑฐํ˜• - JDK 1.5 ์ƒˆ๋กœ ์ถ”๊ฐ€.   

2. ์ •์˜ - ์„œ๋กœ ๊ด€๋ จ๋œ ์ƒ์ˆ˜๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์„ ์–ธํ•œ ๊ฒƒ

 *                      ์˜ˆ) ํŒ€ ํ”„๋กœ์ ํŠธ  ๊ฐ€์ •

 *                                A           ๋‚จ์ž 1 /์—ฌ์ž 0  int

 *                                B            ๋‚จ์ž 'm' /์—ฌ์ž 'w'  char

 *                                C            ๋‚จ์ž true /์—ฌ์ž fasle boolean

 *                                D            ๋‚จ์ž "" /์—ฌ์ž ""  String

 *                           ํ‘œ์ค€ํ™” X -> ์ฝ”๋”ฉ ๊ฐ€๋…์„ฑX ->  ์œ ์ง€, ๋ณด์ˆ˜ X

 *                          ๋ฏธ๋ฆฌ ์„ฑ๋ณ„  ์ƒ์ˆ˜ ์ •์˜ํ•˜๋Š” ๊ฒƒ -> ์—ด๊ฑฐํ˜•

3. ์—ด๊ฑฐํ˜• ์„ ์–ธ ํ˜•์‹  -> ํด๋ž˜์Šค ๋ณ€ํ™˜

 *                      enum ์—ด๊ฑฐํ˜•์ด๋ฆ„  {  ์ƒ์ˆ˜,์ƒ์ˆ˜,... }

 *                                 Card    

4. ์—ด๊ฑฐํ˜• ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

 *                           ์—ด๊ฑฐํ˜•์ด๋ฆ„.์ƒ์ˆ˜๋ช…

5. ์—ด๊ฑฐํ˜•์˜ ์กฐ์ƒ์€  java.lang.Enum ํด๋ž˜์Šค ์ด๋‹ค.

public class Ex03 {
	public static void main(String[] args) {
		// 
		System.out.println( Gender.๋‚จ์ž );  // true
		
		// ์ƒ์ˆ˜       Calendar.YEAR;  // 1

	} //  main

} // class

class Gender{
	static final   boolean ๋‚จ์ž = true; 
	static final   boolean ์—ฌ์ž = false; 
}

์˜ˆ์ œ1)

//  ๋™, ์„œ, ๋‚จ, ๋ถ           ์ด๋™ํ•   ๋ฐฉํ–ฅ  -> ์—ด๊ฑฐํ˜• ์ •์˜ + ์‚ฌ์šฉ         ,     ๋ฉ”์„œ๋“œ
		
Direction d1 =  Direction.EAST; //
		
/*
System.out.println(  d1  );            // "EAST"
		
// ์—ด๊ฑฐํ˜• ์ƒ์ˆ˜์˜ ์ด๋ฆ„์„ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ 
System.out.println(  d1.name()  );   // "EAST"
		
// ordinal() ์—ด๊ฑฐํ˜• ์ƒ์ˆ˜๊ฐ€ ์ •์˜๋œ ์ˆœ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.   0 ๋ถ€ํ„ฐ ์‹œ์ž‘
System.out.println( d1.ordinal()  );  // 0
		
// valueOf("๋ฌธ์ž์—ด ์ด๋ฆ„")              ๋ฐ˜ํ™˜                ์—ด๊ฑฐํ˜•์˜ ์ƒ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.  EAST
System.out.println(    Direction.valueOf("EAST") );
System.out.println( Direction.EAST ==   Direction.valueOf("EAST") );
*/
			
switch  ( d1 ) {
	case EAST: 
		break;
	case WEST: 
		break;
	case NORTH: 
		break;
	case SOUTH: 
		break; 
} // switch
		
System.out.println("==== ");
Direction [] dArr =  Direction.values();
for (Direction d : dArr) {
	System.out.printf("%s=%d\n", d.name(), d.ordinal());
}






public enum Direction {   // abstract class Direction  extends    Enum
	EAST,                            // static final Direction EAST = new Direction("EAST");
	SOUTH,
	WEST,
	NORTH
	
	// Enum ๋ฉค๋ฒ„ ์ƒ์†
}

์‹ค์ œ ๊ฐ์ฒด ์ƒ์„ฑ:

 *  private String name;
 *  private Direction(String name){
 *      this.name = name;
 *  }

์˜ˆ์ œ2)

์—ด๊ฑฐํ˜•์— ๋ฉค๋ฒ„( ํ•„๋“œ, ๋ฉ”์„œ๋“œ, ์ƒ์„ฑ์ž ) ์ถ”๊ฐ€ํ•˜๊ธฐ 

* Setter๋Š” ํ•„์š”์—…์Šด

public enum Card {
	// The constructor Card(int) is undefined
	CLOVER (10, '♣'),  // ์ƒ์ˆ˜
	HEART(20,'♥'),
	DIAMOND(30,'โ—†'),
	SPACE(40, '♠');

	private  final int value;
	private  final char symbol;
	
	/*
	Card(int value) {
		this.value = value;
		//this.symbol  = '*';
	}
	*/

	public int getValue() {
		return value;
	}

	public char getSymbol() {
		return symbol;
	}

	Card(int value, char symbol) {
		//this(value);
		this.value = value;
		// The final field symbol may already have been assigned
		this.symbol = symbol;	
	}
}

 

// ♠ ♥ โ—† ♣
/*	
System.out.println( Card.HEART );              // "HEART"
System.out.println( Card.HEART.toString() );              // "HEART"
System.out.println( Card.HEART.name() );  // "HEART"
// ์„ ์–ธ ์ˆœ์„œ  0,1,2,3
System.out.println( Card.HEART.ordinal() );   // 1
*/
		
// The field Card.value [ is not visible]
//System.out.println( Card.HEART.value );   // 20
System.out.println( Card.HEART.getValue() );   // 20
//System.out.println( Card.HEART.symbol );   // ♥
System.out.println( Card.HEART.getSymbol() );   // 20
		
Card [] cArr = Card.values();
for (Card c : cArr) {
	System.out.println( c );
}

 

์˜ˆ์ œ3)

์ถ”์ƒ๋ฉ”์„œ๋“œ ์„ ์–ธ ๊ฐ€๋Šฅ

// ์ˆ˜์†ก 
public enum Transportation {
	//   ์ˆ˜์†ก๋น„(๊ธฐ๋ณธ์š”๊ธˆ)
   BUS(100) {   // Transportation  BUS;
	@Override
	int fare(int distance) { 
		return  distance * getBASIC_FARE();
	}
},
   TRAIN(150) {
	@Override
	int fare(int distance) {
		return  distance * getBASIC_FARE();
	}
},
   SHIP(100) {
	@Override
	int fare(int distance) {
		return  distance * getBASIC_FARE();
	}
},
   AIRPLANE(300) {
	@Override
	int fare(int distance) {
		return  distance * getBASIC_FARE();
	}
};

    private final int BASIC_FARE; 
    
	public int getBASIC_FARE() {
		return BASIC_FARE;
	} 

	Transportation(int basicFare) {   
		BASIC_FARE = basicFare;
	}
	
	//  ์ˆ˜์†ก๊ฑฐ๋ฆฌ * ๊ธฐ๋ณธ์š”๊ธˆ = ์ด ๋น„์šฉ
	/*
	int fare() {
		return this.BASIC_FARE;
	}
	*/
	
	// ์ถ”์ƒ๋ฉ”์„œ๋“œ ์„ ์–ธ(์ถ”๊ฐ€)
	abstract int fare(int distance);
}

 

 


์–ด๋…ธํ…Œ์ด์…˜

1. ์ •์˜ : @ํƒœ๊ทธ

 *                   ํ”„๋กœ๊ทธ๋žจ์˜ ์†Œ์Šค์ฝ”๋“œ ์•ˆ์— ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ(javac.exe)์„ ์œ„ํ•œ ์ •๋ณด๋ฅผ 

 *                   ๋ฏธ๋ฆฌ ์•ฝ์†๋œ ํ˜•์‹์œผ๋กœ ํฌํ•จ์‹œํ‚จ ๊ฒƒ์ด "์–ด๋…ธํ…Œ์ด์…˜"์ด๋‹ค. 

 *                   

 *                   ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์œผ๋ฉด์„œ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ 

 *                   ์žˆ๋‹ค.( ์žฅ์  ) (ํ˜„์žฌ ์†Œ์Šค์ฝ”๋”ฉ์— ์˜ํ–ฅ์ฃผ์ง€ ์•Š์ง€๋งŒ ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ์šฉ๋„)

 

2. ์–ด๋–ค ์–ด๋…ธํ…Œ์ด์…˜์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜ = ๋ฉ”ํƒ€ ์–ด๋…ธํ…Œ์ด์…˜

3. ํ‘œ์ค€ ์–ด๋…ธํ…Œ์ด์…˜ (๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋†“์€ ์–ด๋…ธํ…Œ์ด์…˜)

// @Test  ๋‹จ์ง€ ํ…Œ์ŠคํŠธ ์šฉ๋„์˜ ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. 
	// @SuppressWarnings("unused")
	@SuppressWarnings("deprecation")
	public static void main(String[] args) {
		//  
		
	   @SuppressWarnings({ "unused", "resource" })
		// The value of the local variable scanner is not used
	    // Resource leak: 'scanner' is never closed
		Scanner scanner = new Scanner(System.in);
		
		Date d = new Date();
		d.getDate(); // ์ทจ์†Œ์„  
        /* 
		 @Deprecated
		 public int getDate() {
		        return normalize().getDayOfMonth();
		 }
		*/
	}

	@Override
	public String toString() {
		return "Ex06 []";
	}

ex)

deprecated : ์ทจ์†Œ์„ 

Override : ์•ˆํ–ˆ์œผ๋ฉด ์ปดํŒŒ์ผ์—๋Ÿฌ์คŒ

SuppressWarning : ์—๋Ÿฌ๋ฉ”์„ธ์ง€ ์•ˆ๋‚˜๊ฒŒํ•ด์คŒ

 


์ž…์ถœ๋ ฅ

* 1. I/O == ์ž…๋ ฅ, ์ถœ๋ ฅ == ์ž…์ถœ๋ ฅ   Input/Output

* 2. ์ž…์ถœ๋ ฅ ? ์ปดํ“จํ„ฐ ๋‚ด๋ถ€ ๋˜๋Š” ์™ธ๋ถ€์˜ ์žฅ์น˜์™€ ํ”„๋กœ๊ทธ๋žจ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ( ํ†ต์‹  )

* 3, ์˜ˆ)  ํ‚ค๋ณด๋“œ ์žฅ์น˜ -----> [ Ex07.java ]    ----->  ํ”„๋ฆฐํ„ฐ๊ธฐ ์žฅ์น˜

*                                           ํ”„๋กœ๊ทธ๋žจ                         ๋ชจ๋‹ˆํ„ฐ ์žฅ์น˜

*                                           

*            ํ‘œ์ค€ ์ž…๋ ฅ ์žฅ์น˜                                               ํ‘œ์ค€ ์ถœ๋ ฅ ์žฅ์น˜

*            

*            A[์ฑ„ํŒ…]         <-- ์ž…์ถœ๋ ฅ -->             B[์ฑ„ํŒ…]

*            

*            ์„œ๋ฒ„              -> ๋‹ค์šด๋กœ๋“œ

*                                <- ์—…๋กœ๋“œ

* 4. ์ž๋ฐ”์˜ ๋ชจ๋“  ์ž…์ถœ๋ ฅ์€ ์ŠคํŠธ๋ฆผ(Stream)์ด๋ผ๋Š” ๊ฐœ๋…์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. 

*   1 ) ์ŠคํŠธ๋ฆผ( Stream ) ? ๋ฐ์ดํ„ฐ๋ฅผ ์šด๋ฐ˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์—ฐ๊ฒฐ ํ†ต๋กœ           , ๋‹จ๋ฐฉํ–ฅ  , (๋นจ๋Œ€)

*    2)์ŠคํŠธ๋ฆผ์˜ 2๊ฐ€์ง€ ์ข…๋ฅ˜ ( ๋ฐฉํ–ฅ )

*          ์ฝ๊ธฐ(์ž…๋ ฅ) ์ŠคํŠธ๋ฆผ

*          ์“ฐ๊ธฐ(์ถœ๋ ฅ) ์ŠคํŠธ๋ฆผ

*     3) ํ( Queue ) == FIFO ๊ตฌ์กฐ

*          

* 5. ์ŠคํŠธ๋ฆผ 2๊ฐ€์ง€ ์ข…๋ฅ˜ ( ๊ธฐ๋Šฅ )

*     1) ๋ฌธ์ž(ํ…์ŠคํŠธ) ์ŠคํŠธ๋ฆผ

*               ใ„ด ์ฝ๊ธฐ(์ž…๋ ฅ) ์ŠคํŠธ๋ฆผ :  ์ตœ์ƒ์œ„ ๋ถ€๋ชจ ํด๋ž˜์Šค Reader

*               ใ„ด ์“ฐ๊ธฐ(์ถœ๋ ฅ)  ์ŠคํŠธ๋ฆผ :           "                Writer

*               ใ„ด ์œ ๋‹ˆ์ฝ”๋“œ 2๋ฐ”์ดํŠธ == 1๋ฌธ์ž  == 2๋ฐ”์ดํŠธ(16๋น„ํŠธ)

*               ใ„ด     ํ•œ๋ฌธ์ž, ๋ฌธ์ž์—ด, ๋ฌธ์ž ๋ฐฐ์—ด

*          

*          ์˜ˆ) XXXReader, XXXWriter

*               FileReader, FileWriter

*               , BufferedReader, BufferedWriter

*               , InputStreamReader ๋“ฑ๋“ฑ

*               

*     2) ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ

  *               ใ„ด ์ฝ๊ธฐ(์ž…๋ ฅ) ์ŠคํŠธ๋ฆผ :  ์ตœ์ƒ์œ„ ๋ถ€๋ชจ ํด๋ž˜์Šค InputStream

*               ใ„ด ์“ฐ๊ธฐ(์ถœ๋ ฅ)  ์ŠคํŠธ๋ฆผ :           "                OutputStream

*               ใ„ด 1๋ฐ”์ดํŠธ(8๋น„ํŠธ)

*               ใ„ด ๋ฐ”์ดํŠธ, ๋ฐ”์ดํŠธ ๋ฐฐ์—ด,   ์ •์ˆ˜(int) [][][][]

*               

*               ์˜ˆ) XXXInputSteram, XXXOutputSteram

*                      FileInputSteram, FileOutputStream

*               [???.exe ์‹คํ–‰ํŒŒ์ผ , ์ด๋ฏธ์ง€, ์˜์ƒ ๋“ฑ๋“ฑ]

*               ์ฑ„ํŒ…            ๋„คํŠธ์›Œํฌ              ์ฝ๊ธฐ(์ˆ˜์‹ )/์“ฐ๊ธฐ(์†ก์‹ )

*               

* 6.  p 871 ๋ณด์กฐ์ŠคํŠธ๋ฆผ         - BufferedReader ํด๋ž˜์Šค      

*            ใ„ด ์ŠคํŠธ๋ฆผ์˜ ๊ธฐ๋Šฅ์„ ๋ณด์™„(๋ณด์กฐ)ํ•˜๊ธฐ ์œ„ํ•œ ์ŠคํŠธ๋ฆผ์„ "๋ณด์กฐ์ŠคํŠธ๋ฆผ"์ด๋ผ๊ณ  ํ•œ๋‹ค. 

*                                      (== ํ–ฅ์ƒ, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€)

*                                      

*         FileReader fw = new FileReader();  // 2๋ฐ”์ดํŠธ ๋ฌธ์ž ์ŠคํŠธ๋ฆผ

*         fw.read();   // 1 ๋ฌธ์ž  X

*         

*           // ํ•œ ๋ผ์ธ ์ฝ๊ธฐ

*           BufferedReader br= new BufferedReader( fw  );

*           br.readLine();                           

*                                      

* */ 

 

 

<1> ๋ฐ”์ดํŠธ์ŠคํŠธ๋ฆผ

 *                           ํ‘œ 15-1 ์ž…๋ ฅ์ŠคํŠธ๋ฆผ,                  ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์˜ ์ข…๋ฅ˜

 *          1) ํŒŒ์ผ :            File[InputStream]         File[OutputStream]

 *          2) ๋ฉ”๋ชจ๋ฆฌ:          ByteArray[]                  ByteArray[]

 *          3) ํ”„๋กœ์„ธ์Šค:   calc.exe ๊ณ„์‚ฐ๊ธฐ ์‹คํ–‰ํŒŒ์ผ , ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์‹คํ–‰ ์ค‘์ด ํ”„๋กœ๊ทธ๋žจ์„ ํ”„๋กœ์„ธ์Šค

 *                                 Piped[]                             Piped[]

 *           4)์˜ค๋””์˜ค์žฅ์น˜:       Audio[]                        Audio[]

 *                                    StringBuffer[]             StringBuffer[]

 *           

 *           ๋“ฑ๋“ฑ

 *                      ํ‘œ 15-2 InputStream,                   OutputStream ๋ฉ”์„œ๋“œ

 *                      abstract int read() 1๋ฐ”์ดํŠธ         abstract void write( int b )

 *                      int read(byte[] b)                       void write( byte [] b)

 *                      int read(byte [] b, int off, int len)  void write(byte [] b, int off, int len)

 *                      ์œ„์˜ ๋ฉ”์„œ๋“œ ์ดํ•ด~~   ***

 *               

 *                p 871 ๋ณด์กฐ์ŠคํŠธ๋ฆผ ์ข…๋ฅ˜ (  ํ‘œ 15-3 )

 *                      ์ž…๋ ฅ์ŠคํŠธ๋ฆผ                ์ถœ๋ ฅ์ŠคํŠธ๋ฆผ

 *                      Filter[]                   Filter[]            ํ•„ํ„ฐ๋ฅผ ์ด์šฉํ•œ ์ž…์ถœ๋ ฅ ์ฒ˜๋ฆฌ

 *                      Buffered[]             Buffered[]      ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•œ ์ž…์ถœ๋ ฅ + ์„ฑ๋Šฅ ํ–ฅ์ƒ

 *                      Data[]                    Data[]             ๊ธฐ๋ณธํ˜• 8๊ฐ€์ง€๋ฅผ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ

 *                      Sequence[]               X                   ๋‘ ๊ฐœ์˜ ์ŠคํŠธ๋ฆผ์„ ํ•˜๋‚˜๋กœ ์—ฐ๊ฒฐ

 *                      LineNumber[]           X                   ์ฝ์–ด์˜จ ๋ฐ์ดํ„ฐ์˜ ๋ผ์ธ ๋ฒˆํ˜ธ๋ฅผ ์นด์šดํŠธ

 *                      Object[]                  Object[]          ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋‹จ์œ„๋กœ ์ฝ๊ณ  ์“ฐ๊ธฐ ( ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™” )

 *                            X                      PrintStream    ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•˜๋ฉฐ, ์ถ”๊ฐ€์ ์ธ print ๊ธฐ๋Šฅ

 *                                                    PrintStream   System.out.      printf(), println(), print()

 *                     Pushback[]                  X               ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•ด์„œ ์ฝ์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋Œ๋ฆฌ๋Š” ๊ธฐ๋Šฅ

 *                                                                              (  unread , push back to buffer )                                     

<2> ๋ฌธ์ž์ŠคํŠธ๋ฆผ

 *               p 872. ๋ฌธ์ž ์ŠคํŠธ๋ฆผ - Reader, Writer

 *                2:00 ์ˆ˜์—… ์‹œ์ž‘~             

 *                  Reader                 Writer

 *                  File[]                    File[]

 *                  CharArray[]          CharArray[]

 *                    Piped[]               Piped[]

 *                    String[]             String[]

 *                      ํ‘œ 15-5 Reader                             Writer

 *                      abstract int read() 1๋ฐ”์ดํŠธ         abstract void write( int b )

 *                      int read(byte[] b)                       void write( byte [] b)

 *                      int read(byte [] b, int off, int len)  void write(byte [] b, int off, int len)

 *                      ์œ„์˜ ๋ฉ”์„œ๋“œ ์ดํ•ด~~   ***

 

์˜ˆ์ œ Ex 9~ 9_3 ์ฐธ๊ณ  (URL๋กœ ํŒŒ์ผ ์–ป์–ด์˜ฌ์ˆ˜๋„)

 

Ex10 & 10_2 fw.write(n) // ํŒŒ์ผ copy ๋น„๊ต

 

Ex11 ๋ฉ”๋ชจ๋ฆฌ ์ŠคํŠธ๋ฆผ

๋ฌธ์ œ) source ๋ฌธ์ž์—ด์—์„œ [11๋ฒˆ์งธ ๋ผ์ธ]์˜ ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅ   ๊ฐœํ–‰

 

 

StringReader in = new StringReader(source);
BufferedReader br = new BufferedReader( in );

int i = 1;
while( i++ <= 10)  br.readLine();
String line11 = br.readLine();
System.out.println( line11 );

 

  • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
  • ๋„ค์ด๋ฒ„ ๋ฐด๋“œ์— ๊ณต์œ ํ•˜๊ธฐ
  • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
  • ์นด์นด์˜ค์Šคํ† ๋ฆฌ ๊ณต์œ ํ•˜๊ธฐ