코드스쿼드 4일차
수업 시간에 우리는 다음과 같은 질문을 Pobi 에게 던졌다.
질문 TIme
- 필드/ method 를 static 으로 언제 쓰는지?
- 라인을 언제 띄워야 할까?
- Getter / Setter 를 쓰지 않는 이유
- 생성자
필드/ method 를 static 으로 언제 쓰는지?
변수 앞에 static 이 붙어 있으면 클래스 변수이고, 붙어 있지 않으면 인스턴스 변수이다.
마찬가지로, 메서드 앞에 static 이 붙어 있으면 클래스 메서드이고, 붙어 있지 않으면 인스턴스 메서드이다.
클래스 메서드로 정의하면, 객체 생성을 하지 않고도 클래스명.메서드명() 으로 호출이 가능하다.
인스턴스 메서드는 인스턴스 변수와 관련된 작업을 하는 메서드이다. 인스턴스 변수나 인스턴스 메서드는 객체를 생성해야지만 만들어진다.
반면 인스턴스와 관련이 없는(인스턴스 변수나 인스턴스 메서드를 사용하지 않는) 메서드를 클래스 메서드로 정의한다.
정리하면, 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.
클래스 메서드는 인스턴스 변수를 사용할 수 없다.
메서드 내에 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려해 보아야 한다.
라인을 언제 띄워야 할까?
사실 나는 대학 시절 자바의 Coding Convention을 거의 따르지 않았다. 이것을 왜 따라야 하는지도 잘 몰랐고, 그렇기에 매번 새로운 코드를 짤 때마다 그날 기분 대로 날코딩을 했었던 것 같다. 라인 역시 정해진 틀 없이 3번 띄우기도 하고 1번 띄우기도 하고ㅎㅎ.. Pobi 는 라인 띄우는 시기를 다음과 같이 설명해 주었다.
- 메서드를 시작할 때는 라인을 띄우지 않고 바로 쓰는 것이 일반적
- 한 칸을 띄우는 것은 문맥이 달라지는 부분
Getter / Setter 를 쓰지 않는 이유
자바 기본서에는 객체를 설명하는 Part 에서 90% 확률로 get 과 set 을 등장시킨다.
나 역시 그러한 기본서로 공부를 해왔기 때문에, 자연스럽게 get 과 set을 썼다. 하지만 코드리뷰를 받을 때 , get 을 쓰지 마라는 피드백을 받고 1차 당황을 하게 되었고,
값을 직접 꺼내지 말고 메시지를 보내라는 말에 2차 멘붕에 빠져버렸다. 메시지를 보내라는 것이 도데체 무슨말일까?
피부로 전혀 와닿지가 않았다.
추후에 프로그래밍이 커지면 해커가 set을 통해 얼마든지 값을 바꿔치기 할 수 있기 때문에 가능한 외부에서 값을 변경하지 못하도록 만드는 것이 좋은 습관이다.
get은 절차지향 방식이라서 객체지향 프로그래밍에 어긋난다.
따라서, 이게 반드시 필요한 방법인지 고민해보고 꼭 써야할 상황이 생기면 쓰자.
가능한 get으로 값을 꺼내오지 말고 메시지를 보내는 방식을 사용하라!
If (car.isMaxPos(maxPos)){
return this.pos = maxPos;
}
Car 야 ! 지금 맥스 포지션이 이건데 너 가지고 있어 ?
생성자
생성자를 만들면 파라미터를 전달해야지만 만들 수 있어서, 반드시 초기화 되어야 함을 강제시키는 효과가 있다. (물론 파라미터 없는 생성자도 만들 수 있지만, 반드시 존재 해야하는 값이 있다면 파라미터로 받아 생성자로 만드는 것이 좋은습관이다.)
프로그래밍을 시작할 때 가장 기본 단위는?
- 함수 (메소드)
- 클래스 (함수와 변수들의 묶음)
- 패키지 (클래스들의 묶음)
Import
- Import 를 사용하면 클래스의 패키지명을 생략할 수 있다.
Java.lang 패키지는 자주 쓰이는 것들이 모여있는 패키지로 굳이 import를 하지 않아도 쓸 수 있다.
import static : static 멤버를 호출할 때 클래스 이름을 생략할 수 있다.
(여기서 멤버란, 구성원이라는 뜻으로 클래스의 변수와 메소드를 합친 것으로 생각하면 됨)
import static 을 사용하지 않았을 때
System.out.print(Math.random());
import static 을 사용 했을 때
import static java.lang.Math.random; System.out.print(random());
이런식으로 간략화 할 수 있어 특정 클래스의 static 멤버를 자주 사용할 때 편리하고 코드도 간결해 진다.
라이브코딩
pobi 가 자동차 경주 게임
을 주제로 라이브 코딩을 진행 했는데, 알게된 내용은 다음과 같다.
변수명에 자료구조 / 자료형 을 쓰지 마라!
- carArr (x) , carList (x) -> cars (o)
인스턴스로 만들어져 있으면 테스트 과정이 어려워진다.
뭘 만들어야 할지 모르겠으면 일단 클래스 메소드로 만들어라
인스턴스 변수에 접근하지 않는 메소드는 모두 클래스 메소드로 만들어라
인스턴스 변수는 가능한 만들지 마라 (최대 2개)
- why ? ) 실수로 누군가가 새로운 변수를 추가하는 오류를 범할 수 있기 때문에
큰 덩어리를 분리하고 작은 단위로 하나씩 쪼개는 연습을 해라
라이브 코딩으로 알게 된 것은 Pobi 가 정말 대단한 프로그래머라는 것을 알게 된 좋은 수업이었다.
'코딩 교육 기관 > 코드스쿼드 백엔드 레벨2' 카테고리의 다른 글
2018.09.24 (월) (1) | 2018.10.22 |
---|---|
2018.09.20 (목) (0) | 2018.10.22 |
2018.09.13 (목) (3) | 2018.10.16 |
2018.09.11 (화) (0) | 2018.10.10 |
2018.09.10 (월) (2) | 2018.10.10 |
댓글