본문 바로가기

Study/Java

(16)
[Java] 두 날짜의 차이 구하기 Python을 사용하면 날짜간의 차이를 쉽게 구할 수 있지만, 자바는 문자열로 선언된 날짜를 포매터로 파싱해 주고 Date 객체를 통해 생성된 숫자로 별도 연산을 해주어야 한다. from datetime import datetime now = datetime.now() print(now) # 2022-08-24 13:03:28.525645 past = datetime.strptime("20210305", "%Y%m%d") print(past) # 2021-03-05 00:00:00 diff_days = now - past print(diff_days) # 537 days, 13:03:28.525645 # 며칠 차이 나는지 print("diff_days : ", diff.days) # 차이가 나는 일 수를..
[Java] HashMap은 값이 들어가는 순서를 보장하지 않는다 자바의 컬렉션 중 Map 인터페이스를 구현한 대표적인 예시가 HashMap이라고 할 수 있다. HashMap은 key와 value를 쌍으로 가지는 Entity 객체를 담는 자료구조이다. key와 value는 각각 객체이다. value는 중복될 수 있지만, key는 중복될 수 없는 것이 특징이다. 만약 기존에 있던 key와 동일한 key로 value를 저장하게 되면 기존에 있던 값은 삭제되고 새로운 값이 들어가게 된다. 이름처럼 Hashing을 사용하기 때문에 많은 양의 데이터를 검색할 때 높은 성능을 보인다. 그런데 HashMap은 hash 함수를 사용하여 값을 저장하기 때문에, 사용자가 값이 저장되는 위치를 알기 어렵고 값이 들어가는 순서는 위치와 무관해지게 된다. 예를 들어 import java.ut..
[Java] 최대공약수와 최소공배수를 구하는 함수 package com; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int t = Integer.parseInt(br.readLine()); StringTokenizer st; StringBuilder sb = new StringBuilder(); for..
[Java] Reflection(리플렉션) 1. 개념 구체적인 클래스 타입을 알지 못할 때 해당 클래스의 메소드, 타입, 변수에 접근할 수 있게 해주는 자바 API 변수의 값을 조건에 따라 다르게 사용하거나 어플리케이션이 실행되고 나서 생성되어야 할 클래스가 있다면 사용할 수 있다. 2. 클래스 정보 가져오기 package com; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Arrays; public class Main { public static void main(String[] args) { // 임의의 클래스 가져오기(클래스의 정보를 로드) Class cls = Class.forName("com.cls.Person"); System.out..
Jsoup 사용하여 웹페이지 크롤링하기 Jsoup은 Java의 라이브러리로 웹 문서에 대한 크롤링 기능을 제공한다. Maven Repository에서 Jsoup을 검색하면 여러 목록이 보이는데 거기에서 "Jsoup Java HTML Parser"를 클릭하면 다음과 같이 라이브러리를 다운로드 할 수 있는 페이지로 연결된다. 최신 버전중에 사람들이 많이 다운로드받은 1.13.1 버전을 받아 사용하였다. Maven이나 Gradle 프로젝트였다면 의존성 관리를 통해 추가해줄 수 있지만, 순수 자바로 할 것이기 때문에 jar파일을 다운로드 해주었다. 프로젝트 구조에서 모듈 -> 종속요소에 다운로드 받은 jar 파일을 넣어주고 적용한다. 그러면 Jsoup을 사용할 준비가 된 것이다. 파일 구조는 다음과 같다. 크롤링할 자료는 어떤 블로그의 제목과 글 내..
Java : 디자인패턴, 싱글톤 안녕하세요! 이번 글은 자바 프로그래밍 입문 11번째 포스팅으로 디자인 패턴에 관한 이야기입니다. 프로그램을 설계하다보면 어떤 특정한 곳에서 고질적인 문제들이 종종 발생합니다. 이 때 우리는 디자인 패턴이라는 것을 통해 특정 문제가 발생하게 되면 그 문제를 해결할 수 있는 수단으로서 재사용 가능한 일련의 해결책을 만들어놓는데, 이것이 바로 디자인 패턴입니다. 그러면 디자인 패턴에 대해 자세하게 알아보겠습니다. 디자인 패턴이란? 기본 개념 디자인 패턴이라고 하면 보통 객체지향 프로그래밍에서 등장하는 키워드입니다. 디자인 패턴은 객체지향 프로그래밍에 관한 설계를 할 때 자주 발생할만한 문제들을 피하기 위해 만들어두는 패턴이라고 정의할 수 있습니다. 이러한 디자인 패턴의 종류는 세가지의 타입으로 나눕니다. 생..
Java : 제네릭, 컬렉션(ArrayList, LinkedList, HashMap, TreeMap) 안녕하세요! 이번 포스팅이 아마도 자바 프로그래밍 입문 마지막 포스팅이지 않을까 싶습니다. 열흘동안 달려오면서 어려운 개념이 한두개가 아니었는데 그래도 벨로그를 통해 조금씩 정리해가면서 이해가 되어가고 있는 것 같습니다. 이번 포스팅에서 다룰 내용은 Generic, ArrayList, HashMap에 관한 것입니다. 본격적인 내용을 살펴보기 이전에 이전 포스팅에서 정리했던 내용을 잠깐 살펴보겠습니다. 이전 포스팅 복습 추상 클래스 Abstract Class 추상 클래스는 일반적인 클래스와 다르게 내부에 추상 메서드를 가졌습니다. 추상 메서드라 하는 것은 처리를 다루는 내용이 없고 매개변수가 return 값, 즉 prototype만 선언된 메서드가 들어오는 것입니다. 추상 메서드의 형식은 일반적인 메서드의..
Java : 추상클래스, 인터페이스, 정적변수와 상수 안녕하세요! 자바 프로그래밍 입문 아홉번째입니다~ 다음 포스팅까지 해서 자바 입문 단계를 마치고 그 다음에는 DB관련 포스팅을 올리려고 합니다. 아마 메인은 Oracle DB가 될것같고, 자바와 연계해서 어떻게 사용하는지 다룰 것으로 예상합니다. 자, 그러면 오늘 살펴볼 내용은 객체 지향 프로그래밍의 특징인 Abstract(추상화), 인터페이스에 대해 정리해보고 변수의 종류에 대해 알아보도록 하겠습니다! 그러면 늘 하던것처럼 이전 포스팅 내용 간단하게 살펴보고 가겠습니다! 이전 포스팅 복습 이전 포스팅에서 객체 지향 프로그래밍의 특징 중 하나인 상속이라는 개념에 대해 다뤘습니다. 상속이라는 것은 자식 클래스가 부모 클래스의 특성들을 물려 받아서 사용하는 개념이었죠. 자식 클래스를 부모 클래스에 exten..