본문 바로가기

JAVA

(30)
7장_3 13. 추상 클래스와 추상 메서드 추상 클래스 추상 메서드를 갖고 있는 클래스 (미완성 설계도 = 미완성 클래스) 추상 클래스도 일반 클래스처럼 인스턴스 변수, 생성자, 메서드 모두 가질 수 있다. 단지, 플러스로 추상 메서드를 갖고 있다고 생각하면 된다. 추상 메서드를 갖고 있는 클래스에는 abstract를 붙여준다. 추상 클래스의 목적 다른 클래스 작성에 도움을 주기 위한 것으로 인스턴스 생성 불가 추상 클래스는 상속을 통해 자손이 각자의 역할에 맞게 오버라이딩하여 추상 메서드를 완성해야 인스턴스 생성 가능 추상 메서드 미완성 메서드 = 선언부만 있고 몸통{ }이 없는 메서드 추상 메서드 앞에는 abstract를 붙여준다. 상속을 통해 여러 개의 추상 메서드를 물려받았을 경우, 모두 구현해야줘야한다...
7장_2 9. 다형성 조상 타입 참조 변수로 자손 타입 객체를 다루는 것 SmartTv s = new SmartTv(); // 참조 변수와 인스턴스의 타입이 일치 Tv t = new SmartTv(); // 조상 타입 참조 변수로 자손 타입 인스턴스 참조 -> 다형성 위의 두 선언의 차이는? 일반TV는 멤버 5개를 가지고 있다. 스마트TV는 일반TV를 상속해서 일반TV꺼 5개 + 본인꺼 2개 총 7개를 가지고 있다. 첫 번째 선언은 스마트TV 리모컨으로 스마트TV의 7가지 기능을 모두 사용할 수 있다. 두 번째 선언은 일반TV 리모컨으로 스마트TV의 7가지 기능 중, 일반TV가 가진 5가지 기능만 사용할 수 있다. 더 적은 멤버를 사용 가능한데 왜! 다형성이 장점이 될 수 있을까? 반대로, 자손 타입 참조 변수로..
7장_1 1. 상속 - extends 키워드 사용 - 기존의 클래스로 새로운 클래스를 작성하는 것 = 두 클래스를 부모와 자식으로 관계를 맺어주는 것 - 자손은 조상의 모든 멤버를 상속받는다. (생성자, 초기화 블록 제외) - 자손의 멤버 개수는 조상보다 적을 수 없다. (최소 같거나 많음) - 자손의 변경은 조상에 영향을 미치지 않는다. 부모의 변경은 자손에 영향을 미친다. (깊은 관계가 있음) - 자바는 단일 상속만 허용한다. -> 두 개 이상의 클래스에서 같이 메서드가 존재할 경우 충돌의 문제가 있다. -> 이를 해결하기 위해 인터페이스 사용 🔎 상속과 포함 예제 // 상속 public class Main { public static void main(String[] args) { Circle c = new..
쓰레드 1. 프로세스와 쓰레드 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 된다. ex) 이클립스를 실행하면 필요한 메모리를 할당받아 이클립스는 프로그램에서 프로세스가 된다. 프로세스 (공장) 실행 중인 프로그램 프로그램을 수행하는 데 필요한 데이터 + 메모리(자원) + 쓰레드 쓰레드 (일꾼) 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것 프로세스는 쓰레드로 이루어져 있다. 멀티 쓰레드 프로세스 둘 이상의 쓰레드를 가진 프로세스 (대부분의 프로세스는 멀티쓰레드로 이루어져 있음) 멀티 쓰레딩의 장점 - CPU 사용률 향상 - 자원을 효율적으로 사용 - 사용자에 대한 응답성 향상 - 작업이 분리되어 코드가 간결해짐 멀티 쓰레딩의 단점 - 여러 쓰레드가 같은 프로세스 내에서..
다형성 / 동적 바인딩 / 인터페이스 / 추상클래스 다형성 다형성이란, 부모 타입으로 자식을 다루는 것을 말한다. 부모 타입으로 자식을 다룰 때, 부모 클래스의 결과가 실행되어야 한다고 생각되지만, 실제로는 자식 클래스의 결과가 실행된다. 이러한 현상을 동적 바인딩이라고 하는데, 동적 바인딩은 런타임 시점에 객체 타입을 기준으로 실행될 함수를 호출하는 것을 말한다. 컴파일 시점에서는 부모 타입을 참조하지만, 런타임 시점에는 객체 타입을 기준으로 호출하여 자식을 호출하는 것이다. 인터페이스 추상메서드(만 있는) 집합 껍데기 무조건 모두 public public abstract가 붙어야하는데 어차피 다 붙어서 편의상 떼버리고 쓰자! 추상클래스 추상메서드를 가지고 있는 클래스 일반 클래스처럼 인스턴스 변수, 메서드, 생성자 자유롭게 가질 수 있는데 추상메서드도..
static은 언제 붙일까? static 변수 모든 인스턴스에 공통된 값을 유지해야하는 것이 있을 때 객체가 새로 생성되어도 불변의 값일 때 ex) 카드 예제에서 카드의 가로 세로 크기 고정 static 메서드 인스턴스 변수나 메서드를 절대 사용하지 않는 메서드에 붙임 즉, 지들끼리만 지지고 볶고 할 때 static 메서드 안에서만! 논다라고 생각해 밖은 전혀 신경쓰지마!! static은 static이랑만 논다!! (하지만 인스턴스 변수는 static을 막 갖다 쓰지)
Comparator / Comparable 인터페이스 Comparator / Comparable 인터페이스란? 컬렉션을 정렬하는데 필요한 메서드를 정의한다. 그렇다면 둘의 차이는? Comparable - comparaTo(Object o1) - 기본 정렬 기준 Comparator - compare(Object o1, Object o2) - 다른 정렬 기준 두 메서드의 반환형은 int로 0, 1, -1을 반환한다. o1 == o2 -> 비교하는 두 객체가 같으면 0 o1 비교하는 값보다 작으면 -1, o1 > o2 -> 비교하는 값보다 크면 1 // 기본 정렬 기준 public interface Comparable { int compareTo(Object o1); // 객체 자신(this)과 o1을 비교 } // 다른 정렬 기준 public interface..
지네릭스 지네릭스란? 컴파일 시 타입을 체크해주는 기능. 지네릭스가 생기기 전에는 컴파일러가 컴파일 단계에서 형변환 에러를 잡지 못하고 런타임 에러가 발생했다. 그래서 컴파일 단계에서 에러가 발생하게 하기 위해 (=컴파일러를 도와주기 위해) 지네릭스가 생겼다. ClassCastException(형변환 에러)이 발생하지 않도록 막아준다. 첫 번째 장점. 타입의 안정성 제공 -> 타입 체크를 정확하게 해 줌 ArrayList는 Object 타입으로 모든 객체를 반환한다. (즉, 다양한 객체를 담을 수 있다는 뜻) 하지만 보통 한 종류의 객체를 담는 경우가 많다. 그래서 아예 지네릭 타입으로 객체를 지정해준다. 지네릭 타입과 일치하지 않는 Audio()를 추가하려고 하면 컴파일 에러가 발생한다. ArrayList tv..