무작정 개발.Vlog

[JAVA+국비교육] 내부클래스(익명의, 무명의, Anonymous클래스), Vector

by 무작정 개발
반응형
2022.01.06(13일 차)

날씨가 점점 추워진다. 건강관리에 신경 쓰자!

오늘의 수업 내용

 

내부 클래스

클래스 안에 클래스를 생성한다.

 

방법

  • 클래스 안에 클래스
  • 메서드 안에 클래스
  • 클래스를 static으로 만든다
  • 무명의 클래스

 

 

클래스 안에 클래스

  • 내부 클래스(Inner)
package com.day12;
//Test1~3은 뭔지만 보기 자주사용안하고 Test4는 자주 사용함 - 크게 1~3은 크게 중요 x
/*
 1. 내부클래스(Inner) - 클래스 안에 클래스가 들어감
방법 :클래스안에 클래스 / 메소드안에 클래스/ 클래스를 static으로 만든다 / 무명의 클래스
*/

class Outer1 { // Outer1클래스 안에 Inner1클래스가 들어감
	
	static int a = 10;//클래스 변수
	int b = 20; // instance변수(매개변수)
	
	public class Inner1 {// Outer1클래스 안에 Inner1클래스가 들어감
		
		int c = 30;
		
		public void write() { // Inner클래스 메서드
			System.out.println(a);
			System.out.println(b);
			System.out.println(c);
		}
	}
	
	public void print() { // Outer1 클래스 메서드
		
		Inner1 ob = new Inner1(); //객체 생성
		ob.write();
	}
}
public class Test1 {

	public static void main(String[] args) {
		
		Outer1 out = new Outer1();//Outer 객체만들기 -  외부클래스 객체가 먼저 생성되야함
		out.print();
		
		Outer1.Inner1 in = out.new Inner1();
		in.write();

	}

}

 

메서드 안에 클래스

  • 내부 클래스(Local)
package com.day12;

// 2. 내부클래스(Local)
// 메소드 안에 클래스

class Outer2 { // Outer2클래스
	
	static int a = 10; 
	int b = 20;
	
	public void write() { // write메소드
		
		int c = 30;	//지역변수
		final int d = 40;
		
		class Inner2 {  // 메소드 안에 있는 Inner2클래스
				
			public void print() {
				System.out.println(a);
				System.out.println(b);
				System.out.println(c);
				System.out.println(d);
			}
			
		}
		
		Inner2 ob = new Inner2(); // 메소드 안에서만 객체생성 가능
		ob.print();
	}
}
public class Test2 {
	//메소드 안에있는 클래스는 메소드 안에서만 객체생성이 가능하다.
	public static void main(String[] args) {
		
		Outer2 out = new Outer2();
		out.write();

	}

}

 

static으로 클래스 만들기

  • 내부 클래스(중첩)
package com.day12;

//3. 내부클래스(중첩)
//static으로 클래스 만들기


class Outer3 {
	
	static int a = 10;
	int b = 20;
	
	public static class Inner3 { //static을 써서 클래스를 만들면 객체를 생성안해도 알아서 메모리에 올라간다.
		
		int c = 30;
		
		public void write() {
			
			System.out.println(a); // static in a =10 먼저 올라가있어서 실행가능
			//System.out.println(b); // b는 new를 만나야해서 오류
			System.out.println(c); // c는 new가없어도 static클래스라서 먼저 메모리에 올라가있어 실행가능
			
			Outer3 ob = new Outer3();
			System.out.println(ob.b);
		}
		
	}
	
	public void print() {
		System.out.println(b);
	}
	
}

public class Test3 {

	public static void main(String[] args) {
		
		Outer3 out = new Outer3();
		out.print();

	}

}

 

익명의 클래스( Anonymous 클래스)

  • 메모리 낭비가 적다. 한번 사용하고 버림을 반복
  • 안드로이드에서 많이 사용함
