no image
알고리즘: 버블 정렬 (JAVA)
버블정렬 정렬 방식이 마치 물속 거품이 수면으로 올라가는 듯하다고 하여 붙여진 이름가장 단순하고 이해하기 쉬운 방식 중 하나이다시간복잡도 : O(n^2)    정렬 방식첫 번째 값과 두 번째 값 비교첫 번째 값이 크면 서로 위치 교환. 아니면 그대로!두 번째 값과 세 번째 값 비교하여 같은 작업 반복끝 값까지 같은 작업을 반복하면, 가장 큰 값이 가장 끝 배열 요소로 들어감같은 과정을 반복하면 오름차순 정렬이 완성    장단점장점: 구현이 간단하고 코드가 직관적이다!단점: 시간복잡도가 O(n^2)로, 배열 크기가 커지면 비효율적이다.      import java.util.Arrays;public class BubbleSort { public static void main(String[] args) { ..
2024.08.05
no image
JAVA: 알고리즘, APS, 시간복잡도
알고리즘이란?어떠한 문제를 해결하기 위해 수행해야 하는 절차나 방법을 말한다.  APS(Algorithm Problem Solving)말 그대로 알고리즘 문제를 해결하는 것. 문제 해결능력을 기를 수 있다!    좋은 알고리즘 기준정확도 : 정확한 결과가 출력되는가? 얼마나 정확하게 동작하나? 실행속도(작업량): 적은 연산으로 문제를 해결할 수록 실행속도가 빠르다.메모리 사용량: 적은 메모리를 사용할수록 컴퓨팅 자원을 아낄 수 있다.가독성: 다른 사람이 이해하기 쉽도록 단순해야 한다.최적성: 더 이상 개선의 여지가 없는가?     알고리즘을 나타내는 방식 2가지 의사코드(pseudo code)특정 언어에 관계 없이 쉽게 이해할 수 있도록 나타내는 코드.정해진 규칙이 없이 이해만 잘 되면 됨.   순서도그..
2024.08.04
no image
JAVA : UML 클래스 다이어그램
UML: Unified Modeling Language. 모델을 만들기 위한 표준 언어다른 사람들과 의사소통할 떄 사용시스템의 구조, 클래스 의존성 등 파악건축도면과 같은 느낌크게 2가지 유형(구조 다이어그램, 행위 다이어그램)이고, 유형 별 7개 씩 총 14개의 세부 다이어그램 존재함.클래스 다이어그램은 구조 다이어그램에 속한다!   클래스 다이어그램프로그램의 구조를 그림으로 표현한 것.기본 구성요소는 클래스, 속성, 메서드, 관계인터페이스는 > 추가추상클래스는 >추가 or 이탤릭체로 표기         접근제어자표시범위private-본인 클래스만 접근 가능public+어떤 클래스에서든 접근 가능protected#동일 패키지 or 상속받은 클래스만 접근 가능(default)~동일 패키지만 접근 가능
2024.07.21
no image
JAVA : 상속
상속이란상위 클래스의 속성(=멤버변수)과 메서드(멤버메서드)를 물려 받아 자식 클래스를 정의하는 것상위 클래스가 쓰던 것을 그대로 쓰는데, 거기에 더 확장하고 차별화를 두고 싶을 때 사용상위, 부모, super클래스 자동차 / 개 / 사람      상속의 특징확장성, 재사용성: 자동차 리스트를 관리하는데, 별개로 세단과 전기차, 버스 등을 별도로 관리하고 싶다면?                              자동차의 속성을 그대로 가져가면서도 버스, 수용인원 등의 별도 속성을 관리할 수 있도록                              상속을 활용하여 하위 클래스를 생성할 수 있다.자식 클래스는 부모 클래스의 멤버 변수와 메서드들을 마치 본인이 선언한 것처럼 사용이 가능extends 키워..
2024.07.21
no image
JAVA: JVM 메모리 구조, static, 접근제어자
JVMJava Virtual Mahine - 자바 가상 머신OS에 상관 없이 실행할 수 있도록 만들어주는 역할메서드영역 (method Area) : 클래스, 인터페이스 관련한 정보를 저장하는 영역힙 영역 (heap Area) : 설계도를 통해 만들어진 객체와 그 문자열, 배열 등이 저장되는 영역스택 영역 (stack Area) : 메서드를 호출할 때마다 프레임이 생성되고, 지역변수 등도 함께 임시 저장됨. 해당 메서드가 종료되면 하나씩 사라지는 방식. LIFO 방식(Last In First Out)       static구분staticnon-static 구동 시점클래스가 메서드 영역에 로딩될 때 생성일반 멤버변수이므로, new 키워드 쓸 때(객체 생성할 떄) 만들어짐메모리 할당오직 1개의 메모리 공간 할..
2024.07.18
no image
JAVA: 객체, 클래스, 생성자, 객체지향 프로그래밍(OOP)
객체(국어사전) 의사나 행위가 미치는 대상, 문장 내에서 동사의 행위가 미치는 대상프로그래밍에서는? 데이터와 관련한 알고리즘을 하나의 단위로 묶은 것    객체지향 프로그래밍객체 단위로 묶어 코드를 작성함으로써, 객체 간 상호작용을 활용하는 프로그래밍 방법추상화: 객체의 세부사항을 숨기고 필요한 기능만을 제공함다형성: 상속 관계에서 각 객체가 서로 다른 방식으로 작동하도록 함상속: 기존 클래스를 새로운 클래스가 상속받음으로써 재사용 및 확장이 가능캡슐화: 데이터와 메서드를 하나로 캡슐화함으로써 객체 데이터 등을 숨겨 보안에 강화  >>> 코드의 유지보수, 재사용성, 유연성이 커진다는 장점  클래스객체를 만들기 위한 설계도설계도를 만들어두면, 그 설계도대로 객체들을 만들어낼 수 있다.인스턴스: 클래스를 통..
2024.07.17
자바: Map 클래스, 자주 쓰는 메서드
Map(맵) 인터페이스키-값 쌍을 저장데이터 검색에 효율적이기에 자주 사용키 중복 불가능, 키와 값은 1대1로만 매치     Map(맵) 클래스 데이터 읽기 성능 : HashMap > LinkedHashMap > TreeMap > HashTable종류HashMapTreeMapLinkedHashMapHashTable동기화 여부비동기화비동기화비동기화동기화정렬 순서없음key값에 따라 정렬없음없음삽입 순서 유지없음없음삽입 순서 유지없음null 허용키-값 둘 다 허용값만 허용키-값 둘 다 허용허용 X성능평균 O(1)평균 O(log n)평균 O(1)평균 O(1)      자바에서 큐의 주요 메서드put(K key, V value): 지정된 키와 값을 맵에 추가get(Object key): 지정된 키와 연결된 값을 ..
2024.06.04
자바: Queue(큐)
Queue(큐)데이터의 순서를 유지, 가장 먼저 들어온 데이터가 가장 먼저 나가는 자료 구조(선입선출 = FirstInFirstOut)줄 서기, 인쇄 작업 처리, 프로세스 관리 등에서 사용  자바에서 큐의 주요 메서드add(요소값): 큐의 끝에 요소를 추가 (큐가 다 차면 예외 발생)offer(요소값): 큐의 끝에 요소를 추가 (큐가 다 차면 false 반환)remove(): 큐의 앞에서 요소를 제거하고 반환 (비어있으면 예외 발생)poll(): 큐의 앞에서 요소를 제거하고 반환 (비어있으면 null 반환)element(): 큐의 앞에 있는 요소를 반환 (비어있으면 예외 발생)peek(): 큐의 앞에 있는 요소를 반환 (비어있으면 null 반환)isEmpty(): 큐가 비어있는지 확인 (true / fa..
2024.06.02
디지털 전환(DT, DX): 개념, 활용, 장점, 단점, 문제점, 해결 방안
디지털 전환 개념변하는 비즈니스 환경과 시장 요구 충족을 위해 디지털과 관련한 모든 것(기술, 도구 등)을 통해 비즈니스모델, 전략, 시스템 등을 근본적으로 변화시키는 과정디지털화 vs 디지털 전환- 디지털화: 아날로그 정보를 디지털 정보로 변환, 업무의 디지털화로 업무 효율화- 디지털 전환: 디지털 기술을 기반으로 조직과 비즈니스 모델, 문화 등 근본적인 변화를 추구하는 것 활용 예시1. 넷플릭스: 과거 DVD 우편 대여 사업에서 현재 비디오 스트리밍 사업으로의 전환 / 고객의 시청 습관, 선호도 데이터 활용 가능해짐 2. 스타벅스: 모바일 주문, 결제 시스템. 차량 정보를 등록하면 진입 시 자동 결제되는 My DT Pass 서비스, e프리퀀시 보상 시스템 등 3. 스마트 팩토리 4. 교육 : 미네르바..
2024.06.01
IT
디지털 트윈(Digital Twin): 개념, 활용, 장점, 단점, 문제점, 해결 방안, 현안 사항
개념현실에 존재하는 사물, 공간, 환경, 공정 등을 가상 디지털 공간에 그대로 구현하는 기술실물 대신 가상화된 디지털 트윈을 만들어 시뮬레이션함으로써 실물의 특성에 대한 정보를 얻을 수 있음사물인터넷(IoT), 센서, 초고속 통신 등 기술을 결합해 실시간으로 사물의 상태 반영 가능활용 종류1. 제조업: 공장 내 시스템, 재고 등을 가상 디지털 공간에 구현하여 효율성 추구 2. 물류업 : 물건의 무게, 크기 등을 데이터화. 미리 저장 공간을 설계하여 효율적 사용 가능    - 아마존: 각 상품의 위치, 수량 실시간 모니터링하여 필요한 아이템 신속하게 찾고 재고 수준 예측하여 효율적 관 3. 도시 기획,관리: 도시와 그 안의 사회를 복제하여 각종 데이터 실시간 분석 및 예측하여 효율적 도시 설계 가능    ..
2024.06.01
IT

알고리즘: 버블 정렬 (JAVA)

친환경 개발자
|2024. 8. 5. 16:21

버블정렬

 

  • 정렬 방식이 마치 물속 거품이 수면으로 올라가는 듯하다고 하여 붙여진 이름
  • 가장 단순하고 이해하기 쉬운 방식 중 하나이다
  • 시간복잡도 : O(n^2)

 

 

 

 

정렬 방식

  1. 첫 번째 값과 두 번째 값 비교
  2. 첫 번째 값이 크면 서로 위치 교환. 아니면 그대로!
  3. 두 번째 값과 세 번째 값 비교하여 같은 작업 반복
  4. 끝 값까지 같은 작업을 반복하면, 가장 큰 값이 가장 끝 배열 요소로 들어감
  5. 같은 과정을 반복하면 오름차순 정렬이 완성

 

 

 

 

장단점

  • 장점: 구현이 간단하고 코드가 직관적이다!
  • 단점: 시간복잡도가 O(n^2)로, 배열 크기가 커지면 비효율적이다.

 

 

 

 

 

 

import java.util.Arrays;

public class BubbleSort {

	public static void main(String[] args) {
		int[] arr = {22, 42, 31, 10, 35};
		
		// 버블 정렬
		for (int i=0; i<arr.length; i++) {
			for (int j=1; j<arr.length-i; j++) {
				if (arr[j-1] > arr[j]) {
					int tmp = arr[j-1];
					arr[j-1] = arr[j];
					arr[j] = tmp;
				}
			}
		}
		
		System.out.println(Arrays.toString(arr));
	}

}

 

JAVA: 알고리즘, APS, 시간복잡도

친환경 개발자
|2024. 8. 4. 13:30

알고리즘이란?

어떠한 문제를 해결하기 위해 수행해야 하는 절차나 방법을 말한다.

 

 

APS(Algorithm Problem Solving)

말 그대로 알고리즘 문제를 해결하는 것. 

문제 해결능력을 기를 수 있다!

 

 

 

 

좋은 알고리즘 기준

  1. 정확도 : 정확한 결과가 출력되는가? 얼마나 정확하게 동작하나? 
  2. 실행속도(작업량): 적은 연산으로 문제를 해결할 수록 실행속도가 빠르다.
  3. 메모리 사용량: 적은 메모리를 사용할수록 컴퓨팅 자원을 아낄 수 있다.
  4. 가독성: 다른 사람이 이해하기 쉽도록 단순해야 한다.
  5. 최적성: 더 이상 개선의 여지가 없는가?

 

 

 

 

 

알고리즘을 나타내는 방식 2가지

 

  • 의사코드(pseudo code)

특정 언어에 관계 없이 쉽게 이해할 수 있도록 나타내는 코드.

정해진 규칙이 없이 이해만 잘 되면 됨.

 

 

 

  • 순서도

그림으로 표현한 방식으로, 조건문(분기문)은 마름모꼴로 표현한다.

 

 

시간복잡도(Time Complexity)

알고리즘의 작업량 및 효율성을 계산할 때, Big-O 표기법을 가장 많이 사용.

실제 걸리는 시간을 측정하거나 연산의 수를 계산하는 것은 현실적으로 어렵기 때문에

가장 큰 영향력을 주는 n에 대한 항만을 표시하여 사용!!

  • 계수는 생략한다
  • 최악의 경우를 가정하여 계산하는 방식

 

 

알고리즘 문제풀이 5단계

  1. 문제를 꼼꼼하게 읽고 데이터 범위, 조건을 확인한다
  2. 조건과 데이터의 범위에 맞는 자료형 선정, 알고리즘을 선택한다.
  3. 문제풀이 방식을 구상한다
  4. 구상한 방식을 코드로 작성한다
  5. 알맞게 답이 출력되는지 확인하고 수정한다.

JAVA : UML 클래스 다이어그램

친환경 개발자
|2024. 7. 21. 23:32

UML

: Unified Modeling Language. 모델을 만들기 위한 표준 언어

  • 다른 사람들과 의사소통할 떄 사용
  • 시스템의 구조, 클래스 의존성 등 파악
  • 건축도면과 같은 느낌
  • 크게 2가지 유형(구조 다이어그램, 행위 다이어그램)이고, 유형 별 7개 씩 총 14개의 세부 다이어그램 존재함.
  • 클래스 다이어그램은 구조 다이어그램에 속한다!

 

 

 

클래스 다이어그램

  • 프로그램의 구조를 그림으로 표현한 것.
  • 기본 구성요소는 클래스, 속성, 메서드, 관계
  • 인터페이스는 <<interface>> 추가
  • 추상클래스는 <<abstract>>추가 or 이탤릭체로 표기

 

 

 

 

 

 

 

 

 

접근제어자 표시 범위
private - 본인 클래스만 접근 가능
public + 어떤 클래스에서든 접근 가능
protected # 동일 패키지 or 상속받은 클래스만 접근 가능
(default) ~ 동일 패키지만 접근 가능

 

 

 

 

 

JAVA : 상속

친환경 개발자
|2024. 7. 21. 14:00

상속이란

  • 상위 클래스의 속성(=멤버변수)과 메서드(멤버메서드)를 물려 받아 자식 클래스를 정의하는 것
  • 상위 클래스가 쓰던 것을 그대로 쓰는데, 거기에 더 확장하고 차별화를 두고 싶을 때 사용
  • 상위, 부모, super클래스 <---- 하위, 자식, sub 클래스
    자동차 / 개 / 사람 <---- 세단, 트럭,... / 말티즈, 요크셔테리어,... / 요리사, 학생,...

 

 

 

 

 

상속의 특징

  • 확장성, 재사용성: 자동차 리스트를 관리하는데, 별개로 세단과 전기차, 버스 등을 별도로 관리하고 싶다면?
                                  자동차의 속성을 그대로 가져가면서도 버스, 수용인원 등의 별도 속성을 관리할 수 있도록
                                  상속을 활용하여 하위 클래스를 생성할 수 있다.
  • 자식 클래스는 부모 클래스의 멤버 변수와 메서드들을 마치 본인이 선언한 것처럼 사용이 가능
  • extends 키워드를 사용해 상속받을 수 있다 :
              [접근제어자] (static) 클래스명 extends 부모클래스명 {

              }
  • 생성자 호출 시 super() 키워드 사용! (생략해도 구동 시 알아서 부모 클래스에서 찾아온다.)
  • super키워드는 반드시 자식클래스 생성자 내 첫 번째 줄에 위치해야만 한다!
class Car {    // 부모 클래스
    String brand;
    int year;

    // 기본 생성자
    Car() {
        this.brand = "Unknown";
        this.year = 0;
        System.out.println("Car의 기본 생성자가 호출되었습니다.");
    }

    // 파라미터를 입력받는 생성자
    Car(String brand, int year) {
        this.brand = brand;
        this.year = year;
        System.out.println("Car의 파라미터 생성자가 호출되었습니다.");
    }
}

 

class Sedan extends Car {    //자식 클래스
    int seats;

    // 기본 생성자
    Sedan() {
        // super()는 부모 클래스의 기본 생성자를 호출합니다.
       super();
        this.seats = 5;
        System.out.println("Sedan의 기본 생성자가 호출되었습니다.");
    }

    // 파라미터를 입력받는 생성자
    Sedan(String brand, int year, int seats) {
        // super(brand, year)는 부모 클래스의 파라미터를 입력받는 생성자를 호출합니다.
        super(brand, year);
        this.seats = seats;
        System.out.println("Sedan의 파라미터 생성자가 호출되었습니다.");
    }
}

 

 

Object 클래스??

  • 모든 클래스는 Object라는 클래스를 기본적으로 상속받고 있다. extends Object를 쓰지 않아도 알아서 상속한다.
  • equals(), hashCode(), toString() 등의 메서드를 선언하지 않고 사용하는 것은 Object클래스에 이미 마련되었기 때문!

 

 

 

오버라이딩

  • 상위 클래스에서 선언된 메서드를 상속받은 자식 클래스에서 재정의하는 것 ( = 덮어쓰기)
  • 서드의 이름, 반환형, 매개변수가 모두 동일해야 한다! = 단지 메서드 내부 로직이 바뀌는 것!
  • 반드시 상속 관계에서만 사용 가능
  • 어노테이션 표시를 해야 한다. (권장)
  • 조상보다 더 큰 예외를 던질 수 없다.

 

class Car {
    void startEngine() {
        System.out.println("엔진이 켜졌습니다.");
    }
}

class ElectricCar extends Car {
    // 오버라이딩: ElectricCar만의 방식으로 startEngine 메서드를 다시 정의합니다.
    @Override    // 어노테이션
    void startEngine() {
        System.out.println("전기 엔진이 조용히 켜졌습니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        ElectricCar myElectricCar = new ElectricCar();
        myElectricCar.startEngine();  // "전기 엔진이 조용히 켜졌습니다." 출력
    }
}

JVM

  • Java Virtual Mahine - 자바 가상 머신
  • OS에 상관 없이 실행할 수 있도록 만들어주는 역할
  • 메서드영역 (method Area) : 클래스, 인터페이스 관련한 정보를 저장하는 영역
  • 힙 영역 (heap Area) : 설계도를 통해 만들어진 객체와 그 문자열, 배열 등이 저장되는 영역
  • 스택 영역 (stack Area) : 메서드를 호출할 때마다 프레임이 생성되고, 지역변수 등도 함께 임시 저장됨. 해당 메서드가 종료되면 하나씩 사라지는 방식. LIFO 방식(Last In First Out)

 

 

 

 

 

 

 

static

구분 static non-static
 구동 시점 클래스가 메서드 영역에 로딩될 때 생성 일반 멤버변수이므로, new 키워드 쓸 때(객체 생성할 떄) 만들어짐
메모리 할당 오직 1개의 메모리 공간 할당 인스턴스마다 별도로 할당
목적 모든 인스턴스에 공용으로 사용할 변수 or 메서드를 정의할 떄 주로 사용 개별적으로 관리할 때 사용
접근 방법 클래스 이름으로 접근
Dog.age = 2;
객체를 생성해야 접근 가능
Dog dog = new Dog();
dog.age = 2;

 

 

 

 

★ static영역에서는 non-static 영역에 직접 접근이 불가하고

 

     non-static 영역에서는 static 영역에 접근이 가능하다!

 

staitc 영역인 main 메서드에서 선언된 name은 

 

non-static 영역인 '스태틱'클래스에서 접근이 가능.

 

그러나 반대로 age는 메인 메서드 영역에서 접근이 불가능하다!

 

 

 

 

 

접근제어자

  • private : 자기 클래스에서만 접근 가능
  • protected : 같은 패키지(폴더) 에서 접근 가능, 다른 패키지에서는 접근 안됨.
                      But 다른 패키지 클래스를 상속받았다면? 상속받은 본인 클래스로 선언하면 가능
  • (default) : 제어자 입력이 없다면 default로 적용됨. 같은 패키지 에서만 접근 가능
  • public : 모든 위치에서 접근 가능

  동일 클래스(자기 자신) 동일 패키지 다른 패키지의 하위 클래스 다른 패키지
private 접근가능 접근 불가능 접근 불가능 접근 불가능
default 접근가능 접근가능 접근 불가능 접근 불가능
protected 접근가능 접근가능 접근가능 접근 불가능
public 접근가능 접근가능 접근가능 접근가능

객체


(국어사전) 의사나 행위가 미치는 대상, 문장 내에서 동사의 행위가 미치는 대상

프로그래밍에서는? 데이터와 관련한 알고리즘을 하나의 단위로 묶은 것

 

 

 

 

객체지향 프로그래밍


객체 단위로 묶어 코드를 작성함으로써, 객체 간 상호작용을 활용하는 프로그래밍 방법

  • 추상화: 객체의 세부사항을 숨기고 필요한 기능만을 제공함
  • 다형성: 상속 관계에서 각 객체가 서로 다른 방식으로 작동하도록 함
  • 상속: 기존 클래스를 새로운 클래스가 상속받음으로써 재사용 및 확장이 가능
  • 캡슐화: 데이터와 메서드를 하나로 캡슐화함으로써 객체 데이터 등을 숨겨 보안에 강화

  >>> 코드의 유지보수, 재사용성, 유연성이 커진다는 장점

 

 

클래스


  • 객체를 만들기 위한 설계도
  • 설계도를 만들어두면, 그 설계도대로 객체들을 만들어낼 수 있다.
  • 인스턴스: 클래스를 통해 만들어진 해당 객체 >> 실제 메모리에 생성
  • 멤버변수: 속성(데이터)
  • 멤버메서드: 동작(메서드)
  • 생성자: 객체를 생성할 때 호출하는 특별한 메서드
  • 기본생성자: 클래스 작성 시 별도로 사용자가 작성하지 않으면 자동으로 JVM에서 생성함.
                        별도 작성 있으면 기본생성자 호출 불가!

 

 

 

생성자


  • new키워드와 함께 호출
  • 클래스명과 동일해야한다
  • 반환타입 없다(void조차 없음)
  • 객체 생성 시 반드시 생성자가 호출된다(new로 생성 시)
  • 객체의 멤버 필드를 선언과 동시에 초기화할 때 주로 사용한다
  • 웬만하면 기본 생성자를 직접 만들어주는 것이 좋다!
  • this : 생성된 인스턴스가 가지고 있는, 참조하는 값

 

public class Movie {

//멤버변수
int id;
String title;
String director;
String genre;
int runningTime;

//기본생성자
Movie() {
System.out.println("기본생성자 호출");
}

//매개변수 받는 생성자
Movie(int id, String title, String director, String genre, int runningTime) {
this.id = id;
this.title = title;
this.director = director;
this.genre = genre;
this.runningTime = runningTime;
}

//메서드
void movieInfo() {
System.out.printf("등록번호: %d\n제목: %s\n제작자: %s\n장르: %s\n상영시간: %d", id, title, director, genre, runningTime);
}
    
}

 

 

public class MovieTest {

public static void main(String[] args) {

//객체 생성
Movie movie1 = new Movie(1, "인터스텔라", "놀란", "스릴러", 300);
Movie movie2 = new Movie(2, "마더", "봉준호", "공포", 100);
Movie movie3 = new Movie(3, "아바타", "카메룬", "판타지", 92);

movie1.movieInfo();
System.out.println("\n");
movie2.movieInfo();
System.out.println("\n");
movie3.movieInfo();
System.out.println("\n");
 
}

}

자바: Map 클래스, 자주 쓰는 메서드

친환경 개발자
|2024. 6. 4. 21:25



Map(맵) 인터페이스

  • 키-값 쌍을 저장
  • 데이터 검색에 효율적이기에 자주 사용
  • 키 중복 불가능, 키와 값은 1대1로만 매치

 

 

 

 

 

Map(맵) 클래스

 

데이터 읽기 성능 : HashMap > LinkedHashMap > TreeMap > HashTable

종류 HashMap TreeMap LinkedHashMap HashTable
동기화 여부 비동기화 비동기화 비동기화 동기화
정렬 순서 없음 key값에 따라 정렬 없음 없음
삽입 순서 유지 없음 없음 삽입 순서 유지 없음
null 허용 키-값 둘 다 허용 값만 허용 키-값 둘 다 허용 허용 X
성능 평균 O(1) 평균 O(log n) 평균 O(1) 평균 O(1)

 

 

 

 

 

 

자바에서 큐의 주요 메서드

  • put(K key, V value): 지정된 키와 값을 맵에 추가
  • get(Object key): 지정된 키와 연결된 값을 반환
  • containsKey(Object key): 맵에 지정된 키가 포함되어 있는지 확인
  • containsValue(Object value): 맵에 지정된 값이 포함되어 있는지 확인
  • remove(Object key): 지정된 키로 맵에서 요소를 제거
  • size(): 맵에 있는 키-값 쌍의 수를 반환
  • keySet(): 맵의 모든 키를 포함하는 Set을 반환
  • values(): 맵의 모든 값을 포함하는 Collection을 반환
  • entrySet(): 맵의 모든 키-값 쌍을 포함하는 Set을 반환
  • isEmpty(): 맵이 비어 있는지 확인
  • clear(): 맵의 모든 요소를 제거

 

 

 

 

 

예시

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        
        // put: 요소 추가
        map.put("Apple", 1);
        map.put("Banana", 2);
        map.put("Cherry", 3);
        
        // get: 키로 값 가져오기
        System.out.println("Apple: " + map.get("Apple"));
        
        // containsKey: 키가 존재하는지 확인
        System.out.println("Contains 'Banana': " + map.containsKey("Banana"));
        
        // containsValue: 값이 존재하는지 확인
        System.out.println("Contains value 3: " + map.containsValue(3));
        
        // remove: 키로 요소 제거
        map.remove("Cherry");
        
        // size: Map의 크기
        System.out.println("Map size: " + map.size());
        
        // keySet: 모든 키를 Set으로 반환
        System.out.println("Keys: " + map.keySet());
        
        // values: 모든 값을 Collection으로 반환
        System.out.println("Values: " + map.values());
        
        // entrySet: 모든 키-값 쌍을 Set으로 반환
        System.out.println("Entries: " + map.entrySet());
        
        // isEmpty: Map이 비어 있는지 확인
        System.out.println("Is map empty: " + map.isEmpty());
        
        // clear: 모든 요소 제거
        map.clear();
        System.out.println("Is map empty after clear: " + map.isEmpty());
    }
}

자바: Queue(큐)

친환경 개발자
|2024. 6. 2. 21:56



Queue(큐)

  • 데이터의 순서를 유지, 가장 먼저 들어온 데이터가 가장 먼저 나가는 자료 구조(선입선출 = FirstInFirstOut)
  • 줄 서기, 인쇄 작업 처리, 프로세스 관리 등에서 사용

 

 

자바에서 큐의 주요 메서드

  • add(요소값): 큐의 끝에 요소를 추가 (큐가 다 차면 예외 발생)
  • offer(요소값): 큐의 끝에 요소를 추가 (큐가 다 차면 false 반환)

  • remove(): 큐의 앞에서 요소를 제거하고 반환 (비어있으면 예외 발생)

  • poll(): 큐의 앞에서 요소를 제거하고 반환 (비어있으면 null 반환)

  • element(): 큐의 앞에 있는 요소를 반환 (비어있으면 예외 발생)

  • peek(): 큐의 앞에 있는 요소를 반환 (비어있으면 null 반환)

  • isEmpty(): 큐가 비어있는지 확인 (true / false)

  • size(): 큐의 요소 개수 반환

 

 

예시

import java.util.LinkedList;
import java.util.Queue;

public class Main {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();

        // 요소 추가 (enqueue)
        queue.add(1);  // 또는 queue.offer(1);
        queue.add(2);
        queue.add(3);

        // 요소 확인 (peek)
        System.out.println("Front element: " + queue.peek());  // 또는 queue.element();

        // 요소 제거 (dequeue)
        System.out.println("Removed element: " + queue.poll());  // 또는 queue.remove();

        // 큐가 비어있는지 확인
        System.out.println("Is queue empty? " + queue.isEmpty());

        // 큐의 크기 확인
        System.out.println("Queue size: " + queue.size());
    }
}

디지털 전환 개념

  • 변하는 비즈니스 환경과 시장 요구 충족을 위해 디지털과 관련한 모든 것(기술, 도구 등)을 통해 비즈니스모델, 전략, 시스템 등을 근본적으로 변화시키는 과정
  • 디지털화 vs 디지털 전환

    - 디지털화: 아날로그 정보를 디지털 정보로 변환, 업무의 디지털화로 업무 효율화
    - 디지털 전환: 디지털 기술을 기반으로 조직과 비즈니스 모델, 문화 등 근본적인 변화를 추구하는 것

 

활용 예시

1. 넷플릭스: 과거 DVD 우편 대여 사업에서 현재 비디오 스트리밍 사업으로의 전환 / 고객의 시청 습관, 선호도 데이터 활용 가능해짐

 

2. 스타벅스: 모바일 주문, 결제 시스템. 차량 정보를 등록하면 진입 시 자동 결제되는 My DT Pass 서비스, e프리퀀시 보상 시스템 등

 

3. 스마트 팩토리

 

4. 교육 : 미네르바스쿨 > 온라인 학습 플랫폼 운영 (인공지능으로 학생 음성 , 발언 빈도 등 파악하여 참여도 측정, 학습 데이터 축적하여 코칭 피드백)

 

 

 

장점

 

1. 운영 효율화: 자동화를 통해 오류 줄이고, 운영비 절감

 

2. 고객 만족도 상승: 맞춤형 서비스, 간편한 이용 등으로 고객 경험 개선

 

3. 신속한 의사결정: 데이터 기반 분석을 통해 기업은 더 빠르고 정확한 의사결정 가능

 

4. 새로운 비즈니스 모델 창출: 다양하게 축적되는 데이터를 통해 새로운 비즈니스 모델 창출 인사이트 제공

 

 

 

단점, 문제점

 

1. 비용 부담: 디지털 전환을 위한 초기 투자 비용이 높음

 

2. 문화적 저항: 조직 문화 변화, 직원들의 저항 등의 관리에 어려움

 

3. 보안 문제: 데이터를 다루는 과정에서 데이터의 유출, 사이버 공격 등의 위험

 

4. 데이터 관리, 분석 어려움

 

 

 

해결방안

 

1. 단계적 구축: 낮은 단계부터 적용, 필요할 때마다 하나씩 추가 구축하며 비용 부담 경감, 직원들의 거부감도 줄일 수 있음

             ex) 직원 개개인의 PC에 저장되어 있는 자료들을 클라우드 서비스를 통해 관리하여 언제 어디서나 자료를 확인하고 활용할 수 있게 하는 것

 

