본문 바로가기

AdvancedJava

[3일차] 어노테이션 메타데이터. 임의로 어노테이션을 만들 수 있다. 두가지를 정해야한다. retention 과 target retention은 이 정보를 어디까지 가지고 갈것인가. 1. source 타입, 2. class 타입3. runtime 타입 메모리 로딩할때, 같이 로딩해서 실시간으로 가지고 있는다. ex:) 메모리 로딩할때까지 가져갈 수도있고, 프로그램 실행중에도 계속 가지고 있을 수있다. @target({엘리먼트 타입.type,ElementType.METHOD})@Rentention 근데 거의 오픈소스를 많이 씀. 라이브러리에서 그런게 많음. 이러한 어노테이션 정보를 읽을 수 있는 기술을 Reflect라고 한다. - 동적으로 이름을 이용해서 java class를 다루는 방법. - java class 의 이름을 이.. 더보기
[3일차] 예외 처리 실습. 잘못된 부분에서 예외처리나 throw를 하게되면, 해당하는 부분에서 툴들이 자동으로 다음 부분을 잡아준다. package org.taca.hellojava.excetpion; public class BadPointException extends IllegalArgumentException { public BadPointException(){super();}public BadPointException(String message){super(message);}public BadPointException(String message, int x, int y){super(message+" : "+x+" , "+y);}} //////////////// package org.taca.hellojava.excetpio.. 더보기
[3일차]예외처리 에러처리 try catch문 에러를 처리하는 구문 throw Excetion 예외를 상위로 위임해서 처리. 예외처리는 상위로 위임하되 반드시 처리는 해야한다. 이것은 자신이 해당 상황에서 처리하지 못할때 상위로 위임하여, 처리하게 만드는것 제일 불친절한 것은 사용자에게 에러 메세지를 띄우는것. 예외를 디테일 하게 잡기위해서 try{} catchcatchcatch 이런식으로 분기하여 잡을 수 있다. 이때 catch 하는 상황에서는 가장 밑에있는 subclass를 맨 위로 올려야 한다. finally를 사용하면 예외가 발생해도 일단 실행하는 코드를 쓸수있음. RuntimExcetion Vm에서 어플리케이션 수행중 발생하는 예외 상황 ex Runtime Excetion을 상속받아 만들어진 애들. - Secur.. 더보기
[2일차] Inner class,Anonymous Class,instance of ,'==' Operation ,wrapper class oop로 코딩하기 oop로 코딩하기. 내가 이런문제 디자인패턴에 부딪히네 할때, 공부해라.. 이런것들이 있다. 정도는 알아야한다. Inner class 클래스 안에 클래스를 정의하면 이너클래스 코드 구조화 때문에 쓴다. 내가 정의한 클래스 안에서만 쓰는 클래스, 종속성이 명확한 경우에 쓴다. Anonymous Class (익명클래스)new classname or InterfaceName(생성자){ 메소드( ){ .....} } 인터페이스를 익명클래스로 만들어 주는 것은 implements 해서 자동으로 컴파일러가 실행한다. 익명클래스는 결국 상속해서 메소드 오버라이딩 하는것과 같다. instance of 객체가 서로 is-a 관계에 있는 것인가 아닌가에 대한 것. '==' Operation Stirng .. 더보기
[2일차]is-a,has-a 호출 어제 공부한 부분... 생성자는 상속이 안된다. A 와 B 가 Is a 관계일때,A extends B 했다는 얘기. A가 B에게 알려주는 방법,B가 A에게 알려주는 방법 - B의 메소드를 호출 하면 된다. -super.A의메소드(); - B를 상속한 C클래스가 A의 메소드는 부르지 못한다. 부모의 부모 클래스의 메소드는 부르지 못한다. - A가 나를 상속한 애들에게 알려주고 싶을때class A{protected on xxx(){}}이건 한번 해봐야겠다. A와 B가 has a 관계일때별도의 콜백 객체를 만든다. callback 인터페이스를 만든다. 이거도.. 해봐야겠다. 더보기
[2일차] Virtual Method 자바공부하는 방법오라클에서 자바 랭귀지 스펙 원서를 읽자 Virtual Method class 내부에서 함수의 정의만 있고, 구현은 없는 함수. 왜쓸까? - 구체적인 정보들을 추상화 할 필요가 있어서, 어떤 데이터가 넘어올지 모르고, 그에 따른 로직은 공통되기 때문에.일단 로직 구현부분에서 결정이 안된 데이터 부분을 추상적인 부분으로 남기고, 나중에 결정할 수있도록 하기 위해서 - 예로 서버로부터 데이터를 받을 때, 데이터의 파싱과정에서 데이터의 구조가 어떻게 되어있는지 모른다. 때문에 일단 추상적인 부분으로 남기고, 차후 결정할때 구현을 강제하도록 한다. 오버라이드 해서 사용할 경우, 구현을 안할수도 있기 때문에 반드시 abstract 메소드를 만들어서 구현을 강제시킨다. 쉽게말하면 코드의 중복이 사라.. 더보기
복구한 인터페이스 내용 class 선언 class { [][][] } Interface 내가 다른 객체와 정보를 주고받을때, 정해진 규격이나 규약을 정의해서 서로 정형화되게 교환하기 위해서 사용한다. 이렇게 형식으로 알려주는 게 되게 여러가지 의미가 있다. 전혀관계가 없는 클래스 들을 묶을 수 있음 뒤에가서 인터페이스 자세한 걸 배움. 언제 쓸까 ? - data를 읽어올 때, 어디서 읽어 올거냐 ? 잘... 모르겠다. 근데 File에서 읽어올 수도 있고, Network에서 읽어올 수도 있다.읽어오는 데이터를 가지고 파싱 하는 걸 만들건데 ... 이럴 때 인터페이스를 만든다. interface InpuStream;{read();available()close()} FileInputStream implements InputStrea.. 더보기
final keyword final keywordclass B{ final A a;B(){a= new A();a.x=10;} m1(){ a.x=20;} }이거 된다. class B{ final A a; // final 이 부은 필드는 반드시 생성자에서 초기화 해야한다. 생각보다 복잡하다. 이 부분에서 컴파일 에러 난다. m1(){ a.x=20;} }final 은 생성자에서 초기화 할 때, if 문이라도 두번 생성할 수 없다. 그래서 temp 변수로 따로 할당하여 옮기고 한번만 초기화 할 수있게 한다. final 또 다른 예 public m1(){ int x =10; B b =new B(){//여기는 b의 객체안에 있는 코드이기때문에 x를 참조 하지 못한다. m1의 x에서 final 을 붙이게 되면 참조 가능하다. m2(){ x=.. 더보기
static Keyword static Keyword 수학함수들은 static 메소드로 만든다 field에는 static을 붙이지 않고 써야한다. static을 이용한 자원관리 싱글톤 패턴 class A{ static int x; } class B extends A{ } A.x = 10B.x = 20 print A.x 는 20 만약 B클래스에 static int x를 한다면 10이 나온다. static을 이용한 고급 초기화 기법이게 무슨말이냐면Class A{static {이렇게 하면 클래스가 실행이 될 때, 같이 로직이 실행이 된다. 이렇게 하면 static 으로 초기화 할 수있다. }} 메모리 static 먼저 올라오고 그다음 heap에 할당되고, class로직안에 {} 실행되고, 그다음 생성자 실행된다. 더보기
어노테이션, 생성자, 제어자 어노테이션 meta data 이다. 대표적으로@Override @Deprecated @SuppressWarnings 리턴타입이 bool 일때, 억지로 정의 ? 하는거@Rentention 어노테이션 타입 생성자 결국 여러가지 선언 방법이 있다. 생성자는 override 되지 않는다. 생성자는 반드시 super 의 생성자를 호출해야한다. defalt 생성자는 생략가능하다. 여기까지 생성자의 특징. 제어자1. 제어자(modifier)- 클래스, 변수, 메서드의 선언부에 사용되어 부가적인 의미를 부여한다.- 접근제어자 : public, protected, default, private- 그 외 제어자 : static, final, abstract, native, transient, synchronized, vo.. 더보기