청소 플랫폼 만들기 (12)

김민준·2023년 8월 28일
0

청소 플랫폼 만들기 (12)
피드백 받은 것들
객체 지향 프로그래밍이란?
프로그래머스

공부하며 느낀 점

청소 플랫폼 만들기 (12)

로그아웃 구현

 //  로그아웃 메서드
  logoutController = async (req, res) => {
    console.log('로그아웃 메서드 컨트롤러 진입');

    try {
      const { sureLogout } = req.body;

      if (sureLogout === 'yes') {
        // 로그아웃시 헤더에 토큰을 제거
        // 썬더 클라이언트에서는 헤더에 값이 할당되지 않아서 수동으로해야함
        // 프론트를 만든 다음에 확인야 할 필요가 있음
        res.removeHeader('Authorization');
        return res.status(200).json({ message: '로그아웃에 성공하였습니다.' });
      } else {
        return res.status(400).json({ message: '잘못된 요청입니다.' });
      }
    } catch (err) {
      console.log('로그아웃 컨트롤러 캐치 진입');

      if (err instanceof ApiError) {
        console.error(err.message);
        return res.status(err.status).json({ message: err.message });
      } else {
        console.error(err);
        return res.status(500).json({ message: 'Internal Server Error' });
      }
    }
  };

위와같이 헤더값을 지우는 것으로 로그아웃을 구현하였다.
그런데 만들고보니 기능 자체보다 오류 반환하는 게 더 길다.

우선 썬더 클라이언트에서 헤더값을 수동으로 바꿔야하기 때문에 실제로 작동하는지는 프론트를 만들고 봐야겠다.

코드 컨벤션 : 오류 반환
서비스단에서는 throw new ApiError(409, errorMessage); 와 같이 반환하고 컨트롤러단에서 아래와 같이 받도록 만들었다.

catch (err) {
      console.log(err);
      return res.status(err.status || 500).json({ message: err.message });
    }

레포지토리 헷갈림
팀원중 한명이 푸시 자체는 새로운 협업용 레포에 올리고, 브라우저에서는 옛날에 내 개인 레포에 접속해서 푸시가 안된다고 오해한 일이 있었다.

혹시라도 레포가 바뀌게 된다면, 이전것말고 새로운 것의 링크를 주면서 즐겨찾기도 고치라고 말해야겠다.

피드백 받은 것들

코드리뷰
현재 PR을 넣은 뒤, 코드리뷰를 화면공유를 통해서 하고 있는데 이것을 PR의 코멘트란에도 남기라는 피드백을 받았다.
이것이 나중에도 우리가 만든것을 알기 쉽기 때문이다.

PR의 크기
마찬가지로 PR을 기능별로 나눠서 넣고, 200줄이 넘는다면 기능별로 분리를 잘 못한것이기 때문에 다시 한번 확인해 보라는 피드백을 받았다.

READ ME 작성
리드 미 작성해서 프로젝트에 대해 상세히 알릴 것

그외
이하의 것들을 시도해보기
시퀀스 다이어그램
플로우 다이어그램
jest express test code
원티드

객체지향 프로그래밍이란?

내가 알고 있는 것

객체 지향 프로그래밍이란 프로그램을 코드의 집합이 아닌 기능의 집합으로 보는 패러다임이다.
이것을 통해서 코드의 가독성과 재활용성을 높일 수 있다는 장점이 있다.

팀원들과 종합한 것

객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그래밍에서 필요한 데이터를 추상화시켜 상태(특성)와 행위(기능)를 가진 '객체'로 만들고, 객체들 간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.
(예를 들어, 자동차는 객체이고 출발, 정지, 운행 및 제동과 같은 기능을 수행한다고 할 수 있다.)
이를 통해 현실 세계의 개념과 구조를 프로그램에 반영하며, 코드의 가독성과 유지보수성을 높이는 목적을 가진다.

