Algorithm Study 70

아이템17. 변경 가능성을 최소화하라

아이템17. 변경 가능성을 최소화하라 불변 클래스란 그 인스턴스와 내부 값을 수정할 수 없는 클래스다. 불변 인스턴스에 간직된 정보는 고정되어 객체가 파괴되는 순간까지 절대 달라지지 않는다. 불변클래스를 만들기 위한 다섯가지 규칙 객체의 상태를 변경하는 메서드(변경자)를 제공하지 않는다. 클래스를 확장할 수 없도록 한다. 모든 필드를 final로 선언한다. 모든 필드를 private으로 선언한다. 자신 외에는 내부의 가변 컴포넌트에 접근할 수 없도록 한다. 함수형 프로그래밍 : 피연산자에 함수를 적용해 결과를 반환하지만, 피연산자 자체는 그대로인 프로그래밍 패턴 메서드 이름을 동사형(ex.add) 대신 전치사형(ex.plus)로 사용하여 강조한다. 함수형 프로그래밍을 사용하면 불변이 되는 영역의 비율을 ..

Algorithm Study 2022.06.24

아이템16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라

아이템16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 캡슐화의 이점을 사용하지 않는 퇴보한 클래스 Class Point{ public double x; public double y; } API를 수정하지 않고는 내부 표현을 바꿀 수 없고, 불변식을 보장할 수 없으며, 외부에서 필드에 접근할 때 부수작업을 수행할 수도 없다. 위 클래스를 객체 지향적으로 변경하기 위해 모든 필드를 private으로 바꾸고 public 접근자(getter)를 추가한다. Class Point{ private double x; private double y; public Point(double x, double y){ this.x= x; this.y= y; } publid double getX(..

Algorithm Study 2022.06.24

아이템15. 클래스와 멤버의 접근 권한을 최소화하라

아이템15. 클래스와 멤버의 접근 권한을 최소화하라 잘 설계된 컴포넌트의 가장 큰 핵심은 클래스 내부 데이터와 내부 구현정보를 외부 컴포넌트로부처 얼마나 잘 숨겼느냐 다. 모든 내부 구현을 완벽히 숨겨, 구현과 API를 분리하고 오직 API를 통해서만 다른 컴포넌트와 소통하며 서로의 내부 동작에는 전혀 개의치 않는다. 정보은닉, 혹은 캡슐화라고 한다. 정보은닉 (= 캡슐화) 의 장점 시스템 개발 속도를 높인다. 시스템 관리 비용을 낮춘다. 정보 은닉 자체가 성능을 높여주진 않지만, 성능 최적화에 도움을 준다. 완성된 시스템을 프로파일링해 최적화할 컴포넌트를 정한 다음, 다른 컴포넌트에 영향을 주지 않고 해당 컴포넌트만 최저화할 수 있기 때문이다. 소프트웨어 재사용성을 높인다. 낯선환경에서도 유용하게 쓰일..

Algorithm Study 2022.06.24

[프로그래머스] 위장 (level.2) / 해시/ JAVA

https://programmers.co.kr/learn/courses/30/lessons/42578 코딩테스트 연습 - 위장 programmers.co.kr 확실히 프로그래머스는 백준이랑 문제 유형이 다른것같다 ! 해시 왜 계속하는데도 감이 안잡히지 .!!!!! 다른 해시 문제들도 더 풀어봐야겠다. 단순하게 경우의 수를 구하는 문제라 생각하지 못하고, dfs로풀어야되나 dp로 풀리나 생각하고 있었다. 결국 다른사람 풀이를 보고나니 너무 허무했다 ㅎㅎㅎㅎㅎㅎㅎㅎ 난 언제쯤 문제를 보자마자 술술 풀리는 고수가 될까!!!?!??!!?! 아래는 제출 코드 map 의 value값에는 key의 갯수를 담았다. 그리고 key의 (value+1) 을 계속 곱하면 된다. key에 매핑되는 value값을 구하기 위해서 ..

Algorithm Study 2022.06.16

[프로그래머스] 전화번호목록(level.2) / 해시 / JAVA

https://programmers.co.kr/learn/courses/30/lessons/42577 코딩테스트 연습 - 전화번호 목록 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조 programmers.co.kr 슬퍼. 다시 복습해봐야지 1. HashMap 사용하는 방법 - containsValue보다 containsKey 가 더 빠르고 - HashMap이 HashSet 보다 빠르다. 2. Array 정렬하는법

Algorithm Study 2022.06.15

주문 기능 테스트 (OrderServiceTest)

테스트 코드 작성할때는 3개 에노테이션을 작성해준다. 스프링 부트 환경에서 실행한다는 의미이며, transactional은 데이터 저장후 롤백한다는 의미이다. 1. 상품 주문 테스트 - 상품을 주문하면 상품상태가 ORDER이 되는지 확인 - 주문한 상품의 수가 1개가 맞는지 확인 - 주문 가격 로직이 맞는지 확인 - 주문 수량만큼 재고가 줄어드는지 확인. 2. 상품주문 재고수량 초과 테스트 - 현 재고가 10개이지만, 주문을 20개 했을때, NotEnoughStockException 예외가 발생할것을 예상한다. @Test (expected = NotEnoughStockException.class) - Member 객체와 Item 객체 생성하는 것을 반복하는 작업이 있어, 해당 객체들을 생성하는 코드를 따..

Algorithm Study 2022.06.15

주문 서비스 개발 (OrderService)

주문 서비스 : OrderService 1. 주문 메서드 : order public Long order(Long memberId, Long itemId, int count){ ... } 주문 시 멤버id, 아이템id, 주문수량을 받아 저장한다. memberId를 통해 MemberRepository.findOne으로 member 객체 반환 itemId를 통해 ItemRepository.findOne으로 item 객체 반환 저장할때는 Order과 OrderItem 엔티티에 만들어두었던 createOrder / createOrderItem 메서드를 사용한다. orderItem을 먼저 만든 후, order을 만들어야한다. order 메서드 구현. 1. 엔티티 조회 2. 배송정보 생성 3. 주문 상품 생성 4. ..

Algorithm Study 2022.06.15

1. 인터넷 네트워크 ( IP/ TCP, UDP/ PORT / DNS)

1. IP 인터넷에서 컴퓨터 둘은 어떻게 통신할까? -클라이언트에서 인터넷을 통해 서버로 통신하려 할때, IP주소를 부여하여 통신한다. IP ( Internet Protocol : 인터넷 프로토콜 ) IP의 역할 지정한 IP주소에 데이터 전달 패킷(Packet)이라는 통신 단위로 데이터를 전달 IP 패킷 정보는 : 출발지 IP, 목적지 IP, 기타.. 로 구성되어 있다. 클라이언트 패킷 전달 : 출발 100.100.100.1 / 목적 200.200.200.2/ .. 서버 패킷 전달 : 출발 200.200.200.2 / 목적 100.100.100.1 / .. IP 프로토콜의 한계 비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송 상대방 컴퓨터가 꺼져있어도. 컴퓨터가 없어도 데이터를 전..

Algorithm Study 2022.06.14

[프로그래머스] 완주하지못한 선수(level.1) / 해시 / JAVA

https://programmers.co.kr/learn/courses/30/lessons/42576 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수 programmers.co.kr 해싱 분류였음을 알았지만 이렇게 풀어보고 싶었다 ㅎ 정확성 단계에서는 성공했는ㄷㅔ . . .. 효율성 단계에서 실패했다. HashMap 을 사용한 풀이 1. participant 를 Map에 key: 이름과 value: 기존있는 값에 + 1 을 넣어준다. - map.getOrDefault(str,0) + 1 사용 2. completion 에 ..

Algorithm Study 2022.06.13