package com.day12;

//4. 내부클래스(익명의, 무명의, Anonymous클래스)
public class Test4 {
	
	public Object getTitle() {
		
		return new Object() { 
			
			@Override
			public String toString() {//여기부터
				return "익명의 클래스";
			}
		};// 이게 반환값이 된다. -> 여기까지
	}

	public static void main(String[] args) {
		
		Test4 ob = new Test4();
			
			Object str = ob.getTitle();//Object로 받아서 찍는다.
			
			System.out.println(str);
					
	}

}

Collections Framework

  • 데이터를 관리하는 방법
  • 배열의 단점을 해결해 줌
  • 종류가 다양하고, 2개가 대표적(인터페이스)
  • List(I) - ArrayList(C), Vector(C) I = 인터페이스, C = 클래스
  • Vector는 동기화를 지원하는 대신 느리다/ArrayList는 동기화 지원 x 대신 빠르다. 
  •  Map(I) - Hashtable(C), HashSet(C)
  • Collections은 처음부터 몇 개를 만들어라 하고 정의 안 해도 됨. 인터페이스는 객체를 생성할 수 없음. 구현해서          사용하는 것일 뿐.

[IT 기술 면접] Java의 Collection Framework 이란?

 

[IT 기술 면접] Java의 Collection Framework 이란?

이번에는 Java의 Collection에 대해 정리할 것이다. ▶ Collection Framework (JCF) Java에서 Collection 이란 데이터의 집합, 그룹을 의미하며 JCF(Java Collections Framework)는 객체들을 한 곳에 모아 관리하고, 편하게

backendcode.tistory.com

Collection 종류 - List, Vector, Set, Hashtable, TreeSet, HashSet 등이 있다.

package com.day12;

import java.util.Vector;

// Collection Framework(방법론)

 //Collection 종류 - List, Vector, Set, Hashtable, TreeSet, HashSet 등이 있다.
 
 //List(I) - ArrayList(C), Vector(C)  I = 인터페이스 , C = 클래스
 //Vector는 동기화를 지원하는 대신 느리다/ArrayList는 동기화지원x 대신 빠르다.
 
 //Map(I) - Hashtable(C), HashSet(C)
 
public class Test5 {
	
	public static void main(String[] args) {
		
		//Vector<E> E는 제러닉이라하는데 이 Vecotr의 자료형을 뭐로 정할지 고르는거 기본은 String이다.
		
		Vector v = new Vector<>(); // Vector(컬렉션모두) 기본 데이터 타입이 Object이다.
		
		v.add("서울"); // 컬렉션은 기본 디폴트가 object이다. 서울은 String인데 object에 넣어서 upcast
		v.add(30); //upcast				//Object안에 넣는거라 모든것이 upcast이다
		v.add('c'); //upcast
		
		
		//꺼내줄때 는 서울이 Object라서 downcast를 해줘야함 - 형변환
		String s = (String)v.get(0);
		System.out.println(s);
		
		Integer i = (Integer)v.get(1);
		System.out.println(i);
		
		char c = (char)v.get(2);
		System.out.println(c);
		
	}
}

 

문자열을 Vector(벡터)에 저장

Vector의 다양한 메서드

  • add()
  • get()
  • firstElement()
  • lastElement()
  • size()
package com.day12;

import java.util.Iterator;
import java.util.Vector;

public class Test6 {
	
	private static final String[] city = {"서울", "부산", "대구", "인천", "광주", "대전", "울산"};

