본문 바로가기

컴퓨터공부/Java

[java 자바공부] 스레드란 , @Override , Hashmap

by Life & study 2023. 10. 25.
반응형

[java 자바공부] 스레드란 , @Override , Hashmap 1

스레드란?

 

 

class MyThread extends Thread {
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getId() +" Value "+ i);
        }
    }
}

public class Main {
    public static void main(String args[]) {
        MyThread t1 = new MyThread();
        t1.start();

        MyThread t2 = new MyThread();
        t2.start();
    }
}

서 MyThread라는 새로운 스레드 클래스를 정의하였고, 이 클래스는 java.lang.Thread 클래스를 상속받습니다. run() 메소드 내부에는 스레드가 수행할 작업을 정의합니다.

그런 다음, 메인 함수(main)에서 두 개의 MyThread 인스턴스(t1, t2)를 생성하고 각각 시작(start())합니다. 이로써 두 개의 스레드가 동시에 실행되게 됩니다.

 

결론 동시에 실행하게 된다. = 멀티 스레드

 

 

 

 

Main thread
 |----> t1 thread (MyThread instance)
 |          |----> prints IDs and values from 0 to 9
 |
 |----> t2 thread (MyThread instance)
            |----> prints IDs and values from 0 to 9

 

결론

 

동시에 실행하게 된다. = 멀티 스레드

 

메인 스레드에서 두 개의 자식 스레드(t1, t2)가 분기되며, 각각은 독립적으로 작업을 수행

 

 

@Override 란 ?

 

Java에서 @Override는 어노테이션(Annotation)의 한 종류로, 메소드가 상위 클래스나 인터페이스의 메소드를 오버라이드(재정의)하고 있다는 것을 명시적으로 표시하는 데 사용됩니다. 이 어노테이션은 컴파일러에게 이 메소드가 오버라이딩 되어야 함을 알려주며, 만약 실제로 오버라이딩 되지 않았다면 컴파일 에러를 발생시킵니다.

아래는 @Override 어노테이션을 사용하는 간단한 예제입니다:

java
class Parent {
    void sayHello() {
        System.out.println("Hello from Parent");
    }
}

class Child extends Parent {
    @Override
    void sayHello() {
        System.out.println("Hello from Child");
    }
}

public class Main {
    public static void main(String[] args) {
        Parent p = new Child();
        p.sayHello(); // 출력: Hello from Child
    }
}


여기서 Parent 클래스에는 sayHello()라는 메소드가 정의되어 있습니다. 그리고 Child 클래스에서 이 메소드를 재정의(오버라이딩)하였습니다. 이 때, 재정의된 메소드 앞에 @Override 어노테이션이 붙어있음을 확인할 수 있습니다.

만약 Child 클래스에서 잘못된 시그니처로 메서드를 작성하거나, 상위 클래스에 해당 이름의 메서드가 없다면 컴파일러는 에러를 발생시켜 문제점을 알려줍니다.

Parent class
 |----> sayHello() method

Child class (extends Parent)
 |----> @Override 
 |      |
 |      ----> sayHello() method (overridden)


위 텍스트 기반 그림에서 화살표(|---->)는 "속한다" 또는 "확장한다"를 의미합니다. 즉, 'sayHello()'메서드는 'Parent'클래스에 속해 있으며 'Child'클래스가 'Parent'클래스를 확장하고 있습니다. 또한 '@Override' 아래의 'sayHello()'메서드는 'Child'클래스 내부에서 재정의되었습니다.

따라서 Java에서 '@Override' 어노테이션은 프로그래머와 컴파일러 모두에게 메서드가 오버라이딩되었다는 것을 명확하게 알려주어실수를 방지하고 코드의 가독성을 향상시키는 역할을 합니다.

 

 

Hashmap 이란?

 

 

 

HashMap  메소드

HashMap 클래스는 맵 인터페이스를 구현한 클래스로서, 여러 가지 메소드를 제공합니다. 아래는 주요 메소드들에 대한 설명입니다:

void clear(): 맵에서 모든 매핑을 제거합니다.
Object clone(): 얕은 복사본을 반환합니다.
boolean containsKey(Object key): 해당 키가 맵에 있는 경우 true를 반환합니다.
boolean containsValue(Object value): 해당 값이 맵에 있는 경우 true를 반환합니다.
Set<Map.Entry<K,V>> entrySet(): 맵에 있는 모든 키-값 쌍을 Set 형태로 반환합니다.
V get(Object key): 지정된 키의 값을 반환하며, 그런 키가 없는 경우 null을 반환합니다.
boolean isEmpty(): 이 맵이 비어있는 경우 true를 반환합니다.
Set<K> keySet(): 이 맵에서 사용하는 모든 키들을 Set 형태로 반환합니다.
V put(K key, V value): 지정된 값을 해당 키와 연관지어 저장하고, 이전에 연관되었던 값을 반환하거나 (그런 것이 없으면 null), 새로운 키-값 쌍이 추가되면 null을 반환 합니다.
void putAll(Map<? extends K,? extends V> m): 지정된 Map의 모든 요소를 현재 Map에 복사(추가) 합니다.
V remove(Object key): 지정된 키와 관련된 값(매핑)을 삭제하고 삭제된 값을 반환하며, 그런 값이 없으면 null을 리턴 합니다.
12.int size(): 이 Map의 크기(포함된 Key-Value 쌍의 수) 를 리턴 합니다.

13.Collection<V> values(): 이 Map에서 사용하는 모든 값들(Value 들 ) 을 Collection 형태로 리턴 합니다.

위 메소드 외에도 다양한 기능과 옵션들이 있으니 필요시 Java 공식 문서나 관련 자료 등을 참조하세요.

 

getkey

 

getvalue

 

keySet() 그  key value로 만든 클래스에 모든 데이터 가져옴

 

Map.entry는 key value 하나로 묶는것을 뜻함.

 

반응형

댓글