전체 글
-
[백준] 1655번 : 가운데를 말해요 - 자바(JAVA)알고리즘/백준 2022. 1. 30. 00:01
https://www.acmicpc.net/problem/1655 1655번: 가운데를 말해요 첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다. 정수는 -1 www.acmicpc.net 문제 해석 Boj(백준이)가 정수를 하나씩 외칠 때마다 Brother(동생)이 지금까지 말한 수 중에서 중간값을 말해야 한다. 만약 Boj가 외친 수의 개수가 짝수개라면 중간에 있는 두 수 중 작은 수를 말한다. 입력 첫째 줄에는 백준이가 외치는 정수의 개수 N 그다음 N 줄에 걸쳐 백준이가 외치는 정수가 차례대로 주어진다. 제약조건 1
-
[Java] 스트림(Stream)이란? + 특징, 등장배경Java 2022. 1. 29. 00:01
스트림(Stream)이란? Stream이란 시냇물이라는 뜻으로 물이 흘러가듯이 데이터 소스가 가진 데이터가 흘러감을 의미합니다. 다양한 데이터 소스(컬렉션, 배열)를 표준화(통일)된 방법으로 다루기 위한 것입니다. 공식문서에서는 아래와 같이 소개하고 있습니다. Classes to support functional-style operations on streams of elements, such as map-reduce transformations on collections. 컬렉션의 맵리듀스 변환과 같은 스트림의 요소에 대하여 함수형 스타일의 연산을 지원하는 클래스입니다. 맵리듀스(map-reduce)란? 대용량 데이터 처리를 분산 병렬 컴퓨팅에서 처리하기 위한 목적으로 제작된 프레임워크 스트림의 등장배..
-
클린 코드 - 객체와 자료 구조클린 코드(Clean Code) 2022. 1. 28. 00:01
보통 클래스의 멤버 변수를 private(비공개)로 정의하는 이유는 남들이 변수에 의존하지 않게 만들며 변수를 감추고 싶어서입니다. 그렇다면 과연 getters와 setters 함수를 당연하게 public(공개)하여 비공개 변수를 외부에 노출하는 게 좋을까요? 아래에 바로 답변이 있습니다. 1. 자료 추상화 변수 사이에서 함수라는 계층을 넣는다고 구현이 감춰지지않습니다. 구현을 감추기 위해서는 추상화가 필요합니다. 그저 인터페이스나 getters와 setters 함수로 변수를 다룬다고 클래스 및 추상화가 되지 않습니다. 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스입니다. 개발자는 추상화를 표현하기 위해 고민해야 하며, 아무 생각 없이 getters/setters 함수를 ..
-
[Java] 싱글톤(Singleton)이란?Java 2022. 1. 27. 00:01
싱글톤(Singleton)이란? 전역 변수를 사용하지 않고 애플리케이션이 시작될 때 최초 한 번만 메모리에 할당되어 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴 즉, 싱글톤 패턴은 단 하나의 인스턴스를 생성해 사용하는 디자인 패턴입니다. Single이라는 단어 자체가 한 개/단일을 의미하기 때문에 "싱글톤"이라는 단어 자체로 어느 정도 객체를 하나만 생성한다고 유추할 수도 있습니다. 싱글톤을 사용하는 이유? 고정된 메모리 영역을 얻으면서 한 번의 new로 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있습니다. 전역으로 사용되는 인스턴스이기 때문에 다른 클래스의 인스턴스들이 접근하여 사용할 수 있습니다. 즉, 데이터 공유가 쉽다는 것입니다. 하지만 여러 클..
-
스프링 부트 - 회원 관리 예제 실습(회원 도메인과 리포지토리 생성)Spring Framework 2022. 1. 26. 00:01
비즈니스 요구사항 정리 데이터 : 회원 ID, 이름 기능 : 회원 등록, 조회 아직 데이터 저장소가 선정되지 않은 가상의 시나리오(어떤 데이터베이스를 사용할지 정해지지 않음) 일반적인 웹 애플리케이션 계층 구조 컨트롤러 : 웹 MVC의 컨트롤러 역할 서비스 : 도메인을 기반으로 핵심 비즈니스 로직 구현(회원은 중복가입이 안된다 등의 로직) 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인 : 회원, 주문, 쿠폰 등 데이터베이스에 저장되고 관리되는 비즈니스 도메인 객체 클래스 의존관계 핵심 비즈니스 로직을 구현 서비스에는 MemberService가 있습니다. 리포지토리에는 MemberRepository가 있는데 아직 데이터베이스 저장소(RDB, NoSQL 등)가 선정되지 않았으..
-
[Java] 메서드 참조란?Java 2022. 1. 25. 00:01
메서드 참조란? 메서드 참조는 람다 표현식이 단 하나의 메서드만을 호출하는 경우 해당 람다 표현식에서 불필요한 매개변수를 제거하고 사용할 수 있도록 해줍니다. 람다식으로 메서드를 간결하게 표현할 수 있는데 람다식을 더욱 간결하게 표현하는 방법 (단, 람다식이 하나의 메서드만을 호출하는 경우) 메서드 참조 예시 아래의 wrapper메서드는 문자열을 정수로 반환하는 일을 합니다. Integer wrapper(String s) { return Integer.parseInt(s); } 이를 람다식으로 표현해 보겠습니다 Function f = (String s) -> Integer.parseInt(s); 이를 메서드 참조로 표현해 보겠습니다 Function f = Integer::parseInt; 메서드 참조에서..
-
[Java] Math.random() vs java.util.Random 효율성 차이점 비교Java 2022. 1. 24. 00:01
두 함수는 모두 난수를 생성합니다. 난수란? 정의된 범위 내에서 무작위로 추출된 수를 일컫는다. 난수는 누구라도 그다음에 나올 값을 확신할 수 없어야 한다. 하지만 컴퓨터 과학 분야에서 말하는 난수는 보통 결정론적인 방법에서 생성된 난수이다. 특정 입력이나 조건에 따라 무작위로 선택된 것처럼 보이는 난수 또는 난수 열이 생성되며 그 생성 조건이나 입력이 같다면 그 결괏값은 항상 같다. 즉, 프로그래밍에서 난수란 정말 무작위로 추출된 수가 아닌 시스템적으로 추측하기 어렵게 임의의 수를 만들어서 적용하는 것을 말합니다. java.lang.Math.random() 기본 숫자 연상을 수행하기 위한 Math 클래스의 메소드입니다. 0.0
-
클린 코드 - 형식 맞추기클린 코드(Clean Code) 2022. 1. 23. 00:01
1. 적절한 행 길이를 유지하자 당연하겠지만 큰 파일보다 작은 파일이 이해하기 쉽습니다. 2. 개념(함수 등)은 빈 행(줄 바꿈)으로 구분하자 빈 행으로 구분하지 않은 코드들은 가독성이 떨어집니다. 빈 행으로 구분한 코드 static void outputSolution() throws IOException { BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); bw.write("hi"); bw.flush(); bw.close(); } static void inputTest() { productInfo.forEach((i) -> System.out.println(i[0] + " " + i[1])); } 빈 행으로 구분하지 ..