가쟤의 해변일기 🐳

풀스택과정 Java - 인터페이스 | Abstract Class | Collection API | Access Modiifier | Abstract Class | Collection API | Comparator, Comparable 본문

풀스택과정

풀스택과정 Java - 인터페이스 | Abstract Class | Collection API | Access Modiifier | Abstract Class | Collection API | Comparator, Comparable

바닷가쟤 2025. 5. 19. 14:00

 

자바 프로젝트도 해서 바쁘고 감기에 무슨 2-3주 걸려있어서 이것 저것 놓친게 많다...ㅜㅠ

수업 필기는 계속 해놨는데 블로그에 못 올려서 밀린걸 이제 다 올려보려 한다.. !!

코테 스터디ㅜㅜ 많이 밀려서 오늘부터 남아서 열심히 해야겟다 !


💡 2025 04 25

1. 인터페이스 정의와 사용 용도
2. Abstract Class
3. Collection API

 

Class 부모는 Polymorhism 컨테이너 타입으로 사용했다.

배열 타입으로 생성한다.

 

인터페이스는 Flyer arr = new Flyer[3]; 이건 되는데 abstract랑 상관 없이 타입만 만드는 거라 된다고 한다.

Flyer[] flies = { new Bird(), new SuperMan(), new Bird()}; 이건 된다 . . .

 

인터페이스가 가지는 메소드를 오버라이딩 하고 누군가가… 객체를 생성한 것이다.

인터페이스는 객체를 생성할 수 없음. .

 

public abstract class Employee 이렇게 하면 좋다.

부모 클래스도 타입을 만들어 주는 애니까 .. . 객체 생성을 못 하도록 막아버리는 것이다..!

자바는 다중 상속이 안 된다.

그래서 다중 상속을 인터페이스로 해결한다.

인터페이스는 다중 상속을 허용한다.

class Child extends A implements B, C, D

 



💡 2025 04 28

1. Access Modifier
2. Abstract Class
3. Collection API ⭐
4. Comparator, Comparable </aside>

 

Virtual Method Invocation 원리

컴파일 시점 메소드 ::: 부모 메소드가 호출

실행 시점 메소드 ::: 자식 메소드가 호출

상속 시 오버라이딩 된 메소드에서는 부모의 메소드가 숨겨지고 자식 메소드가 우선적으로 실행된다.

Method Overriding Rule

  1. 메소드 선언부 일치(반환 타입, 메소드명, 인자값)
  2. 메소드 구현부는 반드시 달라야 한다.
  3. Model Modifier, Less Exception!!!

Polymorphism 다형성

부모 타입으로 여러 개의 자식들을 단일하게 관리하는 능력

부모 타입으로 여러 자식들을 생성하는 기법

 

Collection

Set

  • unique

Collection 다음으로 원시적인 방법으로 객체를 저장

중복 X, 순서 X

List

  • ordered

시작과 끝점을 가지면서 환원형으로 객체를 저장

내부적으로 INDEX로 관리되는 것들은 다 순서를 가진다!!1

중복 O, 순서 O

Map

  • KEY - VALUE가 쌍으로 저장

Collection 계보도에서 볼 수 없는 독자적인 방식으로 객체를 저장

중복 X(KEY), 순서 X

ArrayList, LinkedList, (Vector)

ArrayList

  • List의 자식으로, 순서를 가지면서 객체를 저장한다. (중복도 가능)

add(), remove(), get(), set(), size(), isEmpty(), clear(), removeAll()

public class ArrayListTest1 {
	public static void main(String[] args) {
		// 알아서 10칸짜리 배열이 만들어지고.. 11명을 추가하려 하면 알아서 다시 10칸이 늘어난다.
		ArrayList<Employee> list = new ArrayList<>();
		list.add(new Employee(111, "AAA", 20000.0));  // add
		list.add(new Employee(222, "BBB", 20000.0));
		list.add(new Employee(333, "CCC", 20000.0));
		list.add(new Employee(444, "DDD", 20000.0));
		
		// 1. 3번째 객체를 삭제
		Employee delEmp = list.get(2);  // get
		boolean find = list.remove(delEmp);  // remove
		System.out.println("정말 삭제 되었나요? > " + find);
		
		// 2. 2번째 FFF 객체를 추가
		list.add(1, new Employee(225, "FFF", 30000.0));
		
		// 3. 마지막 객체의 급여를 32000.0로 변경
		list.set(list.size() - 1, new Employee(444, "DDD", 32000.0));  // size
		
		// 4. list안의 모든 정보를 출력(list 안이 비어있지 않다면)
			for(Employee e: list) {
				if(!list.isEmpty())  // isEmpty
					System.out.println(e);			
		}
	}
}