2. 기술 교육: 변화하는 디지털 기술에 적응을 위한 직원 교육을 실시하여 저항을 줄인다.

 

3. 보안 강화: 직원 보안 교육으로 보안에 대한 인식 제고, 보안 인력 확보, 최신 보안 기술 적용

 

4.효과적인 데이터 관리 시스템 구축, 데이터 분석 전문 인력 확보

 

5. 정부 지원 강화: 디지털 전환을 위한 정부 지원을 강화하고 이를 활용할 수 있도록 운영

 

 

 

 

 

 

 

 

https://biz.chosun.com/science-chosun/medicine-health/2024/05/31/3PEZKGJ7CZHETNHXOECA2IDAPM/

 

디지털 전환이 의료정책 바꾼다…“의사 말에 로봇이 수술하는 시대 대비해야”

디지털 전환이 의료정책 바꾼다의사 말에 로봇이 수술하는 시대 대비해야 서울대병원 권용진 교수, 환자에게 디지털 활용 교육해야

biz.chosun.com

고위험 환자 정보를 건강보험기관에서 병원으로 빠르게 공유하여 효율성 증대

but 환자들의 디지털 활용력 격차 큼. 환자 교육 필요

 

 

https://www.koit.co.kr/news/articleView.html?idxno=116867

 

