본문 바로가기
728x90
728x90

분류 전체보기191

[CS] 프로그래밍 패러다임 - 함수형, 절차지향형 프로그래밍 패러다임 프로그래밍 패러다임이란? 프로그래머에게 프로그램의 관점을 갖게 해주는 개발 방법론 프로그래밍 패러다임은 크게 선언형, 명령형으로 나눠지며, 선언형은 함수형이라는 하위 집합을 갖는다. 명령형은 다시 객체지향, 절차지향으로 나눠진다. 함수형 프로그래밍 함수형 프로그래밍은 선언형 패러다임의 일종이다. 순수함수들을 블록처럼 쌓아 로직을 구현하고, 고차함수를 통해 재사용성을 높인 프로그래밍 패더라임 이다. 테스트가 용이하며, 예측이 쉽다는 특징이 있다. 절차지향형 프로그래밍 절차지향형 프로그래밍은 로직이 수행되어야 할 연속적인 계산 과정으로 이루어져 있다. 일이 진행되는 방식으로 그저 코드를 구현하기만 하면 되기 때문에 코드의 가독성이 좋고, 실행속도가 빠르다는 장점이 있다. 반면, 단점으로는.. 2023. 1. 10.
[CS] 프로그래밍 패러다임 - 객체지향 프로그래밍 객체지향 프로그래밍 객체지향 프로그래밍이란? OOP(Object-Oriented Programming)라고도 불리는 객체지향 프로그래밍은 프로그램의 상호작용을 객체들의 집합으로 표현하며, 데이터를 객체로 취급하여 객체 내부에 선언된 메서드를 활용하는 방식의 프로그래밍 패러다임이다. 설계에 많은 시간이 소요되고, 처리속도가 느리지만 유지보수성이 뛰어나고, 확장에 유연하다는 장점이 있다. 객체지향 프로그래밍의 특징 추상화 추상화란 객체의 핵심적인 개념 또는 기능을 추출하여 간추려 정의하는 것. 객체들은 공통된 클래스를 토대로 생성되는데, 이때 객체들이 어떤 공통된 특징을 가지고 있어야 한다고 정의하는 것이다. 캡슐화 객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추어 은닉하는 것을 말한다. 캡슐화가 중.. 2023. 1. 10.
[CS] 디자인 패턴 - MVC, MVP, MVVM MVC MVC 패턴 Model, View, Controller 세개의 컴포넌트로 이뤄진 디자인 패턴. 애플리케이션의 구성요소를 세가지 역할로 구분하여 개발 프로세스에서 가ㅣ깍의 구성요소에만 집중해서 개발 할 수 있다. 재사용성과 확장성이 용이하지만, 반대로 애플리케이션이 복잡해질수록 모델과 뷰의 관계가 복잡해지는 단점이 있다. Model DATA, 정보들의 가공을 책임지는 컴포넌트 비즈니스 로직을 처리한 후 모데르이 변경사항을 컨트롤러와 뷰에 전달한다. 모델은 다음과 같은 규칙을 가지고 있다. 사용자가 편집하길 원하는 모든 데이터를 가지고 있다. 뷰나 컨트롤러에 대해서 어떤 정보도 알지 말하야 한다. 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야 한다. View 사용자에게 보여지는 부분을 담당하.. 2023. 1. 9.
[CS] 디자인패턴 - 이터레이터, 노출모듈 이터레이터(Iterator) 패턴 이터레이터 패턴이란 이터레이터를 사용하여, 컬렉션의 요소들에 접근하는 디자인패턴 예제 코드 Book이라는 객체를 모아둔 컬렉션(집합체)를 순회하는 Iterator를 구현 해보려고 한다. public class Book { private String name; public Book(String name) { this.name = name; } public String getName() { return name; } } public interface Aggregate { public abstract Iterator createIterator(); } public class BookShelf implements Aggregate { private Book[] books; pr.. 2023. 1. 9.
[CS] 디자인패턴 - 프록시 패턴(프록시 서버) 프록시 패턴 프록시 패턴이란? 대상 객체(subject)에 접근하기 전, 그 접근에 대한 흐름을 가로채 대상객체 앞단의 인터페이스 역할을 하는 디자인 패턴이다. 프록시 서버 프록시 서버란 서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램. Nginx 프록시 서버 Nginx는 비동기 이벤트 기반의 구조와 다수의 연결을 효과적으로 처리가능한 웹서버이다. 주로 Node.js 서버 앞단의 프록시 서버로 활용된다.(리버스 프록시) 이를 통해 익명 사용자의 직접적인 서버로의 접근을 차단하고, 간접적으로 한단계를 더 거침으로써 보안성을 더 강화할 수 있다. CloudFlare 프록시 서버 CloudFlare는 전 세계적으로 분.. 2023. 1. 9.
[CS] 디자인패턴 - 옵저버 패턴 디자인 패턴이란? 프로그램을 설계할 때 발생했던 문제점들을 해결 할 수 있도록 하나의 규약형태로 만들어 놓은 것. 옵저버 패턴 옵저버 패턴이란? 주체가 어떤 객체의 상태 변화를 관찰하다가, 상태 변화가 있을 때마다 메서드 등을 통해 옵저버 목록에 잇는 옵저버들에게 변화를 알려주는 디자인 패턴이다. 위에서 말하는 주체란 객체의 상태 변화를 관찰자이며, 옵저버들이란 이객체의 상태변화에 따라 전달되는 메서드 등을 기반으로 추가 변경사항이 생기는 객체들을 의미한다. 또한 주체와 객체를 따로 두지 않고, 상태가 변경되는 객체를 기반으로 구축하기도 한다. 옵저버 패턴은 MVC 패턴에도 사용 되기도 한다. 주체라고 할 수 있는 model에서 변경사항 생겨 이를 메서드를 통해 view에게 알려주고, 이를 기반으로 co.. 2023. 1. 5.
[CS] 디자인패턴 - 전략 디자인 패턴이란? 프로그램을 설계할 때 발생했던 문제점들을 해결 할 수 있도록 하나의 규약형태로 만들어 놓은 것. 전략 패턴 전략 패턴이란? 정책 패턴이라고도 하며 객체의 행위를 바꾸고 싶은 경우 직접 수정하는 것 이아닌, 전략이라고 부르는 캡슐화한 알고리즘을 컨텍스트 안에서 바꿔주며 상호교체가 가능하게 만드는 패턴 가장 큰 예로 Passport.js 라이브러리가 있다. 예제 코드 패스포트를 구현 할 수는 없으니까 간략한 예시를 구현 해보자. 장바구니에 물건을 담고, 결제를 할 때 결제수단을 Strategy로 만드는 코드이다. Strategy package org.example.strategy; public interface PaymentStrategy { public void pay(int amount.. 2023. 1. 5.
[CS] 디자인패턴 - 팩토리(if 없애기) 디자인 패턴이란? 프로그램을 설계할 때 발생했던 문제점들을 해결 할 수 있도록 하나의 규약형태로 만들어 놓은 것. 팩토리패턴 팩토리 패턴이란? 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이다. 상위 클래스가 중요한 뼈대를 겨정하고, 하위 클래스가 객체생성에 관한 구체적인 내용을 결정하는 패턴. Java 예시코드 라떼와, 아메리카노를 만들어내는 팩토리패턴을 구현해보려 한다. 우선 추상 클래스인 Coffee를 만들어 보자. public abstract class Coffee { public abstract int getPrice(); abstract String getName(); @Override public String toString() { return String.format("%.. 2023. 1. 5.
[CS] 디자인 패턴 - 싱글톤 디자인 패턴이란? 프로그램을 설계할 때 발생했던 문제점들을 해결 할 수 있도록 하나의 규약형태로 만들어 놓은 것 싱글톤 패턴(Singletone pattern) 싱글톤 패턴이란? 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴 보통 데이터베이스 연결 모듈에 많이 사용한다. Javascript 예시 코드 class SingletoneJS { constructor() { if(!SingletoneJS.instance) { SingletoneJS.instance = this } return SingletoneJS.instance; } } node 공부할 때 많이 사용 했던 코드라 익숙하다. 생성자가 호출되고, SingletonJS.instance 가 undefined인 경우 SingletoneJS.inst.. 2023. 1. 4.
[Spring] mySql + JPA CRUD 인텔리J 유료버전 기준으로 작성된 글 입니다 Java Version 11 [Spring] 스프링 부트 시작하기. Hello, World! [Spring] form 태그와 JSON 형식을 이용한 요청 [Spring] Spring mySql 연결 + JPA 과 이어지는 내용입니다. 설정 저번 포스팅에서 DB와 연결만 해놓고 서비스 로직을 작성할 어떠한 설정도 하지 않았다. 이제 해야됨. Repository repository 부터 생성을 해보자. package com.example.helloworld.repository; import java.util.List; import com.example.helloworld.domain.User; public interface UserRepository { User .. 2023. 1. 4.
[Spring] Spring mySql 연결 + JPA 인텔리J 유료버전 기준으로 작성된 글 입니다 Java Version 11 [Spring] 스프링 부트 시작하기. Hello, World! [Spring] form 태그와 JSON 형식을 이용한 요청 과 이어지는 내용입니다. 라이브러리 의존성 추가 우선 build.gradle을 열어서 dependencies에다가 mySql과 JPA라이브러리 의존성을 추가해주자. implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'mysql:mysql-connector-java' 이 위에 두개를 붙여 넣으면 된다. runtimeOnly는 컴파일 시점에는 필요없지만 실행 시점에는 꼭 필요한 라이브러리의 의존성을 추가할 때 사용한.. 2023. 1. 4.
[Spring] form 태그와 JSON 형식을 이용한 요청 인텔리J 유료버전 기준으로 작성된 글 입니다 Java Version 11 [Spring] 스프링 부트 시작하기. Hello, World!와 이어지는 글입니다. @RequestParam 회원 가입을 할 수 있는 간단한 form을 만들고, 제출 그리고 이 form.html을 /form 이라는 url에 get요청이 들어올 때 보여주자. public class HelloController { @GetMapping("/") public String hello() { return "hello"; } @GetMapping("/form") public String form() { return "form"; } } 이렇게 작성 해준 뒤, 서버를 한번 껐다 켜준 뒤에 localhost:8080/form 접속 해보면, 위와.. 2023. 1. 4.
[Spring] 스프링 부트 시작하기. Hello, World! 인텔리J 유료버전 기준으로 작성된 글 입니다 Java Version 11 프로젝트 생성 인텔리J를 실행 시키고 New Project를 통해 프로젝트를 생성한다. 프로젝트 이름은 HelloWorld 이다. 왼쪽에 수많은 아이콘들이 있는데, 그중 Spring Initializr를 클릭하고 오른쪽과 같이 설정한다. 현재 사용하는 Java version은 11이다. 인텔리J 무료버전은 Spring Initializr가 지원하지 않는다. Spring Initializr를 통해 손쉽게 시작할 수 있다. Next를 누르면 최상단에 Spring boot version을 선택할 수 있는데, 3.0.0 버전 이상은 Java17 을 필요로 한다. 사용하는 Java version에 맞게 설정한다. 왼쪽에 여러 라이브러리들이 .. 2023. 1. 3.
우아한 테크 코스 5기 백엔드 최종 합격 후기 최종테스트 이후 12월 17일에 최종테스를 마치고, (우테코 5기 최종테스트 회고록) 며칠간은 푹 쉬었다. 테스트 당일 얼마나 긴장을 했는지 자고 일어나니까 어깨가 다 뭉쳤었다. 테스트 이후 발표까지 약 10일간은 진짜 아무것도 안하려고 했는데, 한 이틀 노니까 심심하더라. 그래서 Spring공부를 했다. 인프런에 김영한 님 Spring강의 첫번째 시리즈가 무료이길래, 요걸로 공부를 좀 했다. 그러다보니 크리스마스가 됐고, 크리스마스를 즐겁게 보내고 나니 본격적으로 긴장감이 몰려오기 시작했다. 특히 26일 월요일이 긴장감이 최고로 날뛰었다. 이때의 내 정신상태는 우테코 붙고 나서의 내 모습을 상상함 합격하지도 않았는데 이게 뭐하는 짓인가 싶은 현타 떨어지면 어뜨카지.... 위 세가지가 순차적으로 끊임없이.. 2022. 12. 28.
[우테코 5기 프리코스] 최종 코딩 테스트 1. 프리코스 이후 아빠 환갑이랑 프리코스 기간이 겹쳤었다. 깔끔하게 미뤘다. 진짜 불효자 새끼임;; 미뤘던 아빠 환갑파티를 할겸 부산을 다녀오면서 일주일 간은 푹 쉬었다. 다시 집으로 돌아와서 본격적으로 최종 코테 준비를 들어갔다. 사실 이때 기가 많이 죽어있었어서, 1차합격 못하지 않을까란 생각을 많이했었는데, 그래도 공부할 겸, 호오옥시 붙을지도..라는 마음으로 준비를 시작했다. 우선 내가 사는 지역의 최종코테 대비 모각코를 구성했다. 카페에서 모여서 5시간 동안 하나의 미션을 구현하고, 서로 리뷰하는 과정을 거쳤다. 일주일에 한번, 2번을 모였는데, 처음에는 5명이, 두번째는 3명이 참여했다. 근데 사실. 모각코를 하는 날을 제외하곤 제대로 공부를 한날은 손에 꼽는다. 공부가 손에 안잡히더라. '.. 2022. 12. 18.
[우테코 5기 프리코스] 4주차 돌아보기 0. 목차 1. 프리코스 끝 2. 과제 3. 많이 고민한 내용 4. 최종 소감 1. 개요 오늘 4주간의 프리코스가 모두 완료되었다. 👏 🎉 이번미션은 진짜 힘들더라. 후우.. 마지막에 예기치 못한 오류 만나서 잠시 당황했는데, 일단은 잘 넘겼고, 일단은 성공적으로 마쳤다. 솔직히 탈진 상태라 아무것도 하기 싫은데, 그래도 까먹기 전에 회고를 후딱 쓰자. 2. 과제 이번 주차 과제는 다리건너기 였다. https://github.com/woowacourse-precourse/java-bridge 처음엔 이게 뭔소린가 했다. 진짜로. GitHub - woowacourse-precourse/java-bridge Contribute to woowacourse-precourse/java-bridge developm.. 2022. 11. 23.
[우테코 5기 프리코스] 3주차 돌아보기(11월 16일 추가) 우테코 프리코스 3주차 과제 https://github.com/woowacourse-precourse/java-lotto GitHub - woowacourse-precourse/java-lotto: 로또 미션을 진행하는 저장소 로또 미션을 진행하는 저장소. Contribute to woowacourse-precourse/java-lotto development by creating an account on GitHub. github.com 로또 만들기가 이번 프리코스 과제였다. 로또 살 금액을 입력하면 자동으로 로또 번호가 생성돼서 출력되고, 당첨번호와 보너스 번호를 입력하면 결과가 출력되고, 로또 구매 금액과 당첨금액을 비교해서 수익률이 몇퍼센트인지 출력해주는 프로그램을 만드는 과제였다. 2주차 과제보.. 2022. 11. 15.
[Java] 에러(Error)과 예외(Exception) 0. 목차 1. 개요 2. 오류 3. 예외 1. 개요 우테코 3주차 과제 수행 중 예외에 대한 공부의 필요성을 느끼고 책과 검색을 통해 알게된 내용을 정리해보려고 한다. JS만 거의 1년 가까이해서 뭔가 굉장히 낯선 부분인데, 우테코 슬랙채널을 보면 다른 언어를 하시던 분들도 다 비슷한 마음 인것 같다.. 현재 공부하는 책에서 예외처리에 대한 챕터를 딱하고 펼치니, 오류와 예외는 다릅니다. 라는 사실 부터 짚고 넘어간다. 일단 오류나 예외나 모두 클래스로 관리되고,둘 다 Throwable을 상속하기 때문에, 에.. 비슷한거 아닌가 싶은 느낌인데, 다르다니까 뭐가 다른지 확인을 해보자. 2. 오류 우선 오류는 시스템이 종료되어야 할 수준의 상황과 같이 수습할 수 없는 심각한 문제를 의미한다. 이는 개발자가.. 2022. 11. 14.
[우테코 5기 프리코스] 2주차 돌아보기 0. 목차 1. 개요 2. 회고 3. 가장 많이 고민한 부분 4. 정리 1. 개요 어제(11월 7일 월요일) 프리코스 2주차 과제를 제출했다. 지식이 부족해서 일까. 더이상 어딜 고쳐야 될질 모르겠다. 절대 완벽하다는 소리가 아님;; 그.. 뭐랄까. 만약에 내가 건축가라면 좀 잘못지어진 건축물을 보고 '스읍..... 이거이거 건축 할줄 모르네' 라고 하겠지만 일반인들은 '헤헿 건축물 헤헿' 하고 말겠지. 지금 내가 그렇다. '헤헿 야구게임 헤헿' 하고 있다. 회고록이나 쓰고 자바 공부나 해야겠다. 2. 회고 2주차 미션은 야구게임 이었다. 미션을 받고 든 생각은 '역시나.. 근데 왜?' 였다. 우테코 관심있고, 진심인 사람들은 아마 전기수 전전기수 프리코스 문제들 한번씩은 검색해서 풀어봤을거라 생각하는데.. 2022. 11. 8.
[Java] enum type(열거 타입) 정리 0. 목차 1. 개요 2. enum type 1. 개요 그래도 약 1년간 프로젝트도 해보고, 코테준비도 했던 덕분인지 우테코 미션을 받았을 때 서비스 로직을 머릿속에 그리는 건 어렵지 않게 된다. 그런데 Java 기본 개념이 부족하다 보니, 서비스 로직을 코드로 옮기는 게 어렵다... 오늘은 쓰려고 할때마다 이거.. 뭐더라 하는 enum type 찢고 넘어가자. 2. enum type 데이터 중에는 몇가지의 한정된 값만을 갖는 경우가 있다. 뭐 예를들어 행정구역이라던가(서울, 부산, 대구 등등..), 계절이라던가(봄,여름,가을,겨울) 이런 애들을 enum type이라고 한다. 라는 식으로 되어있는 설명을 봤는데 뭔소리지 싶었다. 그냥 성질이 비슷한 상수(constant) 모아놓은 애라고 생각하면 된다. .. 2022. 11. 7.
728x90
728x90