본문 바로가기
TIL

[231018] JAVA 개인 과제, 웹 기초 특강

by 진진리 2023. 10. 18.
728x90
  • 알고리즘 문제 풀기

처음으로 정규표현식을 혼자서 사용해 문제를 풀었다.

https://jinjinjincode.tistory.com/137

 

[프로그래머스] 옹알이(2)

import java.util.regex.Pattern; class Solution { public int solution(String[] babbling) { int answer = 0; String[] words = {"aya", "ye", "woo", "ma"}; String reg = "[\\-]+"; for(int i=0;i

jinjinjincode.tistory.com


  • 자바 문법 5주차 강의

함수형 인터페이스: 추상 메소드 1개만 선언 가능

궁금했던 점: 

// . . .

parkingLot.addAll(parkCars(carsWantToPark, Car::hasTicket));

// . . .

public static List<Car> parkCars(List<Car> carsWantToPark, Predicate<Car> function) {
    List<Car> cars = new ArrayList<>();

    for (Car car : carsWantToPark) {
        if (function.test(car)) {
            cars.add(car);
        }
    }

    return cars;
}

// . . .

interface Predicate<T> {
    boolean test(T t);
}

- 함수형 인터페이스를 사용할 때 인터페이스 내부의 메서드를 재정의하지 않아도 알아서 대입된 함수가 실행되는 건가?

- 함수형 인터페이스를 통해 함수를 인자로 사용할 때 반드시 인터페이스의 메서드를 거쳐가야 하나?

 

=> 자바에 내장된 함수형 인터페이스이기 때문이었다.

Predicate를 보면

test(T t): Evaluates this predicate on the given argument.

true if the input argument matches the predicate, otherwise false

와 같이 문서에 적혀있다.

 

자바에 내장된 함수형 인터페이스 참고

https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html

 

java.util.function (Java Platform SE 8 )

Interface Summary  Interface Description BiConsumer Represents an operation that accepts two input arguments and returns no result. BiFunction Represents a function that accepts two arguments and produces a result. BinaryOperator Represents an operation u

docs.oracle.com

+ 5주차 숙제를 하면서 알게된 점:

스트림에서 return을 생략하는 경우는 반환값이 있는 메서드를 사용할 때 !

return을 하지 않아서 오류가 발생 -> 스트림 내 함수가 return을 하지 않음


JAVA 개인 과제

  • 주제: 좋아하는 가게의 키오스크를 만들어 보자!
  • 계획 세우기
    • 스타벅스의 메뉴판으로 키오스크 만들기
    • 메인 화면: 음료 | 푸드 | 상품 + 주문 | 주문 취소
    • 상세 화면: 선택한 종류의 메뉴 약 5개씩 제공
    • 상품 선택 시 장바구니 추가할 지 선택 : 확인 | 취소
    • 메인 화면으로 돌아감
    • '음료 | 푸드 | 상품 '선택 시 다시 반복
    • 주문 화면: '주문' 선택 시 장바구니의 메뉴들과 총 가격을 보여줌 + 주문 | 메인 메뉴
    • 주문 완료 화면: 대기 번호를 알려준 뒤 3초 후 메인 화면으로 돌아감
    • 주문 취소 화면: '주문 취소' 선택 시 취소 여부를 물어봄 + 확인 | 취소
    • '확인' 선택 시 장바구니를 초기화, 안내 문구 후 메인 화면으로 돌아감
  • 선택 요구 사항 내용
    • 주문 화면: 장바구니에 상품 개수도 출력
    • 상품 옵션 기능: 상품 선택 시 상품의 옵션 선택
    • 구매 완료 시마다 총 판매 금액을 누적하여 0번으로 조회 가능
    • 총 판매 상품 목록 조회 0번으로 가능

<오늘 알게된 것>

추상 클래스의 생성자도 생성 가능

접근제어자: protected와 private 중 어떤 것을 사용하면 좋은지?

-> 개발자의 의도를 협업하는 사람들이 인식하고 준수하기에는 private를 사용하는 것이 더 좋음 !


웹 기초 특강

  • 웹 개발: 웹 서비스를 만드는 것
  • 웹 개발자: 웹 이라는 공간에서 제공되는 서비스를 설계 / 제작 / 관리하는 사람
  • 클라이언트: 웹에서 서비스를 요청하는 사람
  • 웹 서버: 해당 요청을 받는 서버 - 인터넷으로 연결되어 있음
  • 웹서비스를 원활하게 하기 위한 도구: AWS, Vercel, Netlify, S3

 

클라이언트 <-> 서버 상호작용

클라이언트: 브라우저를 통해 웹서버에 요청

서버: 요청에 대한 처리를 한 후 응답을 줌

서버 = 해당 프로그램의 내부에 설계된 요청을 캐치하는 부분 -> 각 요청에 따른 서비스를 실시 및 응답을 제공하는 부분

 

요청: 메소드(HTTP - GET/POST/DELETE/PUT) + URL 

응답: JSON

 

웹 서버의 주요 기능: 정적페이지 제공, API 제공

1. 정적페이지 제공

2. API 제공

여러 소프트웨어 간에 정보나 기능을 공유하게 해주는 중간 매개체

API는 클라이언트의 요청에 따라 동적으로 데이터나 정보를 제공

주로 JSON이나 XML형식으로 응답을 반환

RESTful API, GraphQL API 등

 

 

웹 서버를 구성하는 방법

1. 프론트엔드와 백엔드를 동시에 구성하는 방법

   프로젝트 디렉토리 안에 리엑트와 스프링(또는 node) 폴더가 각각 존재하여 한번 배포

   주요 기능: 페이지 전달 - 리엑트, API 제공 - 스프링(또는 node)

   장점: 배포 및 관리가 간단, 네트워크 통신 오버헤드가 없거나 적음

   단점: 동일한 리소스를 공유하기 때문에 성능이슈가 발생할 수 있음, 스케일 아웃이 어려울 수 있음

2. 프론트엔드와 백엔드를 각각 구성하여 각각 배포하는 방법

   주요 기능: 페이지 전달 - 리엑트, API 제공 - 스프링(또는 node)

   장점: 각각 독립적으로 스케일 아웃할 수 있음. 한쪽에 문제가 발생해도 다른 쪽에 영향을 주지 않음

   단점: 배포 및 관리가 복잡, 프로트엔드와 백엔드 간의 통신 오버헤드가 발생할 수 있음

3. 백엔드만 구성하여 배포하는 방법

   주요 기능 : 둘다 스프링(또는 node)

   장점: 프론트엔드 별도 배포가 필요 없음, 설정 및 관리가 상대적으로 간단

   단점: 모던 프론트엔드의 이점을 제대로 활용하기 어려울 수 있음. 백엔드 리소스가 정적 페이지 제공에도 사용되므로 퍼포먼스 이슈가 발생할 수 있음

4. 프론트엔드만 구성하여 배포하는 방법

   주요 기능: 페이지 전달 - 리엑트, API 제공 - 없거나 next 사용

   장점: 순수한 클라이언트 사이드 렌더링을 활용. 프론트엔드 리소스만 관리하면 됨

   단점: 데이터를 처리하거나 복잡한 기능을 구현하기 위해서는 별도의 백엔드 서비스가 필요