정부, 민간·지역과 중소 제조기업 디지털 전환 ‘박차’ - 정보통신신문

[정보통신신문=서유덕기자] 정부가 우리 경제의 근간인 제조업의 미래 경쟁력을 강화하기 위해 스마트공장 도입 확대 등을 골자로 하는 디지털 제조혁신 정책 청사진을 제시했다. 중소벤처기업

www.koit.co.kr

 

 

개념

  • 현실에 존재하는 사물, 공간, 환경, 공정 등을 가상 디지털 공간에 그대로 구현하는 기술
  • 실물 대신 가상화된 디지털 트윈을 만들어 시뮬레이션함으로써 실물의 특성에 대한 정보를 얻을 수 있음
  • 사물인터넷(IoT), 센서, 초고속 통신 등 기술을 결합해 실시간으로 사물의 상태 반영 가능

활용 종류

1. 제조업: 공장 내 시스템, 재고 등을 가상 디지털 공간에 구현하여 효율성 추구

 

2. 물류업 : 물건의 무게, 크기 등을 데이터화. 미리 저장 공간을 설계하여 효율적 사용 가능

    - 아마존: 각 상품의 위치, 수량 실시간 모니터링하여 필요한 아이템 신속하게 찾고 재고 수준 예측하여 효율적 관

 

