본문 바로가기

[2016 - 2019] 학부 정리/Java

18.01.11 자바 - 필기01 미완성

다음주 R,파이썬을 하루정도 하고, 자바랑 r 연결정도, 2틀정도 팀만들어서 하는건 상황봐서.. sql + java 2개가 중점적

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

복습> 

: 객체지향 3가지 특징 (캡슐화, 상속, 다형성)

오버로딩 : 한 클래스에 내에서

오버라이딩 : 상속받은 클래스에서 메소드 재정의해서 쓰는것

생성자(constructor) : public이 아닐수도 있음 

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

-----패턴이야기

(디자인패턴 : 싱글톤, mvc, .... (1. GoF책(C), 2. head first Design patterns(java) - 에릭프리먼)읽어보면 좋을듯)

(디자인 패턴이 뭔데..? 체스와 비슷.. 패턴을 외워두면 엄청 편리함, 문창과등 ㅋㅋ)

IT도 패턴이 있음, 프로그램 실력이 느는 시기가 있음

싱글톤 : 인스턴스를 하나 만들고 공유해야 하는 경우

package oop5b;


public class PointTest {

public static void main(String[] args) {

Point pt1 = new Point();

Point pt2 = new Point();


// object클래스에서 가지고 있는 것들

// 서로다른 인스턴스임을 알 수 있음

// toString : 클래스값 + 해쉬코드값 

// 아무나 인스턴스 만들지 말고 하나만 만들고 공유하고 싶게 만들고 싶을 때

System.out.println(pt1.getClass()); 

System.out.println(pt1.hashCode());

System.out.println(pt1.toString());


System.out.println(pt2.getClass());

System.out.println(pt2.hashCode());

System.out.println(pt2.toString());

}

}

싱글톤(Singleton) 규칙:
1. 생성자를 private으로 만든다.
2. 인스턴스가 스스로를 참조할 수 있는 static 변수 생성
3. 인스턴스의 getter를 만들어 준다. 이때 최초 한번만 인스턴스를 생성하게 한다.
package oop5b;

public class Point {
private static Point point = null;
//오직 이 기능만 쓸수있게한다.
public static Point getInstance() {
if(point == null) { //인스턴스가 없을 때, 처음한번 수행될때만 인스턴스 생성
point = new Point(); 
}
return point;
}
private Point() {
}
}
----
package oop5b;

public class PointTest {
public static void main(String[] args) {
Point pt1 = Point.getInstance();
Point pt2 = Point.getInstance();

// object클래스에서 가지고 있는 것들
// 서로다른 인스턴스임을 알 수 있음
// toString : 클래스값 + 해쉬코드값 
// 아무나 인스턴스 만들지 말고 하나만 만들고 공유하고 싶게 만들고 싶을 때
System.out.println(pt1.getClass()); 
System.out.println(pt1.hashCode());
System.out.println(pt1.toString());

System.out.println(pt2.getClass());
System.out.println(pt2.hashCode());
System.out.println(pt2.toString());
}
}
----
package oop5b;

public class Point {
private static Point point = new Point();
//오직 이 기능만 쓸수있게한다.
public static Point getInstance() {
return point;
}
private Point() {
}
}
아까와는 다르게 각각 인스턴스를 만들지 않고 하나만 만들어 공유하게 된다.

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

복습 >

인터페이스 이야기

변경가능한 규격을 먼저 만든후 그 규격에 대한 객체를 구현

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

자바 목표 : jdbc 디비와 연동까지 이해하기 위한 기초적인거 먼저 배운다. > 

1. 접근제한자 : public, protected, default, private

 

클래스내부

 같은 패키지

 상속관계

 누구나

 public

 O

 O

 O

 O

 protected

 O

 O

 O

 X

 default

 O

 O

 X

 X

 private

 O

 X

 X

 X


같은 패키지가 상속(다른사람이 내꺼를 가져다 쓴거)보다 우선순위가 높다! 

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

2. Final

클래스 : *상속을 받지 않고 원형그대로 유지해야 하는 클래스인 경우 : final을 붙인다. 상속불가

메소드 : 메소드에 final을 붙이면 상속은 가능하지만 그 메소드는 오버라이딩이 불가하다. 오버라이드 불가

변 수   : 변수앞에 final을 붙이면 그 변수는 변경이 불가하고 초기값을 주거나 생성자에서 줘야 한다. setter있음 안됨 

*static 과 붙여서 공유하되 변결 불가한 변수로 쓰임

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

3. pakage(java, javax, org - 3가지)

(자바8기준) - https://docs.oracle.com/javase/8/docs/api/

OS spec을 맞추는것:java os api를 그대로 쓴거, ex.awt,  javax(확장) 자바 자체적으로 확장시킴ex.swing,  otg : 표준관련 ex. w3c, xml ..

책 6,7,8장 필요부분 다 봄, 예제 확인하기, 동영상강의 추천

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

인터페이스 연습!

인터페이스는 제품의 스펙을 적어놓은 것, 규칙, 그래서 값을 가질수 없다.

static int max_channel = 100 -> 상수가 됨

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

4. 예외처리

(일반예외, 런타임(실행) 예외)

--------- 일반예외

package Exception;


public class ExceptionTest01 {

public static void main(String[] args) {

String str = null;

try {

System.out.println(str.toString());

//throw new NullPointerException()

} catch (Error | Exception e) { //Exception e = new NullPointerException();, 업캐스팅, 자바7이상 |(또는) 기능

e.printStackTrace();

} finally { //예외가 발생하던 안하던 무조건 수행하고 싶은것이 있을 때(ex. 자원을 끊는것들)

System.out.println("finally");

}

System.out.println("종료");

}

}

따로따로 하고 싶다면 catch를 여러개!!

nullpointer exception -> exception : OK, exception -> nullPointerException : X, 순서가 상위가 먼저오면 다 잡아버리기 때문에오류발생

위에 하위class, 아래에 super class 배치해야한다.

-------- runtime 예외

->이건 직접 예외처리

package Exception;


public class ExceptionTest02 {

public static void main(String[] args) {

runMethod();

System.out.println("종료");

}


private static void runMethod() {

System.out.println("runMethod block");

try {

System.out.println(10 / 0);

} catch (Exception e) {

e.printStackTrace();

} // 불능

}

}

-----------

-> 내메소드를 사용하는곳에서 예외처리 : 더 좋은 이유 - 다른 안드로이드, 웹등에서도 사용가능하다

-> 호출할때 한번에 묶어서 하면 좋음

package Exception;


public class ExceptionTest02 {

public static void main(String[] args) {

try { //메소드 호출한쪽에서 예외처리

runMethod();

} catch (Exception e) {

e.printStackTrace();

}

System.out.println("종료");

}


//예외발생

private static void runMethod() throws Exception {

System.out.println("runMethod block");

System.out.println(10 / 0);

}

}

----------------
package Exception;

public class ExceptionTest02 {
public static void main(String[] args) {
try {
runMethod();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("종료");
}

private static void runMethod() throws Exception {
System.out.println("runMethod block");
//System.out.println(10 / 0);
throw new NullPointerException(); //이곳에서 NullPointer예외가 발생했다고 생각하고 예외를 보여줌 
}
}
//필요할 때가 있음 -> 에러나는 사황을 테스트를 할때 이렇게 해서 상황을 만들고 처리를 해준다.
-------------------------------------------------------------------------------------------------------------------------------------
디버깅하는 방법
스레드
jdbc