목록분류 전체보기 (94)
우주코딩
제네릭 11-c 제네릭 적용 void add(Object value){ // 특정 객체만 추가하도록 제한할 수 없다. } Object get(){ // 매번 리턴값을 원래 타입으로 형변환 해야한다. // 형변환 하기 번거롭다 } 제네릭 문법 class List { void add(E value); E get(); // E = 타입 파라미터 // 객체를 생성할 때 E 자리에 들어갈 타입이 결정된다. } 타입 정보를 받는 타입 파라미터의 이름은 일반 변수이름을 짓는 규칙과 같다. 그러나 타입을 지정하는 자리에 와야하기 때문에 한 두 자의 알파벳으로 이름을 짓는다. 눈에 띄게 하기위해서 대문자를 사용한다. 자바에서 제안하는 이름이 있고 대부분의 개발자가 그 이름을 사용한다. T - type E - elemen..
유스케이스 액터가 시스템을 통해 달성하려는 업무 목표 유스케이스명 = 업무명으로 이름을 짓는다. 구매하기, 주문하기... etc 유스케이스 관계 포함관계 (include) = 필수작업 회원가입 include 주소검색 주소 검색이 필수이기 때문에 해당 작업을 건너뛰고 회원가입을 진행할 수 없다 확장관계(extend) = 선택작업 회원가입 extend 사진등록 사진등록은 회원가입을 확장한다 사진등록을 건너뛰고 회원가입 작업을 완료할 수 있다. 확장점 (extension point) 에서 작업을 수행할지 선택한다. 프로젝트 추상메서드밖에 없을경우에 인터페이스로 전환하는 것이 유지보수에 좋다 상속해줄 필드도 없고 구현해야할 메서드만 제공할 때 같을 타입으로 묶으면서 구현 규칙을 정하는 경우 인터페이스 문법을 적..
익명클래스 인스턴스를 한 번 만 생성할 것이라면, 로컬 클래스로 정의하는 것 보다 익명 클래스로 정의하는 것이 더 낫다. => 특히 객체를 사용하려는 곳에 바로 익명 클래스를 정의하면 읽기 쉽기 때문에 소스 코드를 유지보수 하기가 더 좋다. 익명 클래스로 인터페이스 구현하기 인터페이스명 레퍼런스 = new 인터페이스명() {}; 호출하는 생성자는 수퍼 클래스의 생성자이다. 익명 클래스로 인터페이스 구현하기 수퍼클래스 레퍼런스 = new 수퍼클래스() {}; 호출하는 생성자는 수퍼 클래스의 생성자이다. 익명클래스 생성자 호출 익명 클래스는 생성자를 직접 정의할 수 없다. 그러나 컴파일러가 컴파일할 때 익명 클래스의 생성자를 만든다. 대신 인스턴스 블록으로 생성자를 대신한다. 인스턴스 블록에 작성한 코드는 ..

inner 객체 레퍼런스 inner 객체 만들 때 바깥 객체 클래스 주소를 가지고 만들어야한다. 바깥클래스 객체 주소가 이너 객체 내부에 보관된다 바깥클래스명.this로 저장된다는 것이다. inner 클래스 사용 inner 클래스의 객체를 생성하려면 반드시 바깥 클래스의 인스턴스 주소가 필요하다. 바깥객체.new inner객체(); 인스턴스 메서드를 호출하려면 반드시 해당 클래스의 인스턴스 주소가 필요하다. class C { static m1(){}; m2(X obj = this.new X();){}; // 이 this. 는 C 클래스를 뜻한다. class X{ test(){}; } } C obj = new C(); obj = new X(); (앞에 this가 생략된 것) obj = new this. n..
인터페이스 구현하는 두가지 케이스 인터페이스를 미리 구현한 추상 클래스를 만든다 (간접 구현) 추상클래스에서 구현하지 않은 인터페이스 규칙은 추상메서드로 남아있기 때문에 이를 상속받은 클래스에서 추상메서드로 남아있는 인터페이스를 구현해야한다. 서브클래스에서 특성에 맞게 오버라이딩 해야하는 메서드는 추상클래스에서 구현하지 않는다. 인터페이스를 오버라이딩 한 클래스를 만든다 (직접 구현) 패키지에 직접 소속된 클래스 "Top Level Class" = 패키지 멤버 클래스 top level class의 접근제한자 public : 다른 패키지에서도 접근 가능 (package-private; modifier 가 없다) : 다른 패키지 접근 불가! 같은 패키지의 클래스를 사용할 때는 패키지 명을 생략할 수 있다. ..

메서드의 명칭 public static int m1(String a){}; public static = modifier int = return type m1(String a) = method signature(파라미터 명은 상관없다.) {} = method body 인터페이스와 추상클래스의 콜라보 인터페이스를 받는다는 것은 인터페이스의 메서드를 모두 구현한다는 뜻이다. 인터페이스를 구현한다는 것은 메서드 바디를 만든다는 것이다. 하지만 일부 메서드만 구현하고 싶은 경우 추상클래스의 도움을 받을 수 있다. A 인터페이스에 rule 1 ~ 4 까지의 추상 메서드가 있는데 모두 구현하고 싶지 않은 경우 추상 클래스에서 메서드 바디를 빈채로 (최소 상태로) 모든 메서드를 미리 구현한다. 해당 추상클래스를 상속하..
객체를 사용한다는 의미 객체를 사용 = 메서드 호출 클래스 -호출-> 다른 클래스.메서드() 클래스 -호출-> 인스턴스.메서드() 객체 사용을 통일한다 = 메서드 호출을 통일한다 객체는 문맥에 따라 해석해야한다 메서드, 인스턴스, 등등 객체지향이란 결국엔 클래스단위로 명령을 쪼개고 메서드를 호출하면서 코드를 짜는 것 인터페이스 정의하기, 구현하기 인터페이스 정의 규칙 규칙1) 인터페이스에 선언되는 모든 메서드는 public 이다. 인터페이스에 정의하는 메서드는 호출 규칙이다. 규칙은 공개되어야 한다. 규칙2) 인터페이스에 선언되는 모든 메서드는 추상 메서드로 선언한다. 인터페이스에 선언하는 메서드는 호출 규칙을 정의한 것이다. 규칙은 클래스가 따라야 한다. 그래서 인터페이스에 선언되는 모든 메서드는 몸체..