본문 바로가기

자바의정석

Java 내부 클래스(inner class) 1. 내부 클래스(inner class) - 클래스 안의 클래스 2. 내부 클래스의 장점 - 내부 클래스에서 객체 생성 없이 외부 클래스의 멤버에 쉽게 접근 가능 - 코드 복잡성 감소(캡슐화): 외부 클래스에 불필요한 클래스 감춤 3. 내부 클래스의 종류와 특징 내부 클래스 특징 인스턴스 내부 클래스 (instance class) - 외부 클래스의 멤버변수 선언 위치에 선언 - 외부 클래스의 인스턴스 멤버처럼 다루어짐 - 주로 외부 클래스의 인스턴스 멤버들과 관련된 작업에 사용 스태틱 내부 클래스 (static class) - 외부 클래스의 멤버변수 선언 위치에 선언 - 외부 클래스의 static멤버처럼 다루어짐 - 주로 외부 클래스의 static멤버, static 메서드에서 사용될 목적으로 선언 지역 .. 더보기
Java default 메서드와 static 메서드 인터페이스에 abstract 메서드만 가질 수 있다는 것을 깨고 JDK1.8부터 default 메서드, static 메서드 추가가 가능해짐 1. 인터페이스에 default 메서드와 static 메서드가 추가된 이유? 1) static 메서드 인스턴스와 관계가 없는 독립적인 메서드이기 때문에 추가하지 못할 이유가 없었음 2) default 메서드 추상 메서드 추가가 되면 모두 구현해야하기 때문에 새로운 추상 메서드를 추가하기 어려운 문제 발생, 하지만 기능의 추가 또는 에러 등의 문제로 추상 메서드를 추가할 수 밖에 없고 이를 해결 하기위해 디폴트 메서드 고안됨 2. 디폴트 메서드(default method) - 추상메서드의 기본적인 구현을 제공하는 메서드 - 디폴트 메서드는 인스턴스 메서드로 인터페이스 .. 더보기
Java 인터페이스(interface) 1. 인터페이스(interface) - 추상 메서드의 집합 인터페이스와 추상 클래스의 공통점? 추상 메서드를 가지고 있다는 것 추상 클래스는 추상 메서드를! 가진 클래스, 인터페이스는 추상 메서드 만! 가진 것 (JDK 1.8부터는 상수, static 메서드, default 메서드 추가) 그렇다면 인터페이스와 추상 클래스의 차이점? 인터페이스는 iv(인스턴스 변수)를 가질 수 없음 추상 클래스는 iv, 생성자, 인스턴스 메서드를 가질 수 있음 - 구현된 것이 없는 설계도 - 모든 멤버가 public, 모든 상수는 static final, 모든 메서드는 abstract 이기 때문에 생략 가능 interface 인터페이스명 { public static final 타입 상수명 = 값; public abstra.. 더보기
Java 추상 클래스(abstract class), 추상 메서드(abstract method) 1. 추상 클래스(abstract class) - 미완성 설계도 - 미완성 메서드인 추상 메서드를 갖고 있는 클래스 - 다른 클래스 작성에 도움을 주기 위한 클래스 - 상속을 통해 추상 메서드를 완성해야 인스턴스 생성 가능 👉🏻 상속을 통해 추상 메서드를 구현하고 인스턴스 생성 2. 추상 메서드(abstract method) - 구현부인 몸통{}이 없는 미완성 메서드 - 몸통이 없는대신 abstract가 앞에 붙음 abstract 반환형 메서드명(); - 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상될 경우 사용 - 추상 클래스를 상속 받아 추상 메서드를 구현하는데, 추상 클래스에 있는 모든 메서드를 구현할 수도 있고 일부 메서드만 구현할 수도 있음 - 추상 메서드 호출 가능(호출 시 선언부만 필요).. 더보기
Java 매개변수의 다형성 다형성의 장점 1. 다형적 매개변수 2. 하나의 배열로 여러종류 객체 다루기 다형성 복습 1. Tv t = new SmartTv(); 조상 타입의 참조 변수로, 자손타입의 객체 다루기 2. 참조 변수의 형변환(리모컨바꾸기): 사용가능한 멤버 개수 조절 3. instanceof 연산자, 형변환 가능 여부 확인 1. 매개변수의 다형성 참조형 매개변수는 메서드 호출 시, 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있음 class Product { int price;// 제품 가격 int bonusPoint;// 제품 구매 시 제공되는 포인트 Product(int price) { // line 14에서 호출 this.price = price; bonusPoint = (int)(price/10.0);.. 더보기
Java 참조변수의 형변환과 instanceof 참조변수의 형변환 - 사용할 수 있는 멤버의 개수를 조절하는 것 - 조상 자손 관계의 참조변수는 서로 형변환 가능(상속관계가 아닌 클래스 간 형변환 불가) // 조상 Car와 Car를 상속받은 FireEngine과 Ambulance class Car {} class FireEngine extends Car {} class Ambulance extends Car {} FireEngine f = new FireEngine(); // FireEngine타입 참조변수 f, FireEngine타입의 객체 생성 Car c = (Car)f; // OK. Car타입 참조변수 c, FireEngine타입의 f를 Car타입으로 형변환(생략가능) FireEngine f2 = (FireEngine)c; // OK. Car타입.. 더보기
Java 다형성(polymorphism) 다형성(多形性, polymorphism) - 여러 가지 형태를 가질 수 있는 능력 - 조상 타입 참조 변수로 자손 타입 객체를 다루는 것 객체(≒인스턴스) 타입과 참조 변수 타입이 일치할 때와 일치하지 않은 경우? // 일반적인 케이스, 객체 타입(≒ 인스턴스 타입)과 참조 변수 타입 일치 // 자손 타입(SmartTv) 참조 변수(s)와 객체 타입(SmartTv) 일치 SmartTv s = new SmartTv(); // 하지만 타입이 불일치해도 됨, 객체 타입(≒ 인스턴스 타입)과 참조 변수 타입 불일치 // 조상 타입(Tv) 참조 변수(t)와 자손 타입(SmartTv) 불일치 Tv t = new SmartTv(); // 타입이 불일치하면 안되는 케이스 // Error, 자손 타입(SmartTv) 참.. 더보기
Java 제어자(modifier) 제어자(modifier) - 클래스와 클래스의 멤버(멤버변수, 메서드)에 부가적인 의미 부여 - 크게 접근 제어자와 그 외 제어자로 나눔 1) 접근 제어자: public, protected, (default), private 2) 그 외: static, final, abstract, native, transient, synchronized, volatile, strictfp - 하나의 대상에 여러 제어자를 같이 사용 가능(접근 제어자는 하나만 가능), 순서는 상관없지만 보통 접근 제어자를 가장 앞에 씀 public class Test { public static final int WIDTH = 200; // 제어자 3개 사용, public, static, final public static void ma.. 더보기