객체 지향 프로그래밍은 추상화, 캡슐화, 상속, 다형성의 특징을 가지고 있다.
추상화 - 객체에서 공통된 속성과 행위를 찾아 타입을 정의한다.
불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 만들 수 있다.
캡슐화 - 객체의 내부 상태와 구현 세부 사항을 외부로부터 감춘다.
데이터 구조와 데이터를 다루는 변수와 함수, 메소드를 클래스라는 하나의 캡슐로 묶어
재활용을 원활하게 하고, 낮은 결합도를 유지할 수 있도록 설계한다.
상속 - 클래스의 속성과 행위를 하위 클래스에 물려주고, 하위 클래스가 상위 클래스의 속성과 행위를 물려받는 것을 말한다.
새로운 클래스가 기존 클래스의 데이터와 연산을 이용할 수 있어 코드의 재사용성을 높인다.
재사용으로 인해 작성해야할 코드가 줄어들 수 있으나 상위 클래스의 변경이 함부로 적용되기 어려워진다는 단점이 있다.
다형성 - 하나의 변수, 함수가 다양한 객체에서 다르게 동작할 수 있다.(하나의 클래스 내부에 같은 이름의 행위를 여러개 정의하거나 상위 클래스의 행위를 하위 클래스에서 재정의하여 사용할 수 있다.)
이를 통해 코드의 유연성과 확장성을 높일 수 있다.
위와같이 클래스 단위로 모듈화시켜 개발할 수 있다는 특징을 가지고 있어 업무 분담이 편리하고 대규모 소프트웨어 개발에 적합하다는 장점이 있다.

프로그래머스

정수 제곱근 판별

2 이상의 정수의 제곱과 비교해서 크면 다음단계, 같으면 참, 작으면 거짓이라고 판별하면 되겠다.

생각한거랑 다르다.

잘 돌아간다.

나의 풀이

function solution(n) {
    var answer = 0;

    let i = 1;
    let j = i+1

    while ((i+1)**2 <= n){
        i++
    }

    j = i+1

    if (i**2 === n){
        answer = j**2
    } else if (j**2 > n){
        answer = -1
    }

    return answer;
}

다른 사람의 풀이 1

function nextSqaure(n){
 var result = 0; 
  var x = 0; 
  while ( x*x < n)
  { 
    x++; 
  }
  if (x*x == n)
  { 
    x++; 
    result = x*x; 
  }else{ 
    result = 'no'; 
  } 
  return result;

}

내가 푼것과 거의 동일하다.
0이 아니라 1부터 시작하는건 내가 나은것같지만, 생각해보니 else if할 필요 없이 else로 하는게 맞는것같다.
왜냐하면 작은 경우는 while에서 이미 걸러졌기 때문이다.

다른 사람의 풀이 2

function nextSqaure(n){
  //함수를 완성하세요
  switch(n % Math.sqrt(n)){
    case 0:
      return Math.pow(Math.sqrt(n) + 1, 2);
    default:
      return "no"
  }
}

제곱근을 구한다음에 원래 숫자를 제곱근으로 나눈 나머지를 구한다.
즉, 나머지가 0이면 정수의 제곱근이라는 의미이므로 +1한뒤에 제곱한 값을 리턴
그렇지 않다면 기본값으로 no를 리턴(문제 조건이 바뀌어서 현재는 -1리턴)

function nextSqaure(n){
    var result = 0;
    var n = Math.sqrt(n);
    result = Number.isInteger(n) ? Math.pow(n+1, 2) : 'no';
    return result;
}

같은 방법이다. 좀더 압축 되었을 뿐

공부하며 느낀 점

  1. 뭔가 논의를 하든 만들든 간에 문서로 남겨야지 나중에, 내가 또는 남이 참조할 때 편하다
  2. 알고리즘을 구현할 때 내가 생각한것과 실제로 구현한것은 항상 조금씩 다르니 그 차이가 왜 발생했는지 알아봐야겠다.
profile
node 개발자

0개의 댓글

관련 채용 정보