3. 도시 기획,관리: 도시와 그 안의 사회를 복제하여 각종 데이터 실시간 분석 및 예측하여 효율적 도시 설계 가능

    - 핀란드 헬싱키: 스쿠터 사용자가 도시 내 도로 상황 데이터 수집하여 대기오염 정보와 안전 경로 찾아줌

    - 버추얼 싱가포르: 국가 전체를 디지털 트윈으로 구축하여 신도시 기획, 교통인프라 개선 등 다양한 도시 문제 해

 

4. 에너지: 엔진을 특정 위치에 맞게 구성, 부품 마모 정도를 실시간 점검, 설비 고장 여부 예방 점검 

 

장점

 

1. 시뮬레이션 가능: 실제 장비나 공정을 변경하면 발생할 문제들을 미리 테스트, 검토하여 시간적, 경제적 손실 최소화 

 

2. 돌발 사고 최소화: 위험성이 있는 작업 현장에서 사람이 직접 작업하는 것을 대체

 

3. 생산성 증가: 효율적 자원 관리 최적화로 운영비 절감, 생산효율 증가

 

4. 불량률 감소: 최적화된 공정을 적용하도록 유도하여 불량률 감소

 

 

 

단점, 문제점

 

1. 데이터 보안: 회사 운영 상 중요한 정보의 노출 가능성이 있음

 

