반응형 java15 [Gradle] Gradle - Task개념 및 jar 생성 후 복사하기(.feat Copy) Gradle은 Maven과 함께 많이 사용되는 빌드툴입니다. Task를 Custom하여 jar파일 생성 후 해당 파일을 원하는 경로에 복사하는 것까지 진행해보겠습니다. Task란? 빌드로 수행되는 하나의 독립적인 유닛으로, compile, jar생성, javadoc생성, publish모두 Task의 일종입니다. → build script나, plugin으로부터 Task를 가져올 수 있습니다. 아래는 java라는 플러그인을 호출하면, java와 관련된 task를 활용할 수 있습니다. plugins { id 'java' } 현재 활용 가능한 task는 터미널에서 ./gradlew tasks로 확인할 수 있습니다. // gradlew파일이 있는 위치에서 ./gradlew tasks Build tasks ---.. Gradle 2024. 1. 31. [Java] Thread - 바쁜 대기, Method이해하기, 주기적 실행 권한을 얻을 때까지 확인한다. Busy Waiting 주기적인 실행, 특정 시간 이후 실행 등의 작업을 하고 싶을 때는 Timer, TimerTask 같은 클래스를 활용도 고려해보자~ (java.util 에서 제공한다.) 동기화 문제와 바쁜 대기를 해결하여 구현되어 있다. 최근 Web으로 interactive하게 편집할 수 있는 편집기를 프로젝트로 진행하고 있다. 미리캔버스, Figma 등과 같은 느낌이라고 보면 될 것이다. 편집기에는 임시저장이 필수인데, 이를 구현하다보니 while을 사용한 무한루프로 특정 시간(10분)이 지날때마다 임시저장을 하도록 구현했다. Thread threadA = new Thread(()->{ while(flag){ if(LocalDateTime.now().getSecond.. 개념 2023. 10. 20. [Java] 소스코드 탐험 - 2. ArrayList(feat. AbstractList) 두번째로 볼 친구는 Iterator에 이은 ArrayList ArrayList를 살펴보니 상당하다. AbstractList를 상속하고 있으며, List, RandomAccess, Cloneable, Serializable을 구현하고 있다. public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable 먼저 여기서 살펴볼건 1. ArrayList가 가변크기를 어떻게 유지하는지? 2. 어떻게 동시 수정을 판단하는지. private static final int DEFAULT_CAPACITY = 10; transient Object[] elementData; * transient :.. Java 2023. 7. 23. [Java] 소스코드 탐험- Iterator 처음으로 살펴볼 소스코드는 Iterator. 주로 List, Set등 Collection 프레임 워크에서 특정 객체를 삭제하고 싶을 때 사용했었다. 자바 1.8부터 지원하는 removeif라는 method를 통해서 쉽게 없앨 수 있는데... 있는줄도 모르고 Iterator를 사용했었다. 쨋든 Iterator ㄱ.ㄱ public interface Iterator { boolean hasNext(); //원소가 더 있으면 true E next(); // 다음 원소 return, 원소가 더 없으면 NoSuchElementException 리턴 /** * The behavior of an iterator is unspecified if the underlying collection * is modified wh.. Java 2023. 7. 23. [Java] List정렬(sort)/ Collections.sort, List.sort 1. Collections.sort public static void sort(List list) public static void sort(List list, Comparator Java 2023. 2. 11. [Java] 스트림 - Stream : 효율적인 데이터 다루기! 문제점 합계, 평균 등 데이터를 집계할 때, for 또는 Iterator를 활용해서 코드를 작성해왔다. 이러한 코드는 가독성이 떨어지고 번거롭다...(매우...같은 코드 짜다보면 너무 답답..) 또한, 데이터 소스마다 다른 방식으로 다뤄야 한다. 이러한 문제점!을 해결하기 위해 등장한 것이 Stream이다. → 데이터 소스마다 같은 방식으로 다룰 수 있도록 데이터를 추상화하고, 자주 사용되는 메서드를 정의해 놓았다. sum, average, min, max 등등 특징 : SQL의 쿼리 같은 느낌 - 스트림은 데이터 소스를 변경하지 않는다. abc.stream().~~~해도 abc라는 데이터 소스는 아무런 영향을 받지 않는다. stream은 읽기만 하는 것이다. - 스트림은 일회용이다. stream을 생성.. Java 2022. 9. 18. [Java] 람다식 - Lambda Expression Thread에서 Runnable을 접하면서 lambda식 형태를 처음 봤었다. 이후 안드로이드 UI, 파이썬 등을 하면서 종종 봤었는데, 사용하는 방법만 알고 넘어왔기 때문에 이번 글을 통해 정리를 하려한다. 람다식의 도입 람다식의 도입으로, 자바는 객체지향언어인 동시에 함수형 언어가 되었다. 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지기 때문에, 람다식을 익명함수라고도 한다. 함수형 인터페이스 자바에서 모든 메서드는 클래스에 포함되어야 한다. 람다식은 익명 클래스의 객체라 보면 된다. 람다식은 어떻게 불러와서 사용할 수 있을까? 타입이 있어야 하지 않을까? 그 타입을 함수형 인터페이스라 보면 편하다.(조금 더 내리면 좀 더 자세한 설명 있음) public interface MyFunct.. Java 2022. 8. 29. [Java] BigDecimal - Java에서 정밀한 숫자 표현하기 문제점 : Java 언어에서는 숫자를 표현하기 위해 int, long, double, float 등의 기본형을 사용한다. 이러한 기본형 중에 가장 많이 사용 되는 float, double형은 우리가 원하지 않는 결과를 보여주기도 한다. double a = 10.0000001; double b = 7.00010000; System.out.println(a + b); --> 결과 : 17.000100099999997 double과 float의 특징 이진 부동 소수점 연산에 사용되며, 넓은 범위의 수를 빠르게 정밀한 근사치를 구할 수 있도록 설계 되었다. 그 말인 즉, 정밀한 계산과는 맞지 않는다. 이는 이진수를 통해서 0.1과 10의 음의 거듭제곱수를 표현할 수 없기 때문에 발생한다. 10진수로 0.1은 2.. Java 2022. 8. 24. [Java] 문자열 split 할 때 마침표(.) : split(".") → split("//.") split()함수는 인자로, regex 정규식을 받는다. (이걸 몰랐네 ㄷ..ㄷ) "."은 정규식에서 아래와 같은 의미를 가지기 때문에 split에서 사용 시 원하는 결과를 얻을 수 없다. . matches any character (except for line terminators) 어떤 문자와도 매칭이 된다.(라인 터미네이터 빼고) 아래와 같이 프린트를 해보면 아무런 결과도 출력되지 않는다. t는 길이가 0 인 String 배열인 셈. public static void main(String[] args) { String path = "A.B.C"; String[] t = path.split("."); for (String a : t) { System.out.println(a); } } 포인트 : "... Java 2022. 8. 2. [Java] 폴더 생성 - File mkdir()/ mkdirs() 안녕하세요. 펄이라고 합니다. 원하는 폴더에 파일을 생성하는 기능을 구현하는 도중, 폴더 경로가 없을 경우에는 파일이 생성되지 않는 다는 것을 알게되었습니다. 이런 상황에서는 미리 폴더를 생성해야 하는데, mkdir을 쓰니 폴더가 생성되지 않았습니다. 상위 폴더가 있을 경우 폴더 생성 - mkdir() mkdir()은 상위 폴더가 있는 경우에만 폴더 생성이 가능합니다. 예를 들어 C:₩users₩a₩b폴더 생성을 원하는 경우 C:₩users₩a폴더가 이미 생성되어 있어야 합니다. import java.io.File; public class testMain { public static void main(String[] args) { File f = new File("C:\\test\\test"); // 생.. Java 2022. 6. 14. [Java 객체 지향 디자인 패턴] 10. 데커레이터 패턴 - 여러 기능의 조합 상속을 통한 기능의 확장은 각 기능별로 클래스를 추가해야 한다는 단점이 있다. -> 각 추가 기능 별로 개별적인 클래스를 설계하고 기능을 조합할 때 각 클래스의 객체 조합을 이용하여 기능의 확장을 하도록 한다. 정의 데커레이터 패턴은 기본 기능에 추가할 수 있는 기능의 종류가 많은 경우게 각 추가 기능을 Decorator 클래스로 정의한 후 필요한 Decorator 객체를 조합함으로써 추가 기능의 조합을 설계하는 방식이다. 데커레이터 패턴은 기본 기능에 추가할 수 있는 많은 종류의 부가 기능에서 파생되는 다양한 조합을 동적으로 구현할 수 있는 패턴이다. 여기서 핵심은 컴포지션 관계에 있다. 주로 생성자를 통해서 component를 이어 받는데, 이를 통해서 기본 객체에 살을 덧붙여 갈 수 있다. - Co.. Java/Java 객체지향 디자인 패턴 2022. 5. 10. [Java 객체 지향 디자인 패턴] 3. SOLID 원칙(SRP, OCP, LSP, DIP, ISP) 3.1 SRP - Single Responsibility Principle : 단일 책임 원칙 객체는 단 하나의 책임만 가져야 한다. 책임이란( = 해야하는것, = 할 수 있는 것, = 해야 하는 것을 잘 할 수 있는 것) 핵심적인 책임만 수행하도록 하는 것이 SRP를 따르는 설계이다. 책임의 변경 : 코드는 변경되기 마련이다. 한 클래스의 역할이 많아지게 되면 서로 얽히고 설켜서 일부를 수정하기 위해서 전부를 뜯어고쳐야하는 경우가 발생할 수 있다. 이를 대비하여 책임을 분리시켜주어야 한다. ※ 회귀(regression) 테스트 : 어떤 변화가 있을 때 해당 변화가 시스템의 기능에 영향을 주는지 평가하는 테스트. 산탄총 수술 - AOP 하나의 책임이 여러 클래스에 분산된 경우. 대표적인 예로 로깅, 보안.. Java/Java 객체지향 디자인 패턴 2022. 2. 8. 이전 1 2 다음 반응형