본문 바로가기

Java9

Map 정렬하기 자료구조 중 Map 객체의 정렬에 대해 정리하려고 합니다. Map 객체의 정렬은 key 기준 정렬과 value 기준 정렬이 있습니다. Key 기준 정렬 key 기준 정렬은 어려울 것이 없습니다. 기본적으로 key값을 기준으로 정렬해주는 TreeMap 이 있기 때문입니다. Map map = new TreeMap(); map.put('B', 2); map.put('A', 1); map.put('G', 4); map.put('E', 3); System.out.print(map); // 출력 {A=1, B=2, E=3, G=4} Value 기준 정렬 value 기준 정렬은 여러 가지 방법이 있습니다. 그중 가장 간단한 방법은 Map의 key값들을 list에 저장한 후 Comparator를 이용해 Value 기준.. 2021. 9. 30.
객체지향 설계원칙 SOLID Spring이 Java 진영에 환영받고 표준으로 자리잡을 수 있었던 가장 큰 이유는 좋은 객체지향 프로그래밍을 할 수 있기 때문입니다. 그렇다면 좋은 객체지향 프로그래밍이란 무엇일까요? 그것은 바로 SOLID 원칙을 잘 지키는 것입니다. SOLID SRP(Single Responsibility Principle) - 단일 책임 원칙 모든 클래스는 각각 하나의 책임(기능)만 가져야 한다. 따라서 클래스를 수정할 때 다른 기능에 영향이 없어야 한다. OCP(Open Closed Principle) - 개방/폐쇄 원칙 확장에는 열려있고 수정에는 닫혀있어야 한다. 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계가 되어야 한다. LSP(Liskov Substitution Principle) - 리스.. 2021. 6. 15.
Spring 이란? 추운 겨울이 지나고 개발자들에게 봄이 왔다. Spring은 로드 존슨에 의해 처음 제시되었고 유겐 휠러, 얀 카로프의 제안으로 오픈소스 프로젝트로 프레임워크 개발이 시작되었습니다. Spring에는 BeanFactory, ApplicationContext, POJO, IoC, DI 등 핵심 개념들이 있는데 나중에 자세히 정리해보겠습니다. Spring이 Java Web 진영의 사실상 표준이 되면서 보다 나은 개발환경을 제공하기 위해 Spring Boot, Security, Cloud 등 다양한 서브 프로젝트들이 추가되고 있습니다. Spring F/W의 기술 스펙 핵심 기술: 스프링 DI 컨테이너, AOP, 이벤트 웹 기술: Spring MVC, Spring WebFlux 데이터 접근 기술: transacti.. 2021. 6. 14.
Java 언어의 특징 자바는 대표적인 객체지향 프로그래밍 언어이다 객체지향 프로그래밍(Object Oriented Programming)의 대표적인 특징 4가지는 아래와 같다 캡슐화 - 하나의 클래스 안에 데이터와 기능을 담아 정의하고, 중요한 데이터와 기능 등은 숨기고 외부에서 사용하는데 필요한 것들만 공개하는 것 상속 - 부모 클래스를 상속받은 자식 클래스는 부모 클래스에 선언된 메서드를 사용할 수 있다. 다형성 - 메서드의 변형이라고 이야기할 수 있는 특성으로 오버로딩과 오버라이딩이 있다. 추상화 - 현실의 객체에서 특징을 추출하는 과정 ex) 자동차 ==> 이름, 색깔 등의 정적 특징 / 움직임, 멈춤 등의 기능 Class 현실의 객체(Object)들을 분석하여 공통적인 특징들을 추상화해서 표현한 것! Class 생성.. 2021. 2. 5.
Overloading & Overriding OOP의 특징 중 다형성(Polymorphism)의 가장 중요한 개념이 오버로딩과 오버라이딩이다. Overloading 같은 이름의 메서드가 파라미터 값이 다를 때 중복정의 되어졌다고 한다. 오버로딩은 반드시 상속관계에서만 발생하지는 않고, 조건은 아래와 같다. 파라미터의 Type이 다르거나 파라미터의 개수가 다르거나 파라미터의 순서가 다르거나 class OverloadingTest { // 파라미터의 타입이 다를때 public void overloading(int i) { } public void overloading(String s) { } // 파라미터의 순서가 다를때 public void overloading(int x, byte y) { } public void overloading(byte y.. 2021. 1. 26.
Java 자료형 Primitive Type 별도의 객체 생성 없이 선언하여 바로 사용할 수 있는 데이터 타입이다 자바의 기본 자료형은 아래 테이블과 같다 분류 이름 메모리 default 범위 논리 boolean 1 bit false true or false 문자 char 2 byte '\0' '\u0000' ~ 'uFFFF' 정수 byte 1 byte 0 -128 ~ 127 short 2 byte 0 -2^16 ~ 2^16-1 int 4 byte 0 -2^31 ~ 2^31-1 long 8 byte 0 -2^63 ~ 2^63-1 실수 float 4 byte 0.0 -3.4E38 ~ 3.4E38 double 8 byte 0.0 -1.7E308 ~ 1.7E308 java에서 String은 기본 자료형이 아닌 reference.. 2021. 1. 25.
탐색 알고리즘 - BFS(넓이 우선 탐색) 다양한 탐색 알고리즘 중 하나인 BFS를 알아보자 BFS는 Breadth First Search의 줄임말로 DFS의 반대 개념이라고 생각하면 된다 (DFS 설명) 아래 트리구조를 보자 DFS가 root node(최상단의 node)부터 시작하여 좌측 끝 3번 노드까지 탐색하고 중앙 4번 노드를 탐색한다반면 BFS는 root node에 바로 맞닿아있는 2,3,4번 노드를 순차적으로 탐색한다 탐색 순서를 알아봤으니 BFS 구현의 특징을 살펴보자 1. 자료구조 Queue를 사용한다 -> 1번 node와 맞닿아있는 2,3,4번 노드를 모두 큐에 넣은 후 큐에서 2번 노드를 뽑고 2번의 자식 노드들을 큐에 담는다 이런 간단한 로직을 반복하면 된다. 2. 재귀문을 사용할 필요 없이 반복문 하나로 탐색이 가능하다. w.. 2020. 9. 15.
백준 5373 큐빙 이 문제는 친구가 추천해줘서 풀어본 순수 구현 문제이다. 문제 이름 그대로 큐브를 하는 것을 떠올리면서 행렬들의 값을 만지면 되는 간단한(?) 문제이다. 풀이 필요한 알고리즘은 딱히 보이지 않았고 시간과 노력으로 풀 수 있는 문제인 듯 코딩을 시작하기 전 노트에 6면의 움직임을 직접 그리면서 표현해보고 연계적인 동작을 설계하는 시간을 가진다면 막힘없이 코드를 작성할 수 있을 것이다! 소스코드가 너무 복잡하고 반복적이어서 "윗면"의 코드만 일부 발췌해왔다. 코드 static void cubing(char face, char direc) { char[] tmp = new char[3]; char[][] change = new char[3][3]; switch(face) { case 'U' : if(direc.. 2020. 9. 1.
백준 N9251_LCS(Longest Common Subsequence) 문제 LCS는 Longest Common Substring과 Sequence가 있습니다. 이 두 가지의 차이는 LCS가 비교 문자열에서의 연속여부 입니다. 주어진 두 문자열(길이가 다를 수 있음)의 공통된 문자열 중 가장 긴 길이를 탐색하는 문제입니다. 완전탐색으로도 풀이는 가능합니다. 이럴 경우 시간복잡도가 최악의 경우 O(n^n)로 매우 크기 때문에 DP를 이용해야 합니다. 연속되지 않은 문자들을 뽑아도 되지만 순서는 지켜야 하는 조건을 이용하면 문자열 1에 대해 문자열 2를 0번 인덱스부터 점차 비교하는 방식으로 해결이 가능합니다. 풀이 먼저 DP를 아래 matrix처럼 선언합니다. 여기서 각 0번 index를 0으로 초기화시켜둔 상태로 가정하고 진행하는 이유는 만약 두 문자열 중 하나라도 null.. 2020. 8. 12.