본문 바로가기
  • _^**_

무근본 IT 지식 공유/무근본 자바(JAVA)16

[무근본자바] 리눅스 특정 경로와 다른 경로에 있는 파일의 사이즈가 동일한지 파악하는 쉘/자바프로그램 만들어보기 ex) 경로는 root 경로에 포함된 숫자만 하나 다름 * 경로 예시 1)/run/dep/xxx.png 2)/run2/dep/xxx.png -조건: png는 여러개파일이 있으며 상위 폴더는 세자리의 코드로 계속 바뀜(세자리인지 검증 필요) 코드값으로 이루어진 디렉터리 역시 shbrun 하위에 여러개가 있음 파일 사이즈 비교 작업을 쉘 스크립트로 수행하는 것은 효율적이며 직관적인 접근 방식입니다. 하지만, 자바로도 이 작업을 수행할 수 있습니다. 여기에 두 방식을 모두 제공하겠습니다. 쉘 스크립트 방식1. 경로 검증 상위 폴더 이름이 세 자리 코드인지 확인합니다.2. 파일 사이즈 비교지정된 두 경로 내의 파일들의 사이즈를 비교합니다. 쉘 스크립트 예시: #!/bin/bash # 경로1 및 경로2의 기본 구.. 2024. 3. 2.
[무근본자바] java 소스의 흐름을 분석하는 툴 만들기 Java 소스 코드의 함수 호출 흐름 분석 도구를 직접 프로그래밍하여 만드는 것은 가능합니다. 이를 위한 프로젝트는 도전적일 수 있지만, 여러분의 IT 개발 경험을 바탕으로 접근하면 성공적으로 구현할 수 있을 것입니다. 다음은 이러한 도구를 개발하기 위한 단계를 제안합니다: 1. 요구 사항 정의- 분석하고자 하는 특정 함수 호출 흐름의 범위와 세부 사항을 명확히 합니다. - 출력 형식을 결정합니다 (예: 텍스트 기반 보고서, 그래픽 다이어그램 등). 2. 파싱 도구 선택- Java 소스 코드를 분석하기 위해, Abstract Syntax Tree (AST)를 생성할 수 있는 파싱 라이브러리를 선택합니다. 예를 들어, Eclipse JDT (Java Development Tools), ANTLR (Anot.. 2024. 3. 2.
[무근본자바] Elk 스택에(엘라스틱서치) 쌓인 로그활용해서 내용 분석하기- 자바 코드 분석하고자 하는 로그 데이터를 처리하기 위해 Java를 사용하여 ELK 스택(Elasticsearch, Logstash, Kibana) 내의 Elasticsearch에 저장된 데이터를 쿼리하고 분석하는 과정은 다음 단계로 구성됩니다. Elasticsearch의 Java High Level REST Client를 활용할 것입니다. 이 클라이언트는 Elasticsearch와 통신하기 위한 자바 클라이언트 중 하나로, Elasticsearch 7.x 버전부터 권장됩니다. 1. 의존성 추가 Maven 또는 Gradle 프로젝트에 Elasticsearch High Level REST Client 관련 의존성을 추가합니다. 다음은 Maven을 사용하는 경우의 예시입니다. org.elasticsearch.client.. 2024. 3. 2.
자바 생성자 규칙 - 상속 시 Super() 위치 [질문사항] package myClass; class Parent2{ int a; Parent2(){ //기본생성자 안쓰면 자동생성 a = 10; } Parent2(int n){ a = n; } } class Child2 extends Parent2{ int b; Child2() { b=20; super(40); //이 부분입니다. } public void display() { System.out.println(a); System.out.println(b); } } public class Inheritance02 { public static void main(String[] args) { Child2 ch = new Child2(); ch.display(); } } 궁금한점이 class Child2 ex.. 2023. 11. 25.
‘Call by Value’와 ‘Call by Reference’에 대하여 -왕초보도 이해하는 자바 우리 오늘의 주제로 떠오른 ‘Call by Value’와 ‘Call by Reference’에 대하여 깊게 파헤쳐 보겠습니다. 이 두 가지 방법은 프로그래밍 세계에서 자주 마주치게 되는 개념입니다. 이야기의 깊은 물결에 몸을 맡기기 전, 먼저 간단한 예를 들어봅시다. 당신이 친구에게 꽃다발을 선물한다고 생각해 보세요. 이 꽃다발을 직접 주는 경우와, 꽃다발의 사진을 보내는 경우, 두 가지 상황을 상상해보시기 바랍니다. 첫 번째 상황이 ‘Call by Reference’와 유사하며, 두 번째 상황은 ‘Call by Value’와 닮아 있습니다. 자, 이제부터 저희의 여행이 시작됩니다. ‘Call by Value’는 값에 의한 호출 방식으로, 함수에 값을 넘겨줄 때 메모리상의 값을 복사하여 전달합니다. 따라.. 2023. 9. 16.
프로그래밍에서 추상화가 대체 뭐야?-왕초보도 이해하는 자바 프로그래밍에서 “추상화”라는 말씀을 들어보셨나요? 이는 복잡한 문제나 시스템을 단순하게 만드는 방법을 의미합니다. 프로그래머분들께서는 이런 추상화를 통해 핵심 기능에만 집중하실 수 있죠. 이것을 예를 들어 설명드리자면, 건축가가 건물을 설계할 때 각 층의 세부 사항은 생각하지 않고 전체적인 구조만을 그릴 때와 비슷한 원리입니다. 추상화는 프로그래밍에서도 여러 형태로 표현되곤 합니다. 함수나 메소드를 통해 특정 작업을 감추거나, 클래스와 객체로 데이터와 기능을 함께 묶는 것도 그 예시 중 하나입니다. 이렇게 만들어진 코드는 다시 사용하기도, 수정하기도 편리하답니다. 일상생활에서도 추상화의 예를 찾아볼 수 있습니다. 전기 스위치를 누를 때, 그 안의 복잡한 원리나 회로를 모르고도 사용할 수 있는 이유, 그것.. 2023. 9. 16.
오버로딩, 오버라이딩 차이가 대체 뭔데?-왕초보도 이해하는 자바 자, 여러분! 오늘 우리가 함께 다뤄볼 주제는 바로 프로그래밍에서 자주 마주치게 되는 두 가지 중요한 개념, '오버로딩'과 '오버라이딩'입니다. 이 두 개념, 들어보셨나요? 혹시 두 개념을 혼동하신 적 있으신가요? 그렇다면 지금부터 함께 천천히 그 차이를 파헤쳐 보겠습니다. 먼저, 오버로딩에 대해서 얘기해보죠. 오버로딩이란, 한 마디로 말해서 같은 이름의 함수나 메소드를 여러 개 만드는 것입니다. 그런데 이때 중요한 건, 그 안의 매개변수의 종류나 수가 다르다는 것이죠. “아, 그럼 같은 이름으로 다양한 일을 할 수 있겠네!”라고 생각하시는 분들, 바로 그렇습니다! 오버로딩의 핵심은 바로 ‘다양성’입니다. 마치 우리가 평소에 ‘읽다’라는 동사를 사용할 때 ‘책을 읽다’, ‘편지를 읽다’처럼 상황에 따라 .. 2023. 9. 16.
가비지 컬렉터가 대체 뭐야?-왕초보도 이해하는 프로그래밍 가비지 콜렉터에 대해 이야기를 시작하려 합니다. 너무나도 평범하게 쓰이는 용어지만, 무엇인지 자세히 알아본 적이 있는지요? 지금부터 그 세계를 함께 들여다보겠습니다. 본론에 들어가기 앞서, 컴퓨터 메모리라는 장소에 대해 생각해 보죠. 우리가 프로그램을 실행하면, 그 프로그램은 메모리에 데이터를 저장합니다. 그 데이터는 프로그램이 작동하는 동안 지속되죠. 그런데, 생각해 보면 필요 없어진 데이터도 분명히 있을 겁니다. 그렇다면 그 필요 없어진 데이터는 어떻게 되는 걸까요? 그래서 등장하는 게 바로 ‘가비지 콜렉터’입니다. 그 이름에서 느껴지는 것처럼, 필요 없어진 ‘가비지’ 즉, 쓰레기 데이터를 ‘콜렉트’하는 역할을 하는 것이죠. 정확히 말하면, 더 이상 사용되지 않는 메모리를 회수하여 다시 사용 가능한 .. 2023. 9. 16.
[무근본자바(JAVA)] OOP의 다섯가지 설계 원칙이 뭔데? 쉽게 설명해줄게 OOP의 5가지 설계 원칙은 "SOLID"라는 약어로 알려져 있습니다. SOLID 원칙은 객체 지향 프로그래밍과 설계에 있어서 효율적이고, 유지보수가 용이한, 확장성 있는 시스템을 만들기 위한 핵심 원칙들을 의미합니다. 각 원칙은 다음과 같습니다: 1. S - 단일 책임 원칙 (Single Responsibility Principle, SRP) - 한 클래스는 하나의 책임만 가져야 한다는 원칙입니다. 즉, 클래스가 변경되어야 하는 이유는 오직 하나뿐이어야 합니다. 이 원칙을 따르면, 각 클래스는 명확한 목적을 가지게 되어 코드의 유지보수가 용이해집니다. 2. O - 개방-폐쇄 원칙 (Open-Closed Principle, OCP) - 소프트웨어의 구성요소(클래스, 모듈, 함수 등)는 확장에는 열려 있어.. 2023. 8. 22.
[무근본 자바(JAVA)] OOP란? OOP가 뭔데? 쉽게 설명해줄게 ! 객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그래밍 패러다임 중 하나로, 현실 세계의 사물이나 개념을 객체로 표현하고, 이러한 객체들 간의 상호작용을 통해 프로그램을 구현하는 방법론입니다. OOP는 크게 네 가지 주요 개념으로 구성되어 있습니다: 캡슐화, 상속, 다형성, 그리고 추상화입니다. 1. 캡슐화(Encapsulation) - 캡슐화는 객체의 데이터와 그 데이터를 처리하는 함수를 하나로 묶는 것을 의미합니다. 이를 통해 객체의 내부 데이터는 외부에서 직접 접근할 수 없게 되며, 오직 객체가 제공하는 함수를 통해서만 접근이 가능하게 됩니다. 이렇게 함으로써 데이터의 무분별한 변경을 막을 수 있으며, 객체의 안정성을 높일 수 있습니다. 2. 상속(Inheri.. 2023. 8. 22.
[무근본 자바] restapi patch 요청 테스트 중 : java.lang.NoClassDefFoundError 해결 방안 [질문사항] 현재 restapi patch요청 테스트 중인데 java.lang.NoClassDefFoundError: org/apache/hc/client5/http/classic/HttpClient 이런 오류가 납니다. 구글에서 찾아봐도 안나와서 질문드립니다. 아래 테스트 코드입니다. class ArticleApiControllerTest { @LocalServerPort private int port; @Autowired private TestRestTemplate restTemplate; @Autowired private ArticleServiceImpl articleService; @Autowired private ArticleRepository articleRepository; @Before p.. 2023. 4. 20.
[무근본 자바(Java) 공부] 자바에서 Map 자료구조는 언제 쓰일까? - 왕초보도 이해하는 자바 Java에서 Map은 key-value 쌍으로 데이터를 저장하는 자료구조입니다. Map은 매우 유용하게 사용되며, 특히 데이터를 빠르게 검색할 수 있습니다. 다음과 같은 상황에서 Map을 사용할 수 있습니다. 학생들의 성적 정보를 저장하는 경우 학생의 이름을 key로 사용하고, 해당 학생의 성적을 value로 사용하여 Map에 저장할 수 있습니다. 이렇게 하면 이름으로 쉽게 학생의 성적을 찾을 수 있습니다. 지역별 날씨 정보를 저장하는 경우 각 지역을 key로 사용하고, 해당 지역의 날씨 정보를 value로 사용하여 Map에 저장할 수 있습니다. 이렇게 하면 지역별로 쉽게 날씨 정보를 찾을 수 있습니다. 주문 정보를 저장하는 경우 각 주문 번호를 key로 사용하고, 해당 주문의 상세 정보를 value로 .. 2023. 3. 26.
[무근본 자바(Java) 공부] Gradle이 대체 뭐야? - 왕초보도 이해하는 자바 Gradle은 자바 프로그래밍 언어를 위한 오픈 소스 빌드 자동화 도구입니다. Gradle은 Apache Maven 및 Apache Ant와 같은 다른 빌드 도구와 비교할 때, 선언적 DSL(Domain-Specific Language)로 작성된 Groovy 또는 Kotlin 스크립트를 사용하여 빌드 프로세스를 정의합니다. Gradle은 다양한 프로젝트 유형 및 다양한 통합 개발 환경에서 사용할 수 있습니다. 또한, Gradle은 빌드 캐시, 병렬 빌드, 그리고 빌드 캐시를 이용한 효율적인 빌드 등의 기능을 제공합니다. Gradle은 Android 앱 개발에도 널리 사용되며, 이를 통해 Android Studio 및 다른 Android 개발 도구에서 쉽게 사용할 수 있습니다. Gradle을 사용하여 Ja.. 2023. 3. 26.
[무근본 자바(Java) 공부] 메이븐(Maven)이 대체 뭐야? - 왕초보도 이해하는 자바 프로그래밍 기초상식 Maven은 자바 기반의 프로젝트 관리 도구입니다. 프로젝트 개발, 빌드, 테스트, 배포 등을 편리하게 처리할 수 있도록 도와줍니다. Maven은 프로젝트의 의존성 관리를 위해 중앙 저장소에서 필요한 라이브러리를 다운로드하고 관리할 수 있습니다. 이를 통해 프로젝트에서 사용되는 라이브러리의 버전 충돌 문제를 예방할 수 있습니다. 또한 Maven은 프로젝트의 빌드를 자동화하여 개발자가 수동으로 빌드하는 수고를 덜어줍니다. Maven은 프로젝트의 빌드 순서를 정의하고 필요한 플러그인을 실행하여 빌드 과정을 자동화합니다. 이를 통해 빌드 시간을 단축하고 빌드 오류를 예방할 수 있습니다. 예를 들어, Maven을 사용하여 Spring Framework 기반의 웹 애플리케이션을 개발하는 경우, Maven은 Spr.. 2023. 3. 26.
[무근본 자바(Java) 공부] 의존성 주입은 도대체 왜 필요한가? 의존성 주입(Dependency Injection)은 객체 지향 프로그래밍에서 사용되는 설계 원칙 중 하나로, 객체 간의 결합도를 낮추고 유연성과 재사용성을 높이기 위해 사용됩니다. 객체 간의 결합도는 하나의 객체가 다른 객체에 직접 의존하게 되어 있는 정도를 나타내며, 높은 결합도는 객체의 변경이 다른 객체에 영향을 미치고, 유지보수와 테스트가 어려워지는 원인이 됩니다. 1) 의존성 주입을 사용하면, 의존하는 객체를 외부에서 생성하여 주입하게 되므로, 객체 간의 결합도를 낮출 수 있습니다. 이를 통해, 다른 객체에 영향을 미치지 않고 객체의 변경이 가능해지며, 유연성과 재사용성이 높아집니다. 2) 의존성을 주입하는 방식으로 인해 단위 테스트를 수행할 때도 테스트용 객체를 주입하여 쉽게 테스트할 수 있습.. 2023. 3. 26.
[무근본 자바(JAVA) 공부 : 프로그래밍] 의존성 주입 코드를 통한 간단한 예시 의존성 주입(Dependency Injection)은 객체 지향 프로그래밍에서 사용되는 설계 원칙 중 하나로, 한 객체가 다른 객체를 생성하거나 사용할 때 직접적으로 의존성을 가지는 것이 아니라, 의존하는 객체를 외부에서 생성하여 주입하는 방식을 말합니다. 이를 통해 객체 간의 결합도를 낮추고 유연성과 재사용성을 높일 수 있습니다. 아래는 Java로 작성된 예시 코드입니다. 우선, 의존성을 주입받을 인터페이스를 정의합니다. public interface MessageService { void sendMessage(String message, String recipient); } 그리고, 해당 인터페이스를 구현하는 클래스를 작성합니다. public class EmailService implements Me.. 2023. 3. 25.