2017. 8. 28 - pobi 강의
앞으로의 학습 방향
- 월 - 상속
- 수 - Exception(예외처리), lotto game -> web, Chess game -> web
- 금 - 쓰레드, 프로세서
- 월 - Ajax
- 수 - Summary(요약)
- 금 - 쉘 스크립트를 이용한 자동화
질문
- NIO를 학습할려면 어떤 책이 좋은가?
- 작은 서버를 구현하면서 공부해봐라(국내에 책이 몇권 없다..)
- 설계할때 인터페이스를 구현해서 강제로 구현할 것을 정한다. 인터페이스를 구현한 클래스를 상속한 클래스는 인터페이스의 기능이 필수적이지 않을수 있지않은가?
- 클래스를 만들기전 클래스들의 상속구조를 먼저 설계 해 놓고 코딩을 해야하지만 현실을 그게 잘 안된다. 그래서 상속할때는 신중히 해야한다.
-
상속과 인터페이스의 차이점은 상속은 부모클래스에서 이미 메소드를 구현이 되어잇어서 자식클래스에서 그대로 사용할 수 있지만 인터페이스는 구현부가 없기때문에 상속 받는 클래스에서 구현해야한다.
- 부모클래스에 메소드가 protected 는 어떤 기능을 가지고 있는가?
- 접근제어자의 차이
- private - 클래스 내에서만.
- default or package - 같은 패키지 내에서만.
- protected - 상속 받은 클래스(상속을 받으면 다른패키지에서 사용가능)
- public - all
- 접근성은 위가 가장 낮고 아래로 갈수록 넓어 진다.
- 인터페이스와 상속을 언제 써야하는가?
- 인터페이스는 프로그래밍의 명세를 만드는 것(이 명세를 따라야한다 - 표준)
- 명세를 설계하는 것은 프로그래밍을 틀을 잡는 것.
- 회사 면접에서 회사에 대해 질문하라 할때 회사를 알아보기 위한 질문
- 가장 낮은 수준의 회사 (git, svn을 쓰지않는 회사) - 가지마라.
- CI(지속적 통합 툴) - 약간 개발문화가 있는 곳.
- test 유무 ( Junit을 활용한 단위 테스트 ) - 하는게 쉽지않다.
- 코드리뷰를 하는가?
- CI(Continuous Integration) - 지속적인 통합 이란 무엇인가?
- 버전관리시스템에 코드를 푸쉬 해 놓으면, 코드의 변경사항을 체크하고있다가 변경사항이 생기면 자동으로 소스코드를 풀을 한다음에 빌드를 하고 테스트를 한 다음에 모든 테스트를 패스를 한 다음에 배포까지 해주는 프로그램
- 빌드나 테스트를 하다가 오류가 생기면 메신져로 알림을 준다.
상속
커피 전문점 예제
추상화
- 실제 프로그래밍을 할때 완전 똑같은 코드부분이 같은 일은 잘 발생하지 않는다.
- 그래서 한단계 더 들어가서 중복부분을 추상화 할 수 있는 법을 알아야한다.
- 서로 다른 요구사항을 파악하면서 그 중 공통된 부분을 추출할 수 있는 능력이 필요하다.
- 공통된 부분을 추상화 하다보면 메소드가 중복되는 부분이 발생한다.
abstract
- 구현된 클래스에서 일부분은 구현되지 않은 메서드를 만들 때 사용한다.
- 구현되지 않은 메서드는 자식 클래스에서 반드시 구현해야한다(강제)
- abstract를 선언한 메서드는 자식클래스에서 반드시 생성해야하므로 부모클래스에서 사용할 수 있다.
- 부모클래스의 메서드를 설계할때 처음에 잘 설계하지않고 나중에 수정부분이 발생하면 부모, 자식 모두에서 오류가 발생한다.
- abstract 를 쓸려면 인터페이스를 많이 추출하면 인터페이스에서도 중복되는 부분이 발생하는데 이때 중복되는 부분을 추상화 할려면 abstract를 사용하여야 한다.
부모클래스에서 인터페이스를 implements 하면 Override되는 부분은 자식에서 구현해도 된다.
프로그래밍에서 중복코드를 제거하는 방법
- method를 통한 중복 제거 (클래스 내에서 생긴 중복)
- 클래스 간의 중복 제거
- 상속 - 새로운 클래스를 생성.
- Composition(조합) - 새로운 클래스를 생성.
upcasting vs downcasting
Object 클래스
- 모든 클래스들의 부모
- 일반 클래스에서 클래스의 객체를
System.out.println
을 호출하면 클래스안의 toString() 메서드를 호출하게 된다. 하지만 클래스 내에 toString()메서드가 없으면 Object클래스의 toString을 호출해서 클래스명과 주소값이 나오게 된다. - Object 클래스에서 hashCode, equals, toString의 기능을 제대로 이해하자.
Enum 클래스의 equals 와 Object 클래스의 equals의 차이점
- Enum클래스의 equals는 리턴값에 final이 붙어 있고 Object 클래스는 final이 없다.
- 둘의 차이점은 비교의 관점이다. Enum 클래스는 선언될때 상수값으로 선언되기때문에 그저 주소값만을 비교하면 된다. 하지만 클래스는 값과 주소가 다를 수 있기 때문에 final이 붙어있지않다.
TDD
- 테스트 코드를 먼저 작성하고 프로덕션 코드를 작성
- 테스트 코드가 통과하면 빨간줄이 뜨기전까지는 절대 프로덕션코드를 수정하지 않는다.
- In Out 방식 (안에서 밖으로 코딩) EX) 체스게임에서 피스부터 시작해서 보드로 나오는 것.
- Out In 방식 (밖에서 안으로 코딩) EX) 체스게임에서 보드부터 시작해서 피스로 들어가는 것.
- 처음에는 Out In 방식이 테스트 하기 쉽다.
로또게임 TDD 형식으로 구현해보기
- 테스트 코드 먼저 작성
- 테스트를 통과하는 프로덕션 코드 작성
- 코드 리펙토링시 테스트코드는 수정이 되면안된다. 하지만 클래스 분할을 할때 빨간줄이 발생…
Comments