• Iterator는 자바의 컬렉션 프레임워크에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법을 표준화한 것

  • hasNext() : 읽어올 요소가 남아있는지 확인하는 메서드, 요소가 있으면 true, 없으면 false

  • next() : 다음 데이터를 반환

  • remove() : next()로 읽어온 요소를 삭제

ArrayList list = new ArrayList(); 
list.add("1"); 
list.add("2"); 
list.add("3"); 

Iterator iter = list.iterator(); 
while (iter.hasNext() == true) { 
	String num = (String) iter.next();
	if (num == "3") { 
		iter.remove();
	}
    System.out.println("num = " + num); 
}

System.out.println("-------------------");
iter = list.iterator(); 
while(iter.hasNext() == true) { 
	String num = (String) iter.next();
	System.out.println("num = " + num); 
}


num = 1
num = 2
num = 3
-------------------
num = 1
num = 2

 

  • entrySet() 메서드는 key와 value의 값 모두 출력

  • keySet() 메서드는 key의 값만 출력

  • Iterator는 자바의 컬렉션 프레임워크에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법

Map<String, String> map = new HashMap<String, String>();
        map.put("key01", "value01");
        map.put("key02", "value02");
        map.put("key03", "value03");
        map.put("key04", "value04");
        map.put("key05", "value05");
 
        // 방법 01 : entrySet()
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println("[key]:" + entry.getKey() + ", [value]:" + entry.getValue());
        }
        
        // 방법 02 : keySet()
        for (String key : map.keySet()) {
            String value = map.get(key);
            System.out.println("[key]:" + key + ", [value]:" + value);
        }
    
        // 방법 03 : entrySet().iterator()
        Iterator<Map.Entry<String, String>> iteratorE = map.entrySet().iterator();
        while (iteratorE.hasNext()) {
            Map.Entry<String, String> entry = (Map.Entry<String, String>) iteratorE.next();
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println("[key]:" + key + ", [value]:" + value);
        }
    
        // 방법 04 : keySet().iterator()
        Iterator<String> iteratorK = map.keySet().iterator();
        while (iteratorK.hasNext()) {
            String key = iteratorK.next();
            String value = map.get(key);
            System.out.println("[key]:" + key + ", [value]:" + value);
        }

자바 프로그램의 구동 원리

  1. 소스코드를 작성 (.java 확장자의 소스 파일)

  2. 컴파일러(javac.exe)가 바이트코드로 변환한다. (.class 확장자의 클래스 파일)

  3. 런처(java.exe)로 자바 가상 머신을 구동시킨다.

  4. 자바 가상 머신(JVM)이 바이트코드를 해석하여 자바 프로그램이 실행된다.

 

자바 가상 머신 (JVM, Java Virtual Machine)

  • 자바 프로그램의 클래스 파일들은 운영체제에서 직접 동작하는 것이 아니라 "JVM" 위에서 동작하기 때문에 윈도우든 리눅스든 맥이든 어느 운영체제에서 실행 시킬 수 있다.

 

자바의 메모리 영역

  • 5개의 영역으로 분류되지만 메서드, 힙, 스택 영역을 보겠습니다.

메모리 영역 용도 보존 기간
메서드
= 클래스
= 스태틱
- 가장 먼저 데이터가 저장되는 공간
- 클래스 로더에 의해 로딩된 클래스, 메서드,     클래스 변수(static), 전역 변수가 저장
- 프로그램의 시작부터 종료까지 메모리에
   남는다.
- 명시적인 Null 선언시 GC 청소 대상
- 런타임 시 결정되는 참조형 데이터 타입
   저장 되는 공간
- new 연산자를 통해 생성된 객체
   저장 되는 공간
- 객체가 더 이상 안쓰이거나, 명시적인 Null
   선언 시 GC 청소 대상
스택 - 컴파일 시 결정되는 기본형 데이터 타입
   저장 되는 공간
- 지역변수, 매개변수, 리턴값, 참조변수 등이
   저장됨
- { } 또는 메서드가 끝날 때까지

오버로딩 (Overloading)

  • 같은 이름의 메소드를 여러 개 가지면서 매개변수의 개수나 타입을 다르게 하는 기술

public class Overloadingtest {

    // test에 매개변수로 int형 2개 호출
    void test(int a, int b){
        System.out.println("매개변수 "+ a + "와 " + b);
    }
   
    // test에 매개변수 double형 1개 호출
    void test(double d){
        System.out.println("매개변수 " + d);
    }
    
}
public class test {

    public static void main(String[] args) {
       
        // Overloadingtest 객체 생성
        Overloadingtest ob = new Overloadingtest();
        
        // test(int a, int b) 호출
        ob.test(10, 20);
        
        // test(double d) 호출
        ob.test(123.4);
        
    }
    
}

 

오버라이딩 (Overriding)

  • 상위 클래스의 메소드를 하위 클래스에서 재정의하여 사용

public class Employee{
    public String name;
    public int age;
   
    public void print(){
        System.out.println("사원의 이름은 "+this.name+ "이고, 나이는" + this.age+"입니다.");
    }   
}

// Employee 상속
public class Manager extends Employee{
    String jobOfManage;
   
    // print() 메소드 오버라이딩
    public void print(){
        System.out.println("사원의 이름은 "+this.name + "이고, 나이는" + this.age + "입니다.");
        System.out.println("관리자 "+this.name+"은 "+this.jobOfManage+" 담당입니다.");
    }
}

 

+ Recent posts