-
[JAVA]_7일차_05.05프로그래밍/Java 2021. 5. 5. 22:44
Important
자신이 바라는 모습을 계속 쓸 수록 점점 그 모습이 자신의 모습이 되어간다.
What I don't know
워커 홀릭이 되는 이유: 잘할수록 보상이 주어지기 때문 일이 힘든 이유: (기본적으로는) 직장에서 맡기는 일을 잘 못하기 때문
다형성을 남용할 경우 치뤄야 하는 댓가
- public method의 계약
상속의 문제점
- 상속 관계에서 특정 클래스에만 특정 메소드를 추가하고 싶을 때
- 추상화함으로써 특정 메소드에서 오버라이딩
- 하지만 문제는 해결되지 않음 (빈 메소드일지라도 메소드가 남아있다)
- 특정 클래스에만 메소드를 추가하면 되지 않나?
- 최악의 방법이다
- 상위클래스 타입에서 접근할 수 없다 → 다형성을 잃어버리게 된다
- 특정 메소드가 있다는 것을 외우고 있어야 한다 → 구조의 복잡성 증가
- 추상화함으로써 특정 메소드에서 오버라이딩
인터페이스
- 100% 추상 클래스
- 객체를 만들 수 없다
어떤 클래스를 하위클래스로 만들지, 추상 클래스로 만들지, 아니면 인터페이스로 만들지를 어떻게 결정 할 수 있을까요?
- 클래스를 새로 만들려고 할 때 그 클래스가(Object를 제외한) 다른 어떤 유형에 대해서도 'A는 B다' 테스트를 통과할 수 없다면 그냥 클래스를 만듭니다.
Dog d = new Dog(); 타입 / 레퍼런스 변수 / 키워드 / 생성자
생성자
- 생성자의 규칙
- 클래스와 이름이 같아야 한다
- 리턴 타입이 없어야 한다
- 인스턴스를 생성할 때 실행되는 메소드이다.
- 보통 필드의 값을 초기화 하려는 목적으로 사용한다
- 오리 객체를 만들었는데 size가 0일 수는 없지 않은가
- 오버로딩 해서 사용가능
- 매개변수가 있는 생성자를 직접 만들면 ex. public Book(int author) { } 컴파일러에서 기본 생성자를 따로 만들어 주지 않는다
하위 클래스에서 new를 하면 상위 클래스의 생성자도 작동한다?
- 하위 클래스에서 new를 하면(객체를 만들면) 전체 상위 클래스들의 생성자가 작동하고 심지어 추상클래스의 생성자 조차 작동한다
- 생성자의 작동 순서는 상위 클래스 → 하위 클래스 이다.
- (부모 없이 자식이 있을 수 없기 때문)
- super()을 사용해서 사용자가 직접 할 수 있다
객체생성의 3가지 기적
- 객체를 선언하고
- 설계도로 하여금 생명체가 생긴다
- 레퍼런스 변수 — 객체 간 연동이 된다
super, this
- super() : 상위 클래스의 생성자 실행
- 사용 시, 부분의 가장 상단에 위치해야 한다. (부모 없이 자식이 있을 수 없기 때문)
- super.xxx : 상위 클래스의 멤버(필드,메소드) 이용
- this() : 현재 클래스의 생성자 실행
- this.xxx의 중복 코드를 피하기 위해 this()로 현재 클래스의 생성자 호출(ThisIsJava.213p)
- 특정 생성자로 몰아줄 수 있다
- this.xxx : 현재 클래스의 멤버(필드,메소드) 이용
null
- 레퍼런스 변수에 사용 (ex. Dog a = null)
- 연결을 해제
- 아무것도 없는게 아니다. null을 의미하는 비트값이 들어있다
Head First Design Patterns
Strategy pattern
전략 패턴 참고자료
- 구글에 예제 검색
- https://ko.wikipedia.org/wiki/전략_패턴
HomeWork
- 여러 예제를 참고해, 나만의 예제로 만들어 제출
- 패키지에 자신의 코드 넣기
- 폴더에 자신의 클래스 다이어그램 보내기
- export - 자신의 이름 - 카톡으로 전송
디자인 원칙에서: 상속(Is-a)보다 (Has-a)를 더 선호한다
예외 처리
이것이 자바다 p.422
에러의 종류
- Logic Error
- 일반 예외
- 실행 예외(Runtime Exception)
- Runtime Error: 이 예외를 try-catch로 잡아낸다
예외처리 용어
- throws
- 무조건 써야하는 경우도 있고, 안써도 되는 경우도 있다!
- 보통 File 전송 같은 경우에는 예외를 꼭 잡아야 됩니다
- throw (...) : (...)오류를 발생시켜라!
- try-catch-finally
throws (예외내용) :
- 메소드를 만드는사람이 어떤 오류가 발생할지를 넣어놓아야 사용하는사람이 try-catch에 그 오류내용을 집어넣는다
try-catch (특정 오류가 발생하면 특정 행동을 취하는 것)
try { 오류가 발생할 수 있는 부분 } catch (특정 오류) { 명시된 오류 발생하면 현재 부분 내용 실행 (ex. 오류가 발생하였습니다 출력) } finally { 무조건 실행되야 하는 부분 (오류발생해도, 오류없어도) } 좋은 예외 처리 코드 (상위 예외처리는 가장 아래 배치) try { } catch (특정 오류 코드) { } catch (특정 오류 코드) { } catch (Exception e) { //최상위 예외처리 } public void takeRisk() throws BadException {
SOLID Design Principles
'프로그래밍 > Java' 카테고리의 다른 글
[JAVA]_8일차_05.06 (0) 2021.05.07 [JAVA]_6일차_05.04 (0) 2021.05.05 [이것이 자바다] 4장 확인문제 (0) 2021.04.29 "Java의 정석" - "이것이 자바다" 목차 (0) 2021.04.28 21.04.27 / 혁신성장_인공지능 개발자 과정_2일차 (0) 2021.04.28