관리 메뉴

JIHYUN JEONG

[java] 엄마도 이해하는 자바 기본 3일차 본문

Information Technology/Java

[java] 엄마도 이해하는 자바 기본 3일차

StopHyun 2013. 2. 18. 11:19

 

exception.zip

 

inner.zip

 

pusan.zip

 

seoul.zip

 

StaticMethod.java

 

StaticTest.java

 

util.zip


□ 어제 수업 복습 (9:00 ~ 9:30)

  - 상태 : 추상클래스 Shape, 서브클래스 Rect, Circle, 메인클래스 ShpaeUser 

  

   public class IShapeUser {

public static void main(String[] args) {

IShape[] is = new IShape[2];

is[0] = new ICircle(10); // ICircle의 주소값이 is[0]로 들어감, ICircle 다른 공간에 따로 생성됨

is[1] = new IRect(10, 25);        // IRect의 주소값이 is[1]로 들어감, IRect 다른 공간에 따로 생성됨 

for(IShape i : is){

System.out.println(i.getClass()+"  "+i.getArea() +"  "+ i.getCircum());


□ static

 - 객체들 간에 공유되는 유일한 값

 - 멤버필드, 메소드, 블록 앞에 사용


□ VM memory 구조

 - Class area(구조가 등록되는 공간,클래스 구조) : StaticTest [**scount, count

 - Method stack frame : main()

 - Heap : st1 [count] , st2 [count] , st3 [count]

 

※static은 Class area에 남아있고 Heap영역에는 들어가지 않는다. static scount를 사용할려면 Heap영역에서 Class area쪽을 참조해서 쓴다.


  public class StaticTest {

int count;

static int scount;

public static void main(String[] args) {

StaticTest s1 = new StaticTest();

StaticTest s2 = new StaticTest();

StaticTest s3 = new StaticTest();

System.out.println("s1.count :" + ++s1.count + "  " +"s1.scount :"+ ++s1.scount);

System.out.println("s2.count :" + ++s2.count + "  "+ "s2.scount :"+ ++s2.scount);

System.out.println("s3.count :" + ++s3.count + "  "+ "s3.scount :"+ ++s3.scount);

}


}


 

※ static은 Class area등록이 되서 scount가 먼저 생성되고 count는 객체가 생성될때 (Heap에) 생성된다.

    정확하게 말하면 프로그램이 실행되기 전에 static은 등록됨

    ex) 소스작성 → complie → [static수행 시기] → exe

 


※ static은 객체생성없이 클래스이름.변수로 사용하면 됨 (중요)

  EX) java.lang.Object

    • java.lang.Math

     Math.PI


 [예시]


 public class StaticTest {

int count;

static int scount;

public static void main(String[] args) {

StaticMethod.go();       //

 

}


}


 

public class StaticMethod {

public static void go(){

System.out.println("gogogogogo...........");

}

public static void main(String[] args) {

System.out.println(StaticTest.scount);   // 

}


}

 


 

※ static block은 메인함수 실행 전에 사용할 경우

[예제]


 

public class StaticTest {

int count;

static int scount;


static{

System.out.println("static block1....");

}

public static void main(String[] args) {

StaticMethod.go();

 

 

}

static{

System.out.println("static block 2.....");

}


}

 


출력값 


 

static block1....

static block 2.....

gogogogogo...........


 

□ package (10:30 ~ 11:30)

 - 폴더와 같은 개념

 - import 단축키 : Ctrl + Shift + O(알파벳)


 package korea.seoul


 ○ Package 내부에서의 접근

   범위 넓은 → 좁은 : public > protected > default > private


modifier 

Same class 

Same package 

Sub class 

Universe 

public 

Y 

Y 

Y 

Y 

protected 

Y 

Y 

Y 

N 

default 

Y 

Y 

N 

N 

private 

Y 

N 

N 









※     getter, 값을 확인 → 반환 | setter, 값을 받아 → 저장

 

source → Generate Getter and Setter (Getter, Setter 자동생성)

source → Constructor and using field (생성자 자동 생성)

 


※ Dos 창에서 complie을 해야되는 상황

 - Compile 

   c:\javatest> javac -d . Tommy.java

   korea > seoul : Tommy.class


 - Exe

    c:\javatest> javac korea.seoul.Tommy


□ Exception (PM 1:00 ~

 ○ 프로그램 실행 중 발생하는 문제 상황

 ○ Ex) 데이터베이스 연결 시, 파일 입/출력시, 배열의 잘못된 인덱스 접근


□ Exception / Error

 ○ Error

   - 복구 불가능한 문제 상황

   - StackOverFlowError, NoSuchMethodError,....

 

  ○ Exception

   - 복구 가능한 문제 상황

   - NullPointerException, ArithmethicException, IOException, .....

   - 컴파일러가 컴파일 시 확인하는 예외

    * 예외처리 필수

    * RuntimeException 유형이 아닌 예외

   - 컴파일러가 컴파일 시 확인하지 않는 예외

    * 예외처리 옵션

    * RuntimeException 유형 예외


※ Exception

 1. Runtime Exception   (컴파일은 됨, 신경 안써줘도 됨)

 2. Non-Runtime           (컴파일 부터 안됨, 신경 꼭 써야함)


□ Exception Handling

 1. 예외가 발생한 곳에서 직접 처리 (주로 이게 많이 사용)

  - try ~ catch ~finally

 2. 호출자로 보내서 예외처리 위임

  - throws


※ exception type 확인 방법 



※ 지역변수는 항상 초기값을 주어야 한다. 기본값이 없다. 


 ○ 예외처리 처리 방법

  1. try~catch

  


  2. throws 




※ Exception이 다른 exception의 최상위 Exception


□ Inner class (즉, 클래스 안에 클래스)

 - Inner class는 class 안에서만 쓰임

 - Public 클래스는 하나만 사용 할 수 있다, but Inner 클래스에 Public 클래스가 있어도 상관없다. Top level C





 1. static class (많이 사용됨)



 2. member class

 



 3. local class (잘 사용이 안됨)



 4. anonymous class (많이 사용됨, 안드로이드)


 

package asianaidt.inner;


//  anonymous(무명클래스) class 예제

abstract class Song{

public abstract void sing();

}


interface Video{

public void start();

}


public class MP3Player {

public void play(Song s) {

s.sing();

}

public void play(Video v){

v.start();

}


public static void main(String[] args) {

MP3Player player = new MP3Player();

player.play(new Song(){ // Song을 상속 받는 이름 없는 서브클래스를 정의, 생성을 바로 함

public void sing(){

System.out.println("싸이-강남스타일"+"  "+"Song의 서브클래스입니다. 그리고 sing 메소드를 재정의 했습니다.");

}

});

player.play(new Song(){

public void sing(){

System.out.println("김범수-보고싶다");

}

});


player.play(new Video(){

public void start(){

System.out.println("심형래-용가리");

}

});

}

}

 


□ JCF(Java Collection Framework)

 - 여러 개의 데이터를 저장하고 관리할 수 있는 자료구조

 - 데이터 저장 / 관리 방식에 따라 List/Set/Map 구조로 나뉨


□ Collection 관련 클래스

 List

Set 

Map 

순서 O

중복 O

순서 X

중복 X 

(key, value) 

ArraryList

Vector 

HashSet 

HashMap

HashTable 

 

 ○ Vector

 [예제]

 

package asianaidt.util;


import java.util.Vector;


public class VectorTest {


public static void main(String[] args) {

Vector v = new Vector(2,2); // vector의 기본크기는 10칸으로 만들어짐

System.out.println(v.capacity()); // vector의 순수한 크기

// vector의 사이즈를 지정하지 않을 경우 2배로 사이즈가 늘어남

v.add(100);

v.add(3.14);

v.add("hello");

System.out.println(v.capacity());


for(int i=0; i<v.size(); i++)

System.out.println(v.get(i));


 

        Vector<String> v2 = new Vector<String>(); // 제너릭사용하여 String 타입만 가능

v2.add("hello");

v2.add("tommy");

v2.add("welcome");

for(String a : v2)

System.out.println(a);

 

}


}

 

○ ArrayList

 

 

 [예제]

 

 

package asianaidt.util;


import java.util.ArrayList;

import asianaidt.abst.Circle;


public class ArrayListTest {

public static void main(String[] args) {

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

list.add(new Circle(5));

list.add(new Circle(8));

list.add(new Circle(10));

for(Circle a : list)

System.out.println(a.getArea());

}


}


 

 

○ HashSet

 [예제]

 

package asianaidt.util;


import java.util.HashSet;


public class HashSetTest {


public static void main(String[] args) {

HashSet<String> set = new HashSet<String>();

set.add("111");

set.add("111"); // 중복 X

set.add("222");

set.add("333");

set.add("444");

for(String a : set)

System.out.println(a);

}

}


○ HashMap

 [예제]

package asianaidt.util;


import java.util.HashMap;


public class HashMapTest {


public static void main(String[] args) {

HashMap<String, String> map = new HashMap<String, String>(); //HashMap<key,value>, key값은 중복되면 안됨

 

 

 

 

 

 


map.put("num", "111");

map.put("name", "data");

map.put("address", "seoul");

map.put("address", "berlin"); // 키값이 중복일땐 덮어쓰기가 됨

System.out.println(map.get("num"));

System.out.println(map.get("name"));

System.out.println(map.get("address"));

System.out.println(map);

}


}


 

 

※ 제너릭 (차후 개념 정리 예정)



Comments