2. 개인정보 문제: 데이터 수집 과정에서 개인정보가 불가피하게 포함될 수 있음

 

3. 높은 초기 비용: 고해상도 센처, 데이터 수집 관리 시스템 등 인프라 비용이 높

 

4. 데이터 정확성: 데이터 품질에 의존하다 보니 데이터 품질에 따라 데이터 정확성이 달라지고, 운영에 심각한 문제 야기할 수 있다. 

 

 

 

해결방안

 

1. 데이터 공유 및 활용 확대: 데이터  공율 플랫폼 구축, 데이터 표준 개발 등을 통해 데이터 공유 및 활용하여 구축 효율성 제고

 

2. 개인정보 포함 데이터는 익명화

 

3. 정부 및 기업 지원: 정부의 연구 지원 사업, 기업 투자 유치 등을 통해 초기 투자 비용 확보

 

4. 단계적 구축: 초기 단계에는 핵심 기능만 구현하고, 필요에 따라 점진적 추가하여 초기 투자 비용 절약

 

5. 다양한 데이터 소스 활용, 데이터 수집 방법의 정의 및 문서화

 

 

 

 

 

 

 

https://www.newsis.com/view/NISX20240313_0002659172

 

정부, '디지털 트윈' 시범구역 2곳 공모…올해 100억 지원

[서울=뉴시스]윤현성 기자 = 정부가 가상공간의 3D 모델을 활용해 실제 세계의 의사결정에 활용하는 '디지털 트윈' 기술·서비스를 구현할 시범구역 공모에 나선다

www.newsis.com

https://m.ddaily.co.kr/page/view/2024052918520343516

 

[디지털 제조혁신]<하>스마트 제조 핵심, ‘디지털 트윈’으로 보는 혁신 가능성

마이크로소프트 ‘코파일럿 디자이너’로 생성한 디지털 트윈 이...

m.ddaily.co.kr

https://www.news2day.co.kr/article/20240110500164

 

[메타버스와 웹3.0이 여는 새로운 세상 (24)] ‘디지털 트윈(Digital Twin)’, 어디까지 왔나? ①

메타버스와 웹3.0이 디지털경제의 새로운 화두로 부상했다. 이를 기반으로 한 비즈니스 모델들이 다양한 모습으로 탄생하며 새로운 인터넷 세상을 열고 있다. 그렇다면, 메타버스와 웹3.0을 표방

www.news2day.co.kr