#2017. 8. 16. 포비 강의 - 자바 프로그래밍
포비의 모든 프로그래머들이 이것은 반드시 지키면 좋겟다!!
1. 메서드가 한가지일만 하도록 만들자.(한가지 이상의 일은 하지 않게!!!!)
- 테스트하기가 쉬워진다.
- indent를 1까지만 허용하도록 하자.(메서드를 자꾸 쪼개는 연습을 해야한다.)
- 메서드의 라인을 10라인을 넘어가지말자.
2. 중복 코드를 만들지 마라.
- 1번과 연결된 원칙
3. 사람이 알아볼 수 있는 코드 / 주석을 달자
- 메서드의 이름을 잘 지으면 주석이 필요없어진다.(주석이 없어도 사람이 코드를 이해할 수 있게 만드는 것이 이상적!!!)
4. switch 문과 if else문을 인터페이스와 상속으로 없애야 한다.
- 정답은 없다. 상황에 맞게 코드를 쳐야한다.(더 이상 상황을 분리 시킬 수 없을때는 switch나 if else도 써야한다.)
문자열 계산기 - 포비의 라이브 코딩
- 테스트 코드는 어떤 입력이 들어온다는 것을 가정하고 일단 기능들을 우선적으로 구현한다.
- 이런 방법은 메인 메서드를 반복적으로 실행시켜 테스트를 하는 과정을 줄여준다.
- 로직구현을 한가지의 테스트코드를 작성할 때 한가지의 로직 구현을 하므로 1번에 고민할게 1가지 밖에 없어진다.
- 인풋과 아웃풋을 만드는 흐름을 이해하기 위해 일단 테스트를 return으로 성공시키게 하는 것도 초보자 입장에서 좋다.
- 1개의 테스트 케이스 씩 구현해가면서 조금 조금씩 코딩을 한다.
- Step by Step ( Baby Step )
- 프로덕션 코드는 영어로 작성해야하지만 테스트 코드는 한글로 작성하는게 좋다. by 포비
- 아이디와 비밀번호가 다를 때 로그인 실패 같은 경우의 수가 많을 경우 영어로 테스트이름을 작성하면 가독성이 떨어질 수 있다.
- 처음에 코딩을 할때는 정상적인 케이스를 기준으로 코딩을 하고 그 후에 예외처리 코드를 작성한다.
- 예외처리를 꼼꼼히 하지않으면 프로그램이 다운될 수 있다!!!
- 자바에서 객체라는 것은 상태를 가진다는 것 (상태 = 데이터)
- 객체가 로직을 가지도록 만드는게 객체지향 프로그래밍의 요소.
- 객체를 어떻게 추출하느냐에 따라 로직이 달라진다.
- 객체를 추출하는게 안되면 메서드의 매개인자를 추출해서 객체를 만드는 것부터 시작해봐라(매개인자는 같이 다녀야한다!)
- 메서드를 그대로 생성자로 보낸다.
- 매서드의 매개인자는 클래스의 상태값이 된다.
- 매서드를 클래스로 옮겨 매개인자를 지우면 클래스의 상태값을 수정하는 메서드가 된다.
- 객체 지향적으로 프로그래밍을 하면 테스트 하기 쉬워진다.
- 사람이 있는데 죽여야한다. 그럼 죽이는 놈은 사람이라는 클래스가 펄슨이라는 클래스가 있는데 만들고 프로그램에서 그놈을 죽여야하는데 죽이는 주체 킬을 하는것이 객체가 가지고 있어야한다.(타살의 상태도 펄슨이 가져야한다.)
- 숫자를 더하는 주체는 숫자다. 그래서 덧셈의 기능 또한 숫자라는 클래스가 가지고 있어야한다.(수의 변경상태는 숫자가 관리한다.)
- 객체를 구현할 때 객체의 상태를 리턴하지말고 객체 자체를 리턴하는게 좋다.
- 상태값이 없는 클래스는 static으로 구현하는게 좋다.
- 객체지향적인 프로그래밍은 메모리 비효율적인 코딩이 이뤄진다.
- 프로그램을 만드는 사람이 편한 코딩이 좋은가? vs 하드웨어 친화적인 코딩이 좋은가?
- 성능문제가 생기는 것은 프로그래의 1% 정도의 지점만 발생한다.
- 발생하고 고쳐도 늦지 않다. 프로그램을 만들기 전에 성능 걱정부터 하는 것은 프로그램이 절대 나올 수 없다.
- immotable(불변) - 게터 세터가 없는 것.
- motable(변화) - 게터 세터가 있는 것.
학생 정보 시스템 - SIS
- 과목은 학생을 여러명을 가진다.
- 학생은 과목을 여러개를 가진다.
- 필요한 API가 있으면 바로 적용해서 쓰지말고 Test에 study package를 만들어서 API에 대한 연습을 하고 적용해라.
- String 을 쓸때 new String()으로 쓰지마라, 성능 상의 문제가 생긴다.(컴파일시 불필요한 과정이 추가된다.)
- String 은 String + String을 하면 immotable Type이라 문자열 덧셈 연산을 하면 매우 비효율적이다.
- immotable 연산은 버그를 줄여주지만 성능이 떨어질 수 있다.
package, import, 자바 ArrayList, 날짜 API
- hashcode, equals를 활용 하지 않고 ArrayList를 쓰는것은 제대로 된 사용법이 아니다.
Junit의 테스트 코드의 메서드는 무작위 실행이므로 전역변수의 인스턴스 생성은 @Before메서드로 사용하는게 좋다.
자바스크립트의 성능
- 인터프리터 언어는 프로그램 실행 중에 타입 체크를 하기 때문에 자바보다 성능이 느려진다.
Comments