본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ

IT기술/JAVA71

[Java] Stream filter 예시 filter는 자주 사용하는 기능 중 하나입니다. 간단한 예시를 통해 이해해봅시다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 // Stream Filter 필터 예제 public class FilterEx { public static void main(String[] args) { List names = Arrays.asList("가가", "나나", "다다", "나나", "라라"); names.stream() .filter(n -> n.startsWith("가")) .forEach(n -> System.out.println(n)); // 가로 시작된것만 가져오기 System.out.println("-----"); na.. 2024. 2. 26.
[JAVA] 객체지향 설계 5원칙 SOLID 원칙 객체지향을 기반으로 개발하는데 있어 좋은 객체지향을 설계하기 위한 원칙이 있습니다. 개발자들이 좋은 객체지향 방식으로 설계되었다고 판단할 수 있는 원칙인데, 이 원칙 없이도 설계할 수 는 있으나, 객체 지향 원칙을 벗어나다보니 이후 유지보수나 리펙토링을 할 때 의견의 차이가 생길 수 있을 것 같습니다. 그러므로 설계할 때 약속된 원칙을 참고해서 설계하면 좋을 것 같아 정의 된 원칙 5개를 정리해보려 합니다. - 좋은 객체지향 설계5원칙(SOLID) • SRP: 단일 책임 원칙(Single Responsibility Principle) • OCP: 개방-폐쇄 원칙 (Open/closed principle) • LSP: 리스코프 치환 원칙 (Liskov substitution principle) • ISP:.. 2024. 2. 8.
[java] assert 개발 테스트 에서 조건 걸기 Java에서 버그 또는 예상치 못한 상황을 검출하고 적절히 대응하기 위해 사용하는 방법이 있습니다. 주로 exception을 사용할 수 있으며, 특정한 경우 예외를 던져 경우에 대비하고 프로그램이 멈추지 않게 합니다. 다만 특정한 경우에 대비하기 위해 exception을 여러개 배치하기도 합니다. - 주로 Exception은 try catch로 묶어서 사용하거나 throws로 에러를 던지기도 합니다. 또다른 방법으로는 switch나 if else 에 조건을 여러개 넣어가며 검증하는 방법도 있겠습니다. 실제로 들어오는 데이터의 검증이 필요하다면 이를 통해 필터링 할 수도 있습니다. - 유용한 방법이긴 하나, 코드가 상당히 길어져 가독성이 떨어질 수 있습니다. 그러다가 assert 라는 것을 알았는데, jd.. 2024. 2. 3.
[Java] string 시작문자로 시작되는지, 끝문자로 끝나는지 확인하기 체크하기 자바에서 시작문자로 시작되는 경우를 체크하거나 끝문자로 끝나는 경우를 확인해야 하는 경우가 생겼습니다. 아래 예시처럼 무한반복 루프에서 탈출하기 위한 조건으로 특정 문자로 시작하거나(quit) 특정 문자로 끝날 때(mon) 반복을 종료시키는 소스를 만들었습니다. 유용하게 사용가능한 String method인 String.startsWith() String.endsWith() 를 사용할 수 있습니다.(아래 예제에서 .equals("quit\n") 해도 될거같긴 합니다.) public static void main(String[] args) throws Exception { InputStream is = System.in; Reader reader = new InputStreamReader(is); int .. 2024. 1. 24.
[Java] null 에 대한 검증, 처리방법 문자열에 대해 복습하면서, null에 대해 한번쯤 정리를 해보고 싶었습니다. 예전에 만들어 둔 소스들을 프로젝트에만 저장해서 뒀는데, 블로그에 한번 공유하는 것도 좋을 것 같았습니다. null이라는 형식은 아무것도 없는 것을 의미합니다. 이는 빈값을 참조하는 것과 다른 의미로, 참조하는 것이 없다는 의미입니다. 그렇다고 해서 초기화 하지 않은 int a; 이런게 null이라는 것은 아닙니다. null이라는 형식이 존재하며, 이것 자체로 아무것도 없는 것을 의미합니다. 중요한 것은 기본형 변수나 참조 변수가 null로 들어갔을 때, 특정 메소드 처리중에 런타임 에러를 발생시키는 것입니다. 이는 컴파일러로 걸러지는 부분이 아니어서 테스트를 통해 검증하지 않으면, 문제가 발생할 확률이 높습니다. 그래서 nul.. 2024. 1. 14.
[Java] 자바에서 싱글톤 패턴 이해하기 싱글톤 패턴이란 클래스의 인스턴스를 하나만 생성하여 사용하는 패턴이입니다. 주로 1개의 인스턴스를 여러곳에서 공유해야 할 때 사용합니다. 싱글톤 패턴을 이용함으로써 메모리에 인스턴스 하나를 등록해 여러 쓰레드에서 동시에 하나의 객체를 이용할 수 있게 합니다. 하나만 있어도 잘돌아가는 것이 어떤게 있을까요? 로그기록용 객체, 사용자 설정 객체, 커넥션 풀 객체 같은게 있을 것 같습니다. 객체가 2개 이상이면 프로그램이 이상하게 돌아가거나 자원을 불필요하게 잡아먹을 수 있습니다.. 큰 특징으로, 생성자가 private으로 설정되어, 내부 getInstance() 로 호출할때 객체가 빈값일 경우에만 생성되도록 합니다. getInstance() 정적 메소드(static methods) 객체를 생성하게 되면 그 .. 2024. 1. 13.
[Java] Optional 소개 자바의 Optional은 Java 8에서 소개된 클래스로, 값이 존재하지 않을 수 있는 상황에서 사용됩니다. 이 클래스는 null을 피하기 위한 강력한 도구로서, 코드에서 명시적으로 값이 없음을 나타내거나 다룰 때 사용됩니다. Optional 클래스는 제네릭을 사용하여 어떤 타입의 객체도 감싸서 담을 수 있습니다.. Optional 객체는 값이 존재할 수도 있고, 없을 수도 있습니다. 때문에, NullPointerException 예외를 방지할 수 있고, 코드의 안정성을 높이며 가독성을 향상시킵니다. Optional은 다음과 같은 주요 특징을 가지고 있습니다: Null 방지: Optional은 값이 없는 경우 null을 사용하는 것 대신 사용됩니다. 이로써 NullPointerException을 방지할 .. 2024. 1. 13.
[Java] Java jks 만들기 예전에 자바 프로젝트를 수행하면서 jks 파일을 이용한 적이 있습니다. java Keystore 의 파일로써 다양한 파일을 지원합니다. (JKS, JCEKS, BKS ....) 암호화 시킬 ssl인증서를 담아서 jks로 만들고, java 프로젝트를 실행하는데 jks파일을 참조하여 사용하는 식으로 운영했었습니다. jks 파일을 만들고 관리하는 방법은 크게 2가지가 있습니다. 별도로 spring boot에서 설정해서 사용할수도 있지만, 저는 jks 파일을 만들고 직접 수정하는 부분에 대해 기록해보려 합니다. 방법으로 크게 두가지가 있습니다. 1. portecle 프로그램 사용 2. openssl 사용 1. portecle 프로그램 사용 Portecle은 keystore를 관리해주는 자바로 만들어진 GUI 프.. 2024. 1. 10.
[java] Stream 이해하기 스트림(Stream) 에 대한 간단한 이해가 필요합니다. Stream을 이용해서 반복문을 최소화 시키거나,여러 작업을 위한 데이터를 만들고, 검증할때 유용하게 사용할 수 있습니다. 반드시 알아야 하는 개념으로 정리 해보려 합니다. 참고자료가 있나 싶어 찾아봤더니 점프투자바에서는 다음처럼 나왔습니다. "스트림(stream)은 글자 그대로 해석하면 ‘흐름’이라는 뜻이다. 데이터가 물결처럼 흘러가면서 필터링 과정을 통해 여러 번 변경되어 반환되기 때문에 이러한 이름을 갖게 되었다." https://wikidocs.net/157858 07-06 함수형 프로그래밍 자바는 Java 8 버전부터 함수형 프로그래밍을 지원하기 위해 **람다(lambda)**와 **스트림(stream)**이 도입되었다. 람다와 스트림을 .. 2024. 1. 9.
자바 정규표현식 기술 정리 https://adjh54.tistory.com/104#1.%20%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D%20%ED%8C%A8%ED%84%B4(Regular%20Expression%20Pattern)-1 [Java] 정규표현식(RegExp) 이해하기 : 패턴, 문자 클래스, 자주 사용 패턴 해당 글의 목적은 주요 정규식 조작함수를 이해하고 예제를 통한 이해를 돕기 위해 작성한 글입니다. 해당 글에서는 모든 함수에 대해서는 포함하고 있지 않으며 자주 사용되는 함수 위주로 작 adjh54.tistory.com 너무 정리가 잘된 블로그가있어 공유해본다. 2024. 1. 4.
[Java] HashMap Hashtable 차이점, 구분하기 1. Hash란? 해시(Hash)란 단방향 암호화 기법인 해시함수(HashFunction)을 이용하여 생성된 고정된 길이의 비트열을 의미합니다. Hash function, 해시 함수 (짧게는 해시 라고도 부름)는 임의의 길이를 갖는 임의의 데이터를 고정된 길이의 데이터로 매핑하는 단방향 함수를 의미합니다. 다른말로 표현하자면, 아무리 큰 숫자를 넣더라도 정해진 크기의 숫자가 나오는 함수입니다. 예를 들면 어떤 숫자를 10으로 나누었을 때 그 나머지를 구하는 함수도 해시 함수입니다. (나머지가 0~9 까지 한자리의 크기로 출력되기 때문) 이러한 해시 함수를 적용하여 나온 고정된 길이의 값을 해시값, 해시 코드, 해시섬(sum) 등으로 부릅니다. 해시 함수는 보통 입력의 범위(정의역)보다 출력값의 범위(치역.. 2023. 12. 30.
[java] jar빌드 및 실행(Gradle) JAR (Java Archive) 형식으로 자바 프로젝트, 또는 스프링 부트 프로젝트를 만들었을 때 실행하기 위한 jar 파일로 빌드해야 하는 경우가 있습니다. 크게 두가지 방법이 있습니다. 1-1. IDE 프로그램(intellij나)를 통해서 jar로 만드는 방법 1-2. IDE 프로그램(intellij나)를 통해서 jar로 만드는 방법 2. Command로 jar로 만드는 방법(별도 빌드도구가 설치되어 환경변수로 참조 할 수 있도록 등록되어 있어야합니다.) 3. jar 실행(리눅스나 윈도우에서 jar을 실행합니다. spring boot일 경우 tomcat이 내장되어 있어 설정된 포트로 실행 후 확인이 용이합니다.) 1-1 intelliJ IntelliJ IDE 를 사용할 경우 우측 Gradle 항목을.. 2023. 12. 26.