[JAVA+국비교육] 내부클래스(익명의, 무명의, Anonymous클래스), Vector
by 무작정 개발반응형
2022.01.06(13일 차)
날씨가 점점 추워진다. 건강관리에 신경 쓰자!
오늘의 수업 내용
내부 클래스
클래스 안에 클래스를 생성한다.
방법
- 클래스 안에 클래스
- 메서드 안에 클래스
- 클래스를 static으로 만든다
- 무명의 클래스
클래스 안에 클래스
- 내부 클래스(Inner)
javapackage 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)
javapackage 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으로 클래스 만들기
- 내부 클래스(중첩)
javapackage 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 클래스)
- 메모리 낭비가 적다. 한번 사용하고 버림을 반복
- 안드로이드에서 많이 사용함
javapackage 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 등이 있다.
javapackage 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()
javapackage 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 + " "); } } }

Vector의 다양한 메서드
- set()
- insertElementsAt()
- indexOf()
- remove()
- capacity()
- clear()
javapackage 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(벡터)에 클래스를 저장할 수 있음
javapackage 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); } } }
개념을 이해는 되지만 코딩으로 녹여서 사용하려고 하니 어렵다.. 역시 코딩은 예습 + 복습!
사람마다 흡수하는 속도는 다르기에 포기하지 않고 달려본다.
블로그의 정보
무작정 개발
무작정 개발