엘라의 개발 스케치 Note
[TIL] 내일배움캠프 16일차(23.05.30.) - 코드 중복 줄이기 본문
To-do
- 개인과제 작성
- (튜터님) Java 문법 종합반 3주차 보충 및 숙제 복습
- 알고리즘 문제 풀이
TIL
- 코드 작성 시 오타 주의!
* 'Menu(javax.swing.Spring) in Menu cannot be applied to (java.lang.String) ~' 오류 발생
=> String (문자열)을 Spring(문자열)로 오타를 내서 생긴 문제였음!
- 클래스에서 다른 클래스의 메소드를 실행하는 방법
* 객체화를 시키는 과정에서 다른 클래스의 메소드를 실행하는 방법을 찾지 못해 한참 헤맴
* 복습 끝에 아래 코드 내용을 찾음
* 코드 리뷰를 하면서 'Class.method();'만으로도 사용 가능하다는 것을 알게 됨
-> 튜터님께서 인스턴스화 하는게 좋다고 리뷰해주심 -> 아래 코드 권장
Print print = new Print (); // Class object = new Constructor(); ->인스턴스화. 클래스명 = 생성자명
print.end(); // object.method();
- 출력 화면 정렬
* 출력 중 메뉴의 정렬 위치가 맞지 않아 한참 헤맴
* 질문방에 해당 문제에 대한 내용이 있어 공부하게 됨
* 질문방 답변에 스페이스바를 2개 기준으로 작성해주셨는데 글자가 길어지니 정렬이 조금 이상해짐
-> 형을 int형에서 double형으로 바꾸고 1.6개 기준으로 수정하니 이전보다 맞춰짐
ⓐ 기존 스페이스바 2개 기준
int maxLength = 0;
for (ProductMenu productMenu : productMenuList) {
String menuName = productMenu.getName();
int length = menuName.length() * 2; // 한글을 스페이스바 2개로 계산한 값
if (length > maxLength) {
maxLength = length;
}
}
for (ProductMenu productMenu : productMenuList) {
// 줄 정렬 관련 코드
int tempLen = maxLength - (menuName.length() * 2);
// 최대 길이 - (한글을 스페이스바 2개로 계산한 값)
// tempLen = 문자열을 정렬을 위해 찍어야하는 스페이스바 갯수
System.out.print(menuNum + ". " + menuName); // 1. 이름 찍기
for (int i = 0; i < tempLen; i++) {
System.out.print(" "); // 2. 정렬을 위해 계산한 tempLen 만큼 스페이스바 찍기
}
System.out.print(" | W " + menuPrice); // 이후 | 가격 찍기
System.out.println(" | " + menuEx); // 이후 | 설명 찍기
ⓑ 수정 스페이스바 1.6개 기준
double maxLength = 0;
for (ProductMenu productMenu : productMenuList) {
String menuName = productMenu.getName();
double length = menuName.length() * 1.6; // 한글을 스페이스바 1.6개로 계산한 값
if (length > maxLength) {
maxLength = length;
}
}
for (ProductMenu productMenu : productMenuList) {
// 줄 정렬 관련 코드
double tempLen = maxLength - (menuName.length() * 1.6);
// 최대 길이 - (한글을 스페이스바 1.6개로 계산한 값)
// tempLen = 문자열을 정렬을 위해 찍어야하는 스페이스바 갯수
System.out.print(menuNum + ". " + menuName); // 1. 이름 찍기
for (int i = 0; i < tempLen; i++) {
System.out.print(" "); // 2. 정렬을 위해 계산한 tempLen 만큼 스페이스바 찍기
}
System.out.print(" | W " + menuPrice); // 이후 | 가격 찍기
System.out.println(" | " + menuEx); // 이후 | 설명 찍기
- 코드 중복이 많은 경우
* 코드가 너무 길고 지저분, 중복이 많아 줄이는 방법을 고민함
* 중복되는 코드를 조금씩 다른 클래스나 메소드에 뺌
-> 중복되는 코드나 출력을 한꺼번에 똑같이 수정 가능해서 매우매우 유용하다는 것을 다시 한번 깨달음
* 반복문을 적극 활용할 수 있는 방법을 조금 더 고민하여 반복문을 사용해 한번 더 코드를 줄임
* 상속도 코드 중복을 많이 줄일 수 있을 것 같은데 아직 제대로 활용하지 못하는 것 같아 아쉬움이 남음
- while 반복문에서의 break;
* 이전 화면으로 돌아가고 싶은 경우와 그 전의 첫화면으로 돌아가고 싶은 경우가 나뉘었는데 break를 제대로 활용하지 못해 구현하지 못하고 있었음
* 여기저기 넣어보다가 "break를 걸면 '바로 직전'의 반복문이 멈추게 됨!"을 다시 한번 깨닫고 안의 반복문에 break를 걸면 바깥 메소드로 빠져나간다는 것을 공부함
while (true) {
"Menu" 메소드
while (true) {
"Product" 메소드
if (true) {} //->Product메소드를 돔
else {break} //->Product메소드가 멈춰 Menu 메소드로 돌아감
}
}
- 한 프로젝트에서 'public static main' 메소드는 하나만 있어야 함!
Feeling & Next...
- 개인과제 작성이 찾으면서 하다보니 많이 더디기도 하고, 찾은 내용을 구현해도 생각한 대로 작성되지 않아 답답하기도 하지만, 조금조금씩 작성하다보니 무언가 만들어 지는 게 신기하기도 하고, 뿌듯함이 느껴진다.
- 개인과제 깃허브 올려두기
- 개인과제 선택요구사항까지 작성해보기
'내일배움캠프 > TIL' 카테고리의 다른 글
[TIL] 내일배움캠프 18일차(23.06.01.) - Arrays.sort(arr) (0) | 2023.06.01 |
---|---|
[TIL] 내일배움캠프 17일차(23.05.31.) (0) | 2023.05.31 |
[TIL] 내일배움캠프 15일차(23.05.29.) - Iterator, parsing (1) | 2023.05.30 |
[TIL] 내일배움캠프 12일차(23.05.26.) (0) | 2023.05.26 |
[TIL] 내일배움캠프 11일차(23.05.25.) (0) | 2023.05.25 |
Comments