본문 바로가기

IT개발/Java12

[Java] 기본 디자인 패턴 전략 패턴 알고리즘(전략)을 캡슐화하여 상황에 따라 언제든지 교체 가능하게 하는 패턴.1. 유연하게 언제든지 교체 가능2. 결합도 감소(사용하는 코드와 실제 코드가 분리) 옵저버 패턴 한 객체의 상태가 변화가 되면 이를 의존하는 다른객체들에게 통보하는 전략 패턴.(1:N 의존관계)1. 느슨한 결합(주제와 관찰자는 서로 잘 몰라도 됨)2. 이벤트 기반(상태 변경에 따른 자동 업데이트 편함) 데코레이터 패턴 기존의 객체의 코드를 수정하지 않고도 기능의 추가를 덮어씌우듯이 추가하는 전략 패턴(상속대신에 객체를 감싸서 기능을 확장)1. 유연한 기능 추가(필요한 기능만 골라 동적으로 조합가능)2. 기존 코드 보호(원래 코드를 건드리지 않고 기능 확장 가능) 팩토리 패턴 모든 객체 생성 로직을 별도의 공장 클래스로.. 2025. 10. 26.
[Java]내가 생각하는 중요한 객체 지향적 프로그래밍 설계 객체 지향 프로그래밍(OOP: Object Oriented Progamming) 현실에 존재하는 여러 요소, 부품들을 객체들로 먼저 만들고 이를 하나씩 조립해서 전체 프로그램을 만드는 기법으로 효율적인 코드 설계 및 작성에 최적화된 기법. Point. OOP의 4대 기초1. 캡슐화2. 다형성3. 추상화4. 상속 Point. OOP의 3개 원칙1. 바뀌는 부분은 캡슐화한다.2. 상속보다는 구성을 활용한다.3. 구현보다는 인터페이스에 맞춰서 프로그래밍한다. 들어가기 앞서서, 어쩌다 해당 4대 원칙이 나오게 되었는가?→ "상속(Inheritance)"은 상위 객체의 메서드를 기반으로 하위 객체에서 사용, 생성 가능하게 하는 기법인데 이는 하위 객체가 전부 같은 행동을 하는 것이 아니기에 문제가 되었지만, "오.. 2025. 9. 7.
[Java, OCJA] QUESTION 84, What is the result? import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Test { static int a1; public static void doProduct(Integer a){ a1 = a * a; } public static void doString(StringBuilder s) { s.append(" " + s); } public static void main(String[] args) { String [] arr = {"Hi", "How", "Are", "You"}; List arrList = new ArrayList(Arrays.asList(arr)); if (arrList.removeIf((String .. 2025. 1. 27.
[Java] 2차원 배열 1. 2차원 배열 선언과 초기화자바에서 2차원 배열을 선언하는 방법은 다음과 같습니다.1.1 배열 선언과 크기 지정int[][] arr = new int[3][4]; // 3행 4열 크기의 2차원 배열 선언 int[3][4]는 3개의 행과 4개의 열을 가진 2차원 배열을 선언합니다.각 요소는 기본값인 0으로 초기화됩니다.1.2 배열 선언과 값 초기화2차원 배열을 선언하면서 바로 값을 할당할 수 있습니다.int[][] arr = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };이 배열은 3행 3열이고 각 행에는 3개의 값이 들어 있습니다.이 방법은 배열 선언과 동시에 값을 넣을 수 있습니다.2. 2차원 배열 접근2차원 배열에 접근하는 방법은 인덱스를 두 번 사용하는 방식입니다. 첫 번째 .. 2025. 1. 23.
[Java]내가 생각하는 중요한 자바 용어 정리2 소프트웨어 소프트웨어는 컴퓨터 시스템에서 특정 작업을 수행하기 위해 작성된 프로그램, 데이터, 프로시저의 집합입니다. 운영체제(OS), 애플리케이션 소프트웨어, 데이터베이스 관리 시스템(DBMS) 등 다양한 유형이 있습니다. 소프트웨어는 사용자 요구에 따라 하드웨어를 제어하고, 프로세스를 자동화하여 작업을 효율적으로 수행합니다. 코딩 코딩은 프로그래밍 언어를 사용하여 컴퓨터가 실행할 명령어와 논리를 작성하는 과정입니다. 코딩은 다양한 언어(C, Python, Java 등)로 이루어지며, 논리적 사고와 문제 해결 능력을 요구합니다. 하드웨어 하드웨어는 컴퓨터 시스템을 구성하는 모든 물리적 장치와 부품을 의미합니다. CPU, 메모리, 하드 드라이브, 마더보드, 키보드, 모니터 등과 같은 요소들이 이에 해당됩.. 2024. 10. 29.
[Java] IOException 발생원인(eclipse) IOException은 자바에서 입출력 작업(Input/Output) 중 발생할 수 있는 예외를 처리하기 위해 사용됩니다. 이는 파일을 읽거나 쓸 때, 스트림을 다룰 때, 또는 네트워크 통신 같은 입출력 작업 중 예상치 못한 오류가 발생할 수 있는 상황을 포괄적으로 처리합니다. 왜 IOException이 발생할 수 있을까요?파일 읽기 도중에 문제가 발생 파일이 있는 경우에도 읽기 도중 하드웨어나 파일 시스템 문제, 권한 부족 등으로 인해 파일을 읽는 도중 오류가 발생할 수 있습니다.예를 들어, 읽기 도중 파일이 외부에서 삭제되거나 손상된 경우, IOException이 발생할 수 있습니다. 파일 스트림이 제대로 열리지 않거나 닫히지 않음 파일을 읽거나 쓸 때, 스트림을 열고 닫는 작업에서 문제가 생기면 I.. 2024. 9. 28.
[Java]내가 생각하는 중요한 자바 용어 정리 객체 지향 프로그래밍(OOP: Object Oriented Progamming)현실에 존재하는 여러 요소, 부품들을 객체들로 먼저 만들고 이를 하나씩 조립해서 전체 프로그램을 만드는 기법. OOP의 4대 원칙(캡슐화, 상속, 다형성, 추상화) 객체(Object)현실에 존재하는 여러 요소, 부품들을 객체. 컴파일 컴퓨터가 이해할 수 있는 0과 1로 이루어진 기계어로 변환하는 과정.. JVM(java virtual machine) 자바 프로그램의 "바이트 코드"들을 해석하고 실행할 수 있도록 해주는 "가상의 운영체제"1. 힙 영역 : 객체와 배열이 생성되는 곳.2. 메서드 영역 : 클래스들을 "클래스 로더"로 읽어 필드, 메서드, 생성자들을 저장. 3. 스택 영역 : "스레드"가 생성될 때마다 해당 영역을 .. 2024. 9. 28.
[Java] 배열 생성 + 입력 + 두 배열 합치기 - 콘솔 프로그램 Java 프로그래밍 언어는 강력하고 널리 사용되는 언어로, 배열을 효과적으로 다루는 방법을 아는 것은 필수적입니다. 배열은 데이터 구조 중 하나로, 같은 타입의 여러 데이터를 하나의 변수에 저장할 수 있는 편리한 방법을 제공합니다. 이번 글에서는 Java를 사용하여 배열을 생성하고 사용자로부터 입력을 받아 두 배열을 합치는 콘솔 프로그램을 구현하는 방법입니다. import java.util.*;import java.io.*;public class Main { public static void main(String[] args) throws IoException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); in.. 2024. 7. 15.
[Java] .jar 파일 분석하기 .jar 파일이란? .jar 파일은 "Java ARchive"의 약자로, Java로 작성된 프로그램 및 라이브러리를 배포하기 위한 파일 형식입니다..jar 파일은 ZIP 파일 형식으로 압축되어 있으며, Java 클래스 파일, 메타데이터 및 리소스 파일(예: 이미지, 텍스트 파일)을 포함할 수 있습니다..jar 파일의 구성 요소클래스 파일 : 컴파일된 Java 클래스 파일(.class)메타데이터 : 파일의 구조와 관련된 정보가 들어있는 META-INF 디렉토리리소스 파일 : 이미지, 텍스트, 속성 파일 등매니페스트 파일 : JAR 파일의 메타데이터를 포함하는 MANIFEST.MF 파일.jar 파일을 다운받으면?실행 가능 여부 확인: 매니페스트 파일에 Main-Class 항목이 있는지 여부에 따라 결정됩니다.. 2024. 6. 22.
[JAVA]다형성 구현(인터페이스) 객체들이 의존 관계에 놓일 때, 사용객체에서 대상 객체에 접근을 합니다. 그러면, 인터페이스 타입, 조상 클래스 타입으로 사용하여 간접 접근을 하여 수행되는 메서드는 이를 재정의, 재사용을 통해 "현재 객체 메서드"로 동적 바인딩 되어 수행됩니다. 이를 다형성 구현이라고 합니다. [ 아래 코드는 이해를 돕는 예시 코드입니다.] // 의존 관계에 있는 인터페이스의 예시 public interface Product { String getName(); double getPrice(); } // Product 인터페이스를 구현한 구현체 클래스 public class Laptop implements Product { @Override public String getName() { return "Laptop"; }.. 2024. 3. 25.
JUnit 테스트 프로그램 - 자바(JAVA) JUnit은 java 언어로 개발된 프레임워크입니다. JUnit은 자동화된 "단위 테스트"를 작성하고, 실행하는 데 사용되며, 테스트 도구의 도움을 받아 "개발 코드"에 대한 "테스트 작업"을 용이하게 만들어줍니다.Junit의 주요 특징과 목적단위 테스트 : JUnit은 "단위 테스트"를 위한 프레임워크로 주로 사용되고, 단위 테스트는 소프트웨어의 작은 부분이 의도대로 동작하는지 검증하는 프로세스입니다. 코드의 각 부분이 개별적으로 테스트 되므로 코드 변경이나 개선이 있을 때 빠르게 확인 할 수 있습니다.자동화된 테스트 : JUnit은 테스트를 "자동화"하여 반복적인 테스트를 효과적으로 수행할 수 있도록 도와주고, 테스트 코드를 작성하고, 실행하는 데 편리한 "도구"와 "어노테이션"을 제공합니다테스트 케.. 2023. 11. 10.
컬렉션 스트림, 입출력(IO) 스트림 정의 - 자바(JAVA) ● 컬력션 스트림 집합 자료체를 구성하는 요소 자료들을 효율적으로 다루기 위해, 요소 데이터를 데이터의 흐름으로 추상화한 스트림 ● 입출력(IO) 스트림 서로 다른 입출력 장치에 의한 입출력 수행을 동일 코드로 다루기 위해, 입출력 데이터의 연속을 데이터 흐름으로 추상화한 스트림 2023. 11. 9.