	public static void main(String[] args) {
		
		//여기서는 downcast를 할 필요가 없다. why? Vector를 String으로 해줘서
		Vector<String> v = new Vector<>(); //벡터 v에 String값만 넣겠다. 강제성을 띈 통일성
		
		for(String s : city) {
			v.add(s); // add는 추가
			
		}
		
		//v.add(10); -> int형 데이터를 넣을 수 없다.객체 생성 시 String값만 넣겠다고 선언
		
		String str;
		str = v.get(0);
		System.out.println(str);
		
		str = v.firstElement(); // 데이터가 몇개든 첫번 째꺼 꺼내기
		System.out.println(str); // 서울
		
		str = v.get(0); // index 0번째 를 꺼내와라
		System.out.println(str); // 서울
		
		str = v.get(1);
		System.out.println(str); // 부산
		
		str = v.lastElement(); // 데이터가 몇개가 되든 마지막꺼 꺼내기
		System.out.println(str);
		
		//for
		for(int i=0; i<v.size(); i++) { // Vector(벡터)의 크기 : 7
			System.out.print(v.get(i) + " "); // 서울 부산 대구 인천 광주 대전 울산 
		}
		System.out.println(); 
		
		//확장for - Vector도 배열처럼 확장 for문 사용 가능
		for(String s : v) {
			System.out.print(s + " ");
		}
		System.out.println(); // 서울 부산 대구 인천 광주 대전 울산 
		
		
		//Iterator(전용출력기) - 반복자 - 데이터가 많으면 많을수록 for문 or 확장for보다 더 빠르다.
		Iterator<String> it = v.iterator(); // copy의 개념 - vector에 있는 iterator를 써서 데이터를 꺼내서 it에 넣음
		while(it.hasNext()) {  // move의 개념
			
			str = it.next();
			System.out.print(str + " ");
			
		}

	}

}

Test 6 실행 결과
Test 6 실행 결과

 

Vector의 다양한 메서드

  • set()
  • insertElementsAt()
  • indexOf()
  • remove()
  • capacity()
  • clear()
package com.day12;

import java.util.Collections;
import java.util.Iterator;
import java.util.Vector;

public class Test7 {
	
