인프런 워밍업 스터디 클럽 2기 -백앤드 클린코드,테스트코드 2주차 발자국

https://www.inflearn.com/course/readable-code-%EC%9D%BD%EA%B8%B0%EC%A2%8B%EC%9D%80%EC%BD%94%EB%93%9C-%EC%9E%91%EC%84%B1%EC%82%AC%EA%B3%A0%EB%B2%95/dashboard

 

2주는 너무 정신없이 호다닥 가버렸다 내 1주차 발자국때 미리 열심히 하자는 나의 다짐은... 흙

그래도.. 또 나는 다음주는 열심히 하자는 꿈을 꾸지...

적용하기에는 아직 버거웠다.. 숙제로 cafe machine 리팩토링해야했는데.. 일급클래스 나도 적용하고 싶었는데 할줄몰라서 슬펐다.. 그래도 같이 온보딩 스터디하시는 분이 리펙토링 숙제 코드 리뷰해주시면서 알려주셔서 이해가 가서 감사했당..

강의는 허겁지겁 코드 따라쳐도 몬가 막상 내가 적용하기에는 너무 어렵더쿤...

 

 

 


4LS-회고법을 사용해보장!


  • Liked (좋았던 점)

     

강의하면서 배우고 배웠던 것들을 적용할수있도록 리팩토링 숙제를 주셔서 유익했다..

혼자서 해보는 실습 중요하지!

내가 잘 적용을 못했던것 뿐..


  • Lacked (아쉬웠던 점)

시간을 더 많이 투자해서 더 노력했어야하는데 아쉽다 ㅠ.ㅠ 다음주는 조금이라도 더 노력하는 내가 되었으면.. 햐

그리고 까먹으니 계속 메모하면서 강의 듣기 ㅠㅠㅠㅠㅠ


  • Learned (배운 점)

일급컬랙션 이름이 멋져보여서 다음에 내 프로젝트에 꼭 적용해보고 싶다

 

1- 상속과 조합

상속 보다는 조합을 사용하자. 상속은 틀을 만들어 버려서 부모를 수정하면 자식들도 다 영향을 받는다. 부모와 자식과의 결합도가 높다.

 

2- Value Object, Entity

value object 가 가져야하는 3가지- 불변성, 동등성,유효성 검증

entity는 식별자가 있고 valueObject는 식별자가 없지만 hashcode&equal을 사용해서 모든 필드들이 식별자 역할을 한다.

 

Entity

public class Member {
    private Long id;  // 고유 식별자
    private String name;
}

Value object

public class Address {
    private String city;
    private String street;
    private String zipcode;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Address address = (Address) o;
        return city.equals(address.city) &&
               street.equals(address.street) &&
               zipcode.equals(address.zipcode);
    }

    @Override
    public int hashCode() {
        return Objects.hash(city, street, zipcode);
    }
}

 

3- 일급 컬랙션

일급컬랙션은 list, set, map 이런 타입들의 추상화 도구로 사용한다 new로 2차 가공해서 해서 일급 컬랙션을 변경해도 이전의 컬래션에겐 영향이 없다.

이번 리팩토링에선 실패했지만 다음에 리팩토링할때 꼭 적용해봐야지...

Student 클래스

public class Student {
    private final String name;
    private final int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Student{name='" + name + "', age=" + age + "}";
    }
}

 

StudentGroup 일급컬랙션 클래스

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class StudentGroup {
    private final List<Student> students;

    public StudentGroup(List<Student> students) {
        this.students = new ArrayList<>(students); // 불변성 유지
    }

    public void addStudent(Student student) {
        this.students.add(student); // 학생 추가
    }

    public List<Student> getStudents() {
        return Collections.unmodifiableList(students); // 불변 리스트 반환
    }

    public double getAverageAge() {
        return students.stream()
                .mapToInt(Student::getAge)
                .average()
                .orElse(0.0); // 학생 나이의 평균 계산
    }

    @Override
    public String toString() {
        return "StudentGroup{students=" + students + "}";
    }
}

 

4- Enum

열거형 타입 상수의 직합- 상수에 대한 로직도 담을수있다. 여기에 설명도 넣을수 있다

public enum Month {
    JANUARY("1월", 1),
    FEBRUARY("2월", 2),
    MARCH("3월", 3),
    APRIL("4월", 4),
    MAY("5월", 5),
    JUNE("6월", 6),
    JULY("7월", 7),
    AUGUST("8월", 8),
    SEPTEMBER("9월", 9),
    OCTOBER("10월", 10),
    NOVEMBER("11월", 11),
    DECEMBER("12월", 12);

    private final String description; // 월에 대한 설명
    private final int order; // 월의 순서

    Month(String description, int order) {
        this.description = description;
        this.order = order;
    }

    public String getDescription() {
        return description;
    }

    public int getOrder() {
        return order; // 월의 순서 반환
    }

    // 주어진 숫자에 해당하는 월을 반환하는 메서드
    public static Month valueOf(int order) {
        for (Month month : Month.values()) {
            if (month.getOrder() == order) {
                return month;
            }
        }
        throw new IllegalArgumentException("유효하지 않은 월 순서: " + order);
    }
}

이렇게 사용할수있다.. 신기한 코딩의 세계... io에서 1이 들어오면 if (input==1)이면 January 리턴하는게 아니라 이런식으로 하는게 아니라 return Month.valueOf(input)하면 January를 리턴한다!

 

5- 세션 6

좋은 주석은 주석없이 설명이 가능한게 좋지만 어떤 이유로 방식을 결정하거나 그런 코드로는 알수없었던 필요한 디테일들은 주석으로 잘설명해두고 필요없는 주석은.. 지우기 (뜨끔)

메서드 순서 -상태변경, 판별, 조회 순으로 메서드를 배치하고 public 은 위에 private은 밑에 배치한다.


  • Longed for (앞으로 바라는 점)

다음주 테스트코드 스터디가 아주 기대됩니당!!


 

댓글을 작성해보세요.

채널톡 아이콘