ArrayList 정렬 (오름차순, 내림차순)

Comporator 방식으로 정렬

public class SortTest3 {
	public static void main(String[] args) {
		// 알아서 10칸짜리 배열이 만들어지고.. 11명을 추가하려 하면 알아서 다시 10칸이 늘어난다.
		ArrayList<Employee> list = new ArrayList<>();
		list.add(new Employee(111, "AAA", 20000.0));
		list.add(new Employee(222, "BBB", 20000.0));
		list.add(new Employee(333, "CCC", 20000.0));
		list.add(new Employee(444, "DDD", 20000.0));
		
		// Collection은 자체적으로 toString() 오버라이딩 되어져있다.
		// Collection안의 데이터를 출력하도록 되어져 있다.
		System.out.println(list);
		
		for(Employee e : list)
			System.out.println(e);
		
		System.out.println("=== 오름차순 정렬 ===");
		Collections.sort(list, new Comparator<Employee>() { //⭐⭐⭐

			@Override
			public int compare(Employee o1, Employee o2) {
				return o1.getEmpno() - o2.getEmpno();
			}
		});
		
		for(Employee e : list)
			System.out.println(e);
		
		System.out.println("=== 내림차순 정렬 ===");
		Collections.sort(list, new Comparator<Employee>() {
			@Override
			public int compare(Employee o1, Employee o2) {
				return o2.getEmpno() - o1.getEmpno();
			}
		});
		
	}
}

정렬은 기능이 아니고 여기서 잠깐 사용하는 것이기 때문에 test에서 만든다.

ArrayList 정렬 (오름차순, 내림차순)

정렬하고자 하는 필드를 가지고 있는 클래스에서 정렬 함.

package com.edu.vo;

// 부모 클래스
public class Employee implements Comparable<Employee> {
	private String name;
	private double salary;
	private int empno;

	public Employee() {};
	public Employee(int empno, String name, double salary) {
		this.name = name;
		this.salary = salary;
		this.empno = empno;
	}
	
	public String getName() {
		return name;
	}
	public double getSalary() {
		return salary;
	}

	public int getEmpno() {
		return empno;
	}
	
	// 오름차순 정렬 !
	
	@Override
	public int compareTo(Employee e) {
		// TODO Auto-generated method stub
		return Double.compare(salary, e.getSalary());
		// 내림차순 정렬은
		// -Double.compare...
	}
	
	@Override
	public String toString() {
		return "Employee [name=" + name + ", salary=" + salary + ", empno=" + empno + "]";
	}	
}

여기서 먼저 만들어준다..!

public class SortTest3 {
	public static void main(String[] args) {
		// 알아서 10칸짜리 배열이 만들어지고.. 11명을 추가하려 하면 알아서 다시 10칸이 늘어난다.
		ArrayList<Employee> list = new ArrayList<>();
		list.add(new Employee(111, "AAA", 20000.0));
		list.add(new Employee(222, "BBB", 70000.0));
		list.add(new Employee(333, "CCC", 60000.0));
		list.add(new Employee(444, "DDD", 40000.0));
		
		System.out.println("정렬 전 => ");
		for(Employee e : list) System.out.println(e);
	
		Collections.sort(list); // ⭐⭐⭐ 이렇게 사용 !
		
		System.out.println("정렬 후 => ");
		for(Employee e : list) System.out.println(e);
	}
}

 

Team 리팩토링 워크샵

⭐⭐⭐ Jira - 작업방식, 역할, 진행사항 시각적인 공유

Github - 코드 공유, 배포

3명 기능 분담

메소드(기능)이 작업 단위다.

Test에서 확인하는 것 - 어떻게 확인 할 것인지

코드 배포, 공유하는 방법 - 깃허브 팀원끼리 작성 !

Jira → 시각적으로 역할 배분, 작업 진행 상황 check

728x90