	private static final String[] city = {"서울", "부산", "대구", "인천", "광주", "대전", "울산"};

	
	public static void main(String[] args) {
		
		
		Vector<String> v = new Vector<>(); //Vector은 생성하면 내부적으로 배열을 자동으로 일정개수를 만듬 10개
		
		String str;
		System.out.println("백터의 초기 용량 : " + v.capacity()); // 백터의 초기 용량 : 10
		
		for(String s : city) {
			v.add(s);
		}
		
		Iterator<String> it = v.iterator();
		while(it.hasNext()) { //데이터가 있을 때까지 꺼내라
			
			str = it.next();
			System.out.print(str + " ");//서울 부산 대구 인천 광주 대전 울산 
		}
		System.out.println();
		
		System.out.println("데이터의 갯수 : " + v.size()); // 데이터의 갯수 : 7
		
		//데이터 변경(수정)
		v.set(0, "Seoul"); // 0번째 자리에 "서울"을 넣어라
		v.set(1, "Busan");
		
		for(String s : v) {
			System.out.print(s + " ");
		}
		System.out.println();
		
		//데이터 삽입
		v.insertElementAt("대한민국", 0); // "대한민국"을 넣을 것이고 0번째 index에 넣는다.
		for(String s : v) {
			System.out.print(s + " ");
		}
		System.out.println();
		System.out.println("백터의 현재 용량 : " + v.capacity()); // 백터의 현재 용량 : 10
		System.out.println("데이터의 갯수 : " + v.size()); // 데이터의 갯수 : 8 
		
		//데이터 검색
		int index = v.indexOf("대구"); // 대구가 있는 곳의 index를 가지고 와라
		if(index != -1) { // -1은 데이터가 없을 경우 -> != 으로 하면  데이터가 있으면
			System.out.println("검색 성공!!" + index); // 검색 성공!!3
		} else {
			System.out.println("검색 실패!!" + index); // 검색 실패!!-1
		}
		
		
		//오름차순
		Collections.sort(v);
		for(String s : v) {
			System.out.print(s + " "); //Busan Seoul 광주 대구 대전 대한민국 울산 인천 -> 가나다순으로 정렬
		}
		System.out.println();
		
		//내림차순
		Collections.sort(v, Collections.reverseOrder()); 
		for(String s : v) {
			System.out.print(s + " "); // 인천 울산 대한민국 대전 대구 광주 Seoul Busan 
		}
		System.out.println();
		
		//삭제
		v.remove(7); // 삭제할 index번호( ) // v.remove("Busan");
		for(String s : v) {
			System.out.print(s + " "); // 인천 울산 대한민국 대전 대구 광주 Seoul  -> Busan 삭제됨.
		}
		System.out.println();
		
		//용량 증가
		for(int i=1; i<=20; i++) {
			v.add(Integer.toString(i));
		}
		for(String s : v) {
			System.out.print(s + " "); // 인천 울산 대한민국 대전 대구 광주 Seoul 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
		}
		System.out.println();
		System.out.println("백터의 현재 용량 : " + v.capacity()); // 백터의 현재 용량 : 40
		System.out.println("데이터의 갯수 : " + v.size()); // 데이터의 갯수 : 27
		
		
		//특정범위 삭제 (tip - 백터는 용량이 알아서 늘어나지면 자동으로 줄어들지는 않음.사용자가 수동으로 줄여야함)
		for(int i=1; i<=10; i++) {
			v.remove(5); // 5번째 index 광주부터 시작해서 10개의 데이터를 지움
		}
		for(String s : v) {
			System.out.print(s + " "); // 인천 울산 대한민국 대전 대구 9 10 11 12 13 14 15 16 17 18 19 20 
		}
		System.out.println();
		System.out.println("백터의 현재 용량 : " + v.capacity()); //백터의 현재 용량 : 40
		System.out.println("데이터의 갯수 : " + v.size()); //데이터의 갯수 : 17
		
		
		//빈공간 공간 삭제(사용자가 수동으로 삭제해야함) - 데이터의 공간만 남기고 남은 빈공간(미사용공간) 삭제
		v.trimToSize();
		System.out.println();
		System.out.println("백터의 현재 용량 : " + v.capacity()); //백터의 현재 용량 : 17
		System.out.println("데이터의 갯수 : " + v.size()); //데이터의 갯수 : 17
		
		
		//모든 데이터 삭제
		v.clear();
		System.out.println("백터의 현재 용량 : " + v.capacity()); //백터의 현재 용량 : 17
		System.out.println("데이터의 갯수 : " + v.size()); //데이터의 갯수 : 0
	}
}

 

Vector(벡터)에 클래스를 저장할 수 있음

package com.day12;

import java.util.Vector;
//Vector안에는 뭐든 다들어간다.배열 안에도 뭐든 다들어간다.

class Test {
	
	String name;
	int age;
}

public class Test8 {

	public static void main(String[] args) {
		
		Vector<Test> v = new Vector<>(); // Vector의 자료형 : Object  /  Vector에 Test클래스를 넣는다.
		
		Test ob;
		ob = new Test();	// 여러 데이터를 넣을거라면 반드시 객체생성을 여러번 해줘야 함
		ob.name = "배수지";
		ob.age = 27;
		v.add(ob);
		
		ob = new Test();// 새로운 객체생성을 하지 않으면 동일주소값에 있는 데이터가 변경되버림.
		ob.name = "유인나";
		ob.age = 41;
		v.add(ob);
		
		// Test ob가 가지고 있는 주소값은 한번 쓰고 필요가 없음. Vector(벡터) v에 다 넣어놨음
		for(Test t : v) {
			System.out.println(t.name + ":" + t.age);
		}
		
	}

}

 

개념을 이해는 되지만 코딩으로 녹여서 사용하려고 하니 어렵다.. 역시 코딩은 예습 + 복습!

사람마다 흡수하는 속도는 다르기에 포기하지 않고 달려본다.

반응형

블로그의 정보

무작정 개발

무작정 개발

활동하기