본문 바로가기

[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.. 더보기
한번 날라간 인터페이스 포스팅 아 인터페이스 날라갔네...인터페이스 다양하게 쓴다. 정형화된 개발을 하기 위해 oop적으로 하기위해 adapter 패턴 opserver패턴 봐놔야 한다. 여러가지 타입의 데이터 변형을 interface구현으로 소수 유지 보수를 쉽게 할 수있다. 더보기
용어정리 oop object oriented 원칙을 지키면 된다. 많이짜본거보다 내가 짠거 업데이트 하는게 제일 중요 . 중간중간 잘짜 놓은 코드를 보면서, 하는 것이 중요. 용어 정리. 클래스 실행 시 오브젝트에 관한 소스 코드 즉, 청사진이라 할 수 있다. 객체클래스의 실체. instance라고도 한다. 속성객체의 데이터 이다. Data Field라고도 한다. Data member, instance variable, data field라고도 한다. 메서드algorithm, function, procedure 라고도 한다. 생성자메소드와 비숫한 생성자는 새로운 객체를 초기화 하는데 사용된다. 오버라이드 되지 않는다. 패키지 클래스 또는하위 패키지를 그룹화 한것이다. 프로젝트 하나당 기본적으로 200개 이상의 클.. 더보기
캡슐화,객체관계,상속,다형성,object vs class Encapsulation 캡슐화 나와 관련된 것을 밖에서 제어 하지 않는다. 객체 안에 숨긴다 - 다른애가 못보게 한다. 이게 무슨말이냐면 내가 어떻게 처리하는지에 관계 없이 동작한다. 그러니까 외부에서는 내가 어떻게 구현되어있는지 모르고, 함수를 만들던지뭘 할때, 각각의 메소드는 독립적으로 기능해야 한다. 내부는 보통 class안에서 일어나는 일. 외부는 외보 class를export하면 외부에서 일어난다고 한다. object vs class 클래스는 오브젝트를 만들기 위한 설계도 그러한 설계도 또한 object이다. class는 메모리에 로딩되고 Object는 메모리에 생성된다. Class속의 String 메소드가 있으므로 new String (); 으로 선언할 때,Class가 먼저 메모리에 로딩이 된.. 더보기