Written by coh at home

[코딩노하우 뽐내기] 본문

Etc/Et cetera

[코딩노하우 뽐내기]

och 2024. 5. 27. 13:00

https://www.hanbit.co.kr/event/current/current_event_view.html?hbe_idx=196&page=0

["나만 알고 있는 코딩 노하우 뽐내기"- 개발 코딩 꿀Tip 특공대 모여라!

한빛출판네트워크에서 이번에 코딩 노하우를 공유해보자는 이벤트를 열었습니다.

문제를 풀어보고 코딩할 때의 팁을 공유하는 공간으로 다양한 사람의 팁과 문제풀이를 볼 수 있어요.

앗, 근데 문제는 진짜 간단한 리팩터링 3가지 문제를 확인할 수 있습니다.

아래는 제가 작성한 답변을 공유합니다.

 

 

1번. 보호구문 남용하지 않도록 아래 코드를 수정해주세요.

1번 같은 경우는 A, B 둘 다 true일 때만 true를 return하는 And Operation인 것을 알 수 있습니다.

return A && B;

 2번. 반환문을 간결하게 처리하여 수정해주세요.

argument인 foo값이 null이 아닐 때 true를 반환하는 것을 알 수 있습니다.

is_foo (foo){
	return !(foo);
}

3번. 표현식의 의도가 드러나도록 설명하는 변수를 사용해 수정해주세요.

변수의 이름은 길더라도 그 의미가 드러나도록 작성하는 것이 좋습니다. 

name = "Mary"
date = "2024-03-01"
point = 5000
return new Point(name, date, point);

 

2. 나만의 코딩 팁..

음.. 제가 평소에 지키는 코딩 습관을 설명드리겠습니다.

1. 우선 하나의 메서드에는 하나의 depth를 사용하는 것이 가독성 측면에 좋습니다. 

  1. 1번 문제처럼 depth를 두 번 들어가는 순간부터 조건이 복잡해지기 때문에 코드의 유지보수와 가독성이 떨어지게 됩니다. 이를 해결하기 위해선 메서드를 분리하거나 코드를 리팩터링 하는 것이 좋습니다.

2. 원시값과 문자열을 포장하자

3번 문제처럼 객체를 반들어서 반환하는 경우, 객체 내에 타입이 미스매칭 되어도 컴파일 에러가 나지 않게됩니다.

예를 들어 이런 경우죠

public class Point {
	private String name;
	private String date;
	private int point;
	
	public Point(String date, String name, int point){
		this.date = date;
		this.name = name;
		this.point = point;
	}
	...
}

이와 같은 경우 우리가 짠 3번 코드 같은 경우 date와 name의 값이 반대로 들어가서 객체를 만들게 됩니다.

그래도 컴파일 에러가 발생하지 않게 되죠 따라서 이와 같은 경우를 방지하기 위해선 원시타입을 한번 더 포장하는 것입니다. 

public class Point{
	Name name;
	Today today;
	Score score;
	//생성자 생략
}
public class Name{
	String name;
	// 생성자코드 
}

이제 우리는 타입의 에러 없이 다음과 같이 인자를 넣을 수 있게 됩니다.

Name name = new Name("Mary");
Today today = new Today("2024-03-15");
Score score = new Score(5000);

return Point(name, today, score);

이렇게 코드를 작성하게 된다면 컴파일 단계에서 에러를 잡아주게 되어 런타임 에러를 방지할 수 있습니다.

'Etc > Et cetera' 카테고리의 다른 글

[프리코스 2주차]  (1) 2024.10.28
[프리코스 1주차 회고]  (2) 2024.10.21
[특급전사] 수여뱃지  (0) 2024.10.02
java jdk downgrade(17 -> 11)  (0) 2023.10.03
[개강다짐]  (0) 2023.09.07