Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
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
more
Archives
Today
Total
관리 메뉴

엘라의 개발 스케치 Note

[TIL] 내일배움캠프 16일차(23.05.30.) - 코드 중복 줄이기 본문

내일배움캠프/TIL

[TIL] 내일배움캠프 16일차(23.05.30.) - 코드 중복 줄이기

엘라랑이 2023. 5. 31. 00:49

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...

  • 개인과제 작성이 찾으면서 하다보니 많이 더디기도 하고, 찾은 내용을 구현해도 생각한 대로 작성되지 않아 답답하기도 하지만, 조금조금씩 작성하다보니 무언가 만들어 지는 게 신기하기도 하고, 뿌듯함이 느껴진다.
  • 개인과제 깃허브 올려두기
  • 개인과제 선택요구사항까지 작성해보기
Comments