Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 리펙토링
- 명령어
- refactoring
- 클린 코드
- 사설 IP
- 가독성
- register
- addressing mode
- TCP
- page
- L2 switch
- CPU
- private ip
- Code complete
- ack
- L3 Router
- Public IP
- network
- ALU
- cache
- 코드 컴플릿
- Clean code
- osi 7
- floating point
- 공인 IP
- MMU
- float
- Sector
- interrupt
- physical address
Archives
- Today
- Total
Software Lab
필수 변수는 생성자 함수를 통하여 본문
class Line{
Point start;
Point end;
public void setStart(Point point){
this.start = start;
}
public void setEnd(Point point){
this.end = end;
}
public void draw(){
if(self.start == null)
return;
if(self.end == null)
return;
....
....
}
}
void main(){
Line line = new Line();
line.setStart(new Point(10, 10));
line.setEnd(new Point(20, 30));
line.draw();
}
<개선 전>
class Line{
Point start;
Point end;
private Line(){}
public Line(Point start, Point end){
self.start = start;
self.end = end;
}
public void draw(){
....
....
}
}
void main(){
Line line = new Line(new Point(10, 10), new Point(20, 30));
line.draw();
}
<개선 후>
객체가 생성될 때, 필수 변수는 생성자 함수를 통해서 설정한다.
<개선 전> 코드에서 멤버 변수인 start, end는 Line 객체가 정상 동작 하기 위한 필수 변수이다. 이러한 필수 변수를 일반 멤버 함수(setStart, setEnd와 같이..)로 설정하게 되어있다. 이렇게 되면 객체가 비정상 동작하는, 즉 불안정한 상태의 객체도 만들 수 있게 허용하게 되는 것이다.
<개선 전> 코드에서 35, 36번 줄 없이, Line 객체 생성(34번 줄) 후 바로 draw 함수(37번 줄)의 호출이 가능하다. draw 함수 내부 적으로 null 처리한다면 죽지는 않을 것이다. 그렇지만 draw 함수가 호출은 되었는데, Line은 그려지지 않을 것이므로 비정상 동작하게 되는 것이다.
반면 <개선 후> 코드와 같이 그 객체가 정상 동작하기 위한 필수 변수는 생성자 함수를 통하여 설정하도록 한다. 그러면 객체가 생성된 후 즉시 정상 동작이 가능한 상태가 된다. 불 안정한 상태의 객체를 만들 수 있는 여지가 없다. 또한 draw 함수 내부에서 null 처리 코드가 필요 없다.
'코드 리펙토링' 카테고리의 다른 글
삼항 연산자 (0) | 2022.06.29 |
---|---|
어떤 이터레이터를 사용해야 하나? (0) | 2022.06.28 |
try 블록 범위 (0) | 2022.06.28 |
null 인자는 함수 외부에서 처리 (0) | 2022.06.24 |
Collection을 활용한 코드 개선 #3 - 게시글 (0) | 2022.06.24 |
Comments