분류 전체보기

    RESTful API

    RESTful API

    RESTful API에 대해 알아보기 전에 REST가 무엇인지부터 알아보자. REST(REpresentational State Transfer) REST는 웹과 같은 분산 하이퍼미디어 환경에서 자원의 존재, 상태 정보를 표준화된 HTTP 메서드로 주고받는 웹 아키텍처이다. 즉, HTTP URI(Uniform Resource Identifier)를 통해 자원을 명시하고 HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD 연산을 적용하는 것을 의미한다. REST는 크게 리소스(자원), 메서드(처리), 메시지의 3가지 요소로 구성된다. 만약 "닉네임이 수풀림인 사용자를 생성해라"라는 호출이 있을 때 리소스, 메서드, 메시지는 각각 아래와 같다. 리소스 = 사용자 ..

    [77885] 2개 이하로 다른 비트(C++)

    문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해결 방법 f(1), f(2), f(3)... 이렇게 하나씩 구하다보면 규칙을 찾을 수 있는 문제 우선 x가 짝수인 경우 f(x)는 항상 x + 1이다. 그 이유는 x가 짝수이기 때문에 가장 마지막 비트가 0이고 따라서 이 자리만 1로 바꿔주면 f(x)가 되기 떄문이다. x가 홀수인 경우에도 규칙이 있다. 제일 낮은 자리의 비트부터 앞으로 탐색하면서 가장 처음으로 0이 나타나는 위치를 먼저 구하고, 이 위치는 1로 바꾸고 바로 오른쪽의 비트는 0으로 바꾸면 된다. 예를 들어, x = 7 = 111(2)인..

    객체 지향 프로그래밍의 설계원칙, SOLID

    객체 지향 프로그래밍의 설계원칙, SOLID

    객체 지향 프로그래밍을 설계할 때는 SOLID 원칙을 지켜야 한다. S ingle Responsibility Principle(SRP) O pen Closed Principle(OCP) L iskov Substitution Principle(LSP) I nterface Segregation Principle(ISP) D ependency Inversion Principle(DIP) SRP(Single Responsibility Principle, 단일 책임 원칙) 모든 클래스는 단 하나의 책임만 가져야 하고 메서드나 클래스를 수정하는 이유도 단 하나여야 한다는 원칙이다. 예를 들어, 당근 마켓에서 중고거래를 하는 경우를 생각해보자. 당근 마켓의 유저는 크게 판매자와 구매자로 나눌 수 있다. // SRP를..

    오버로딩(Overloading) vs 오버라이딩(Overriding)

    오버로딩(Overloading) vs 오버라이딩(Overriding)

    오버로딩과 오버라이딩은 객체지향프로그래밍의 특징 중 다형성에 포함되는 개념이다. 📌 오버로딩(Overloading) 오버로딩은 같은 이름을 가진 메서드를 여러 개 두는 것을 말한다. 메서드의 타입, 매개변수의 타입, 매개변수의 개수 등으로 다양한 종류를 생성할 수 있고 컴파일 중에 발생하는 정적 다형성이다. // 오버로딩 예제(Kotlin) class Person { fun eat(a: String) { println("I eat$a") } fun eat(a: String, b: String) { println("I eat $a and $b") } } 오버로딩은 이처럼 같은 역할을 하는 함수를 하나의 이름으로 사용할 수 있다는 장점이 있다. 내가 음식 한개를 먹었던, 두개를 먹었던, 내가 먹은 음식을 전..

    [21919] 소수 최소 공배수(C++)

    문제 행복이는 길이가 $N$인 수열 $A$에서 소수들을 골라 최소공배수를 구해보려고 한다. 행복이를 도와 이를 계산해주자. 입력 첫째 줄에 수열 $A$의 길이 $N$이 주어진다. $(1 \le N \le 10,000)$ 그 다음줄에는 수열 $A$의 원소 $A_{i}$가 공백으로 구분되어 주어진다. $(2 \le A_{i} \le 1,000,000)$ 답이 $2^{63}$ 미만인 입력만 주어진다. 출력 첫째 줄에 소수들의 최소공배수를 출력한다. 만약 소수가 없는 경우는 -1을 출력한다. 해결 방법 이 문제의 핵심은 1️⃣ 수열의 원소는 중복될 수 있음 2️⃣ 소수들의 최소공배수를 구하는 것 위와 같다. {2, 3, 3, 4, 5, 5, 8}과 같이 수열에 중복된 원소가 들어갈 수 있는데 우리가 찾고자 하는..

    객체 지향 프로그래밍(OOP, Object-Oriented Programming)

    객체 지향 프로그래밍(OOP, Object-Oriented Programming)

    세상 모든 것이 객체 객체란 보고 만질 수 있는 것, 지성적으로 이해할 수 있는 것, 생각이나 행동이 추구하는 바를 말한다. 다시 말해서 객체는 우리 주변에서 쉽게 볼 수 있는 핸드폰, 노트북, 리모컨, TV 등 모든 것이 될 수 있다. 그리고 이들은 자신만의 특성과 행동으로 다른 객체들과 상호작용하고 있다. 예를 들면, 리모컨은 TV를 작동시키기 위한 다양한 버튼이 있다는 특성(state, attribute)이 있고, 리모컨의 버튼을 누르면 TV가 작동하는 행동(behavior)이 일어난다. 객체 지향 프로그래밍에서는 리모컨의 특성과 행동을 변수와 메서드로 정의한 것을 클래스라고 부르며, 이 클래스에서 정의한 것을 바탕으로 실제 생산된 리모컨을 인스턴스(객체)라고 부른다. 객체 지향 프로그래밍(Obje..

    좋은 코드란 무엇인가

    좋은 코드란 무엇인가

    좋은 코드란 무엇일까? 좋은 이라는 말은 굉장히 추상적이다. 누군가는 읽기 쉬운 코드를 좋은 코드라고 할 수도 있고, 누군가는 테스트가 쉬운 코드를 좋은 코드라고 할 수 있다. 이처럼 개발자의 관점에 따라, 각자의 경험에 따라 좋은 코드에는 여러 뜻이 담길 수 있다. 읽기 쉬운 코드 개발자들은 코드를 작성하는데 가장 많은 시간을 쓰고 있을 거라 생각하지만, 실제로 그들은 코드를 이해하는데 가장 많은 시간을 소비하고 있다. 읽기 쉬운 코드를 작성하는 것은 생각보다 어렵다. 당장 내가 작성한 코드도 몇 달 뒤에 보면 새롭기 때문이다. 특히 협업을 진행한다면 코드의 가독성은 더더욱 중요하기 때문에 팀원들끼리 코드의 규칙을 정하는 게 좋다. 1️⃣ Names a1, a2, t1... 이런 이름들은 무슨 역할을 ..

    [3055] 탈출(C++)

    [3055] 탈출(C++)

    문제 바로가기 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제일 친한 친구인 비버의 굴로 가능한 빨리 도망가 홍수를 피하려고 한다. 티떱숲의 지도는 R행 C열로 이루어져 있다. 비어있는 곳은 '.'로 표시되어 있고, 물이 차있는 지역은 '*', 돌은 'X'로 표시되어 있다. 비버의 굴은 'D'로, 고슴도치의 위치는 'S'로 나타내어져 있다. 매 분마다 고슴도치는 현재 있는 칸과 인접한 네 칸 중 하나로 이동할 수 있다. (위, 아래, 오른쪽, 왼쪽) 물도 매 분마다 비어있는 칸으로 확장한다. 물이 있는 칸과 인접해있는 비어있는 칸(적어도 한 변을 공유)은 물이 차게 ..