최종프로젝트가 끝나고 그냥 매우 뻗었었다. 하라는대로 이력서도 쓰고, 기술 면접도 준비하긴 했지만 살짝 좀 퍼져있었달까나,,,,,⭐🌟⭐🌟
암튼 오늘부터 다시 열심히 달려보려고 한다. 알고리즘도 풀고, 리뷰하고, 기술면접 대비 문제도 열심히 정리해보고,,! 할수이따 아좍!
기술면접 스터디
객체지향 프로그래밍(OOP)에 대해 설명해주세요. 알고있는 원칙이나 키워드를 언급해주세요.
객체 지향 프로그래밍(Object Oriented Programming)이란?
말 그대로 객체의 관점에서 프로그래밍 하는 것을 의미한다.
객체란 프로그램 동작의 주체가 되는 요소를 말한다. 이 객체는 유/무형을 가리지 않으며, 상태와 동작을 가진다.
TV로 예를 들면 TV의 디자인, 가격, 크기 등은 상태이고, 채널 이동, 다시보기 기능 등 여러 부가 서비스들은 TV의 동작(기능)이라고 할 수 있다.
그리고 내가 쓰는 JAVA는 이러한 개념을 아래처럼 접근한다.
객체지향 | JAVA |
객체 | 클래스 |
상태 | 멤버 변수 |
동작 | 메소드(함수) |
흔히들 객체는 붕어빵, 클래스는 붕어빵 기계이라고 하는데, 처음엔 이해가 안 갔지만 실제로 코드들을 짜다보면 클래스라는 붕어빵 틀에 각기 다른 객체들(붕어빵)이 튀어나온다.
🐈⬛ OOP의 특징(키워드)
1) 추상화 : 목적과 관련이 없는 부분을 제거하여 필요한 부분만을 표현
클래스는 객체들의 주요한 특징들이 있게끔 해주는 추상화된 개념이고 여기에서 객체들이 찍혀 나오게 되는 것이다.
즉, 추상화는 객체들의 공통된 특징을 파악해 정의해 놓은 설계 기법이라고 할 수 있다.
2) 캡슐화 : 접근 제어자 중 private으로 정의된 클래스들
많은 접근 제어자들 중에서 private으로 정의된 속성은 외부에 알려줄 필요가 없고, 정의 된 클래스에서만 사용할 것이라고 판단 되어 정보 은닉의 효과를 주고자 할 때 이용한다. 이렇게 외부에서 보이지 않게끔 하는 것을 캡슐화라고 한다.
3) 상속 : 코드의 중복을 없애기 위함
포유류라는 클래스를 상속받는 강아지 클래스, 고양이 클래스 들을 생각해보면 쉽다. 고양이와 강아지의 공통점은 포유류, 4족 보행 등이 있고 차이점은 고양이는 발톱을 숨길 수 있고, 유연함 / 강아지는 산책을 해야만 하는 특징 등등이 있다. 그런데 상속을 받지 않고 따로따로 만들게 된다면 공통점의 코드들이 중복되어 유지보수 단계에서 많은 비용이 들게 된다.(코드의 이원화)
4) 다형성 : 형태는 같으나 다른 기능
고양잇과로 예를 들면 고양이는 야옹하고 울고 호랑이는 어흥 하고 우는 것처럼 울음이란 것은 동일하나, 소리가 다른것 같은 것들을 다형성이라고 한다. 같은 이름의 속성을 유지함으로써, 속성을 사용하기 위한 인터페이스를 유지하고 메서드 이름을 낭비 하지 않는다는 장점이 있다.
이렇게 하기 위해서는 부모 클래스로부터 상속받은 "울음"을 쓰기 위해 자식 클래스에서 "울음"을 재정의 할 수 있어야하는데 이것을 오버라이딩이라고 한다.
참고 블로그
REST API란 무엇인가요?
프로젝트에 REST API를 사용한 이유가 무엇인가요?
REST API 말고 다른 비교할만한 것을 알고 있나요? (프로젝트에 REST API를 사용하셨을 경우에만 추가 답변)
1) REST(Representational State Transfer) API란?
일단은 REST에 대해서 알아야하는데 REST는
자원 Resource - URI
행위 Verb - HTTP methode
표현 Representations
으로 이루어져있다.
👀 REST의 6가지 특징
1) Uniform (유니폼 인터페이스)
Uniform Interface는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일
2) Stateless (무상태성)
작업을 위한 상태정보를 따로 저장하고 관리하지 않는다. 세션 정보나 쿠키정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순히 처리한다. 때문에 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해진다.
3) Cacheable (캐시 가능)
REST의 가장 큰 특징 중 하나는 HTTP라는 기존 웹표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용이 가능하다. 따라서 HTTP가 가진 캐싱 기능이 적용 가능하다. HTTP 프로토콜 표준에서 사용하는 Last-Modified태그나 E-Tag를 이용하면 캐싱 구현이 가능하다.
4) Self-descriptiveness (자체 표현 구조)
REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 되어 있다는 것이다.
5) Client - Server 구조
REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어들게 된다.
6) 계층형 구조
REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 PROXY, 게이트웨이 같은 네트워크 기반의 중간 매체를 사용할 수 있게 한다.
즉, 이렇게 REST 기반으로 서비스 API를 구현한 것을 REST API라고 한다.
REST API 설계시 가장 중요한 점!!
첫 번째, URI는 정보의 자원을 표현해야 한다. (리소스 명은 동사보다는 명사)
두 번째, 자원에 대한 행위는 HTTP method(GET, POST, PUT, DELETE)로 표현한다.
REST 기반으로 만들어졌기 때문에 확장성과 재사용성을 높여 유지 보수 및 운용이 편리하며,
HTTP 표준을 기반하여 구현하므로, HTTP를 지원하는 언어로 클라이언트, 서버를 전부 구현할 수 있다.
2) REST API를 사용한 이유?
URI로 정보의 자원을 표현 할 수 있어 코드를 처음 보더라도 어떤 것과 관련된 메서드인지 알 수 있고, 이를 토대로 확장 가능한 코드 만들기를 지향했기 때문이다.
참고 블로그
알고리즘 스터디
연습 > 직사각형 별찍기
이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.
입력
5 3
출력
*****
*****
*****
이 문제는 쉬웠다. 내가 항상 사랑하는 for문을 이용해서 풀어줬다. 근데 시간이,,,,?
import java.util.Scanner;
class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
for(int i=0; i<b; i++) {
for(int j=0; j<a; j++) {
System.out.print('*');
}
System.out.println();
}
}
}
2019 KAKAO BLIND RECRUITMENT > 실패율
문제가 넘 길어서 링크로 대체
흠,,,,,,, 뭔일이지 이게 대체,,,,,,,,, 흠,,,,,,,,,,,,,,,,,,,,,,,, 문제 자체를 이해를 못하고있넹
⠀⠀⠀⠀⢀⣀⣀⣀ ⠀⠀⠀⠰⡿⠿⠛⠛⠻⠿⣷
⠀⠀⠀⠀⠀⠀⣀⣄⡀⠀⠀⠀⠀⢀⣀⣀⣤⣄⣀⡀
⠀⠀⠀⠀⠀⢸⣿⣿⣷⠀⠀⠀⠀⠛⠛⣿⣿⣿⡛⠿⠷
⠀⠀⠀⠀⠀⠘⠿⠿⠋⠀⠀⠀⠀⠀⠀⣿⣿⣿⠇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠁
⠀⠀⠀⠀⣿⣷⣄⠀⢶⣶⣷⣶⣶⣤⣀
⠀⠀⠀⠀⣿⣿⣿⠀⠀⠀⠀⠀⠈⠙⠻⠗
⠀⠀⠀⣰⣿⣿⣿⠀⠀⠀⠀⢀⣀⣠⣤⣴⣶⡄
⠀⣠⣾⣿⣿⣿⣥⣶⣶⣿⣿⣿⣿⣿⠿⠿⠛⠃
⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄
⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡁
⠈⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁
⠀⠀⠛⢿⣿⣿⣿⣿⣿⣿⡿⠟
⠀⠀⠀⠀⠀⠉⠉⠉⠉