목록Language/Java (19)
선릉역 1번 출구
상속과 달리 여러 인터페이스 implements 가능함 -> 모호성이 없기 때문임 인터페이스 모든 메서드가 추상 메서드로 선언됨 public abstract 추상 메서드로 선언된다는 말은 구현 코드가 없다는 것임 자바 8 부터 디폴트 메서드(default method)와 정적 메서드(static method) 기능의 제공으로 일부 구현 코드가 있음 모든 변수는 상수로 선언됨 public static final 1. 클래스나 프로그램이 제공하는 기능을 명시적으로 선언 2. 일종의 클라이언트 코드와의 약속이며 클래스나 프로그램이 제공하는 명세(specification) 3. 클라이언트 프로그램은 인터페이스에 선언된 메서드 명세만 보고 이를 구현한 클래스를 사용할 수 있음 4. 어떤 객체가 하나의 인터페이스 ..
라이브러리 vs 프레임워크 라이브러리: JDK, 내가 흐름을 다 정하는 것임 프레임워크: 안드로이드, 흐름이 다 정해져있고 내가 하는 일은 구멍을 메우는 것임 템플릿 메서드 - 추상 메서드나 구현 된 메서드를 활용하여 코드의 흐름(시나리오)를 정의하는 메서드 - final로 선언해서 하위 클래스에서 재정의할 수 없게 함 중요한 흐름을 정의하고 있기 때문 단, 다르게 구현되어야 하는 부분은 추상 메서드로 선언하여 하위 클래스에서 구현 하도록 함 - 프레임워크에서 많이 사용되는 설계 패턴 abstract class Car{ public abstract void drive(); public abstract void stop(); public void startCar() { System.out.println("..
메서드 선언: 반환 타입, 메서드 이름, 매개변수로 구성됨 메서드 정의: 메서드 구현과 동일한 의미로, 구현부(body, {})를 가짐 ex) int add(int x, int y) = 선언 | int add(int x, int y) {} = 정의, {}를 가지기 때문임 메서드에 구현 코드가 없다면 abstract로 선언하며, 추상 메서드를 가진 클래스를 abstract로 선언함 - 추상 메서드가 없어도 클래스에 abstract를 선언하여, 추상 클래스로 명명할 수 있음 이 경우, 해당 클래스는 상속만을 위해 만든 클래스임 추상 클래스를 사용하는 이유 해당 객체를 인스턴스화 하기 위함이 아닌, 상속을 하기 위함 abstract class Computer { public abstract void displ..
1. 상속 - extends - 단 하나의 클래스 상속만이 가능함(single inheritance) - 언제 상속을 구현하는가? 상위 클래스는 하위 클래스보다 더 일반적인 개념과 기능을 가짐 하위 클래스는 상위 클래스보다 더 구체적인 개념과 기능을 가짐 하위 클래스가 상위 클래스의 속성과 기능을 확장함 - 업캐스팅 class Animal { void sound() { System.out.println("Animal makes a sound"); } } class Cat extends Animal { @Override void sound() { System.out.println("Cat meows"); } } public class Main { public static void main(String[] ..
언어를 사용안한지 너무 오래돼서 그런가 다시 자바를 공부하던 중.. 하기에서 [2][4] 배열이 생긴다고 생각했다. int[][] arr = {{1,2,3}, {4,5,6,7}} arr[0] = {1, 2, 3, null} arr[1] = {4, 5, 6, 7} ※그런데 위와 같이 선언하면 2차원 배열의 형태가 정규화 되지 않았기 때문에 각 행마다 열의 개수가 달라지게 됨 우리가 아래처럼 선언한다면 첫 번째 행은 3개의 열, 두 번째 행은 4개의 열, 세 번째 행은 2개의 열을 가지게 됨 int[][] arr = { {1, 2, 3}, {4, 5, 6, 7}, {8, 9} }; [배열 초기화 하기] 배열은 선언과 동시에 자료형에 따라 초기화 됨 ( 정수는 0, 실수는 0.0, 객체는 null)
객체 배열 = 요소가 되는 객체의 주소가 들어갈(4바이트, 8바이트) 메모리만 할당되고(null) 각 요소 객체는 생성하여 저장해야 함 얕은 복사 - 주소만 복사해서 같은 객체를 가리키는 경우 사용 - System.arrayCopy(src, srcPos, dest, destPos, length) 로 사용하면 됨 깊은 복사 - 두 개의 배열이 다른 객체를 사용하는 경우 사용 얕은 복사 예시 public static void main (String[] args) { Book[] library = new Book[5]; //선언 시에 객체의 주소가 들어갈(4바이트, 8바이트) 메모리만 할당됨(null) Book[] copyLibaray = new Book[5]; //선언 시에 객체의 주소가 들어갈(4바이트, ..