IT/JAVA

자바 복습

_KH_ 2025. 2. 11. 01:08

1. 스레드

■ 스레드 : 프로그램 내에서 동작하는 작업 단위. 여러 개의 작업을 동시에 실행하는 기능

=> 여기서는 단지 시각적 효과를 주기 위해 사용

public void printShutdown() { 
		for(int i = 0; i < 5; i++) {
			System.out.print(".");
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		System.out.println(" 프로그램을 종료합니다");
	}

 

반복문을 돌면서 .을 5번 출력한다.

 Thread.sleep() : 현재 실행 중인 스레드를 멈추는 기능

□  Thread.sleep(500) : 스레드를 0.5초 동안 멈춘다.

□ 500ms = 0.5초.

□ 0.5초마다 멈추면서 . 이 출력되고 프로그램을 종료합니다 문구가 띄워진 후 종료.

InterruptedException 예외 : 스레드가 중단(interrupt)되었을 때 발생하는 예외

스레드가 sleep()이나 wait()인 도중 다른 스레드에 의해 깨워질 때 이 예외가 발생. 

다른 스레드가 interrupt()를 호출할 경우 예외 발생


2. Iterator (복사체, 반복자)

+) remove() : 현재 요소 삭제

 

□ Jsoup의 Elements를 순회할 때도 사용

순회하면서 삭제도 가능

public void printDatas(ArrayList<ProductDTO> datas) {
		Iterator itr=datas.iterator();
		while(itr.hasNext()) { // 다음 요소가 있다면
			System.out.println(itr.next()); // 요소 출력
		}
	}

상품DTO를 자료형으로 하는 ArrayList의 요소들을 하나씩 출력하고자 한다.

Iterator itr = datas.iterator();

이터레이터를 생성하는 과정.

Iterator를 자료형으로 하는 변수 itr을 선언한 후 datas.iterator()를 호출하여 datas 리스트의 Iterator 객체를 가져온다. 

(datas 리스트가 가지고 있는 Iterator = datas의 데이터를 순회할 수 있도록 도와주는 도구)

 

그리고 wihle문을 통해 다음 요소가 존재하지 않게 될 때까지 반복해서 요소를 가져온다.

public void printDatas(ArrayList<ProductDTO> datas) {
    for (ProductDTO product : datas) {
        System.out.println(product);
    }
}

위 코드를 foreach문으로 바꾸면 이렇다.


3. flag 플래그

□ '깃발'을 뜻함.

■ 중복 검사에 사용. true, false만 사용

■ 상태 인식, 처리 흐름 제어

					String[] datas=new String[100];
					datas[0]="yes";
					datas[1]="YES";
					datas[2]="Yes";
					datas[3]="yES";	
									
					boolean flag=false;
					for(String v:datas) {
						if(v.equals(ans)) {
							flag=true;
							break;
						}
					}

 

플래그를 false로 선언해두고 만약, 금지어 중에 일치하는 목록이 있으면 true, 

없으면 false를 그대로 반환한다.


4. foreach 형식

■ 향상된 for문이라고도 불린다.

■ 배열이나 컬렉션(List, Set)을 순회할 때 사용하는 간단한 반복문

for (각 요소 값(자료형, 변수) : 배열 또는 컬렉션) {
    // 반복할 코드
}
String[] names = {"KIM", "LEE", "KO", "CHOI"};
for(String name : names) {
	System.out.println("내 이름은 + " + name + " 입니다");
    }

내 이름은 KIM입니다, LEE입니다, KO입니다, CHOI입니다, 총 요소의 개수인 4번 반복된다.


5. instance of

: 객체가 특정 클래스나 인터페이스의 인스턴스인지 확인할 때 사용하는 연산자

참조변수가 참조하고 있는 실제 인스턴스 타입을 알아보기 위해서 사용

■ 결과는 true, false가 있으며 true가 반환되었다는 것은 참조변수가 검사한 타입으로 형변환이 가능하다는 의미이다.

object instanceof Class

Object는 검사하려는 객체, Class는 객체가 속하는 클래스나 인터페이스를 뜻한다.

 @Override
   public boolean equals(Object obj) {
      if(!(obj instanceof Circle)) {
         return false;
      }
      Circle circle=(Circle)obj; // 형변환(캐스팅), 다운캐스팅(강제형변환)
      return this.name.equals(circle.name);
   }

6. 업캐스팅 / 다운 캐스팅

class Animal {
    public void move() {
        System.out.println("Moving...");
    }
}

class Dog extends Animal {
    public void bark() {
        System.out.println("Barking...");
    }
}

 

1) 업 캐스팅(Upcasting) : 자식 클래스 -> 부모 클래스 변환

□ 자동 형 변환 

부모의 메서드만 사용할 수 있다 (본인 고유의 메서드 사용 불가능)

Dog dog = new Dog();
Animal animal = dog;  // Upcasting

 

2) 다운 캐스팅(Downcasting) : 부모 클래스 -> 자식 클래스 변환

강제 형 변환

  자식 클래스의 메서드를 사용할 수 있다.

instance of를 통해 인스턴스 타입을 확인하기

 잘못된 다운 캐스팅을 할 시 런타임 오류 발생

□  하위 클래스로의 다운캐스팅을 할때는 타입을 명시적으로 지정

Animal animal = new Animal();
Dog dog = (Dog) animal;  // Downcasting

7. this, super() 문제 풀이

 

'IT > JAVA' 카테고리의 다른 글

생성자  (0) 2025.02.17
MVC 프로젝트 - 도서관 프로그램(VIEW 코드)  (1) 2025.02.11
크롤링 + MVC 패턴  (0) 2025.02.10
웹 크롤링  (0) 2025.02.10
MVC 패턴 복습 2  (0) 2025.02.09