본문 바로가기

자바의정석10

[자바의 정석] - 인터페이스(interface) 인터페이스(interface) 인터페이스를 이해하려면 추상화, 다형성에 대한 이해가 필수적이다. ❓인터페이스란 ⭐ 추상 메서드의 집합 핵심 구현된 것이 전혀 없는 설계도, 껍데기(모든 멤버가 public) interface 인터페이스이름 { public static final 타입 상수이름 = 값; public abstract 메서드이름(매개변수목록); } 인터페이스는 변수를 가질 수 없다. 무조건 상수만 가질 수 있다. 메서드는 전부 다 추상메서드 = 추상메서드의 집합 interface PlayingCared { public static final int SPACE = 4; final int DIAMOND = 3; //public static final int DIAMOND = 3; static int.. 2023. 9. 26.
[자바의 정석] - 다형성 다형성 객체지향에서 제일 중요한 개념이다. 다형성을 이해 못 하면 추상클래스, 인터페이스 이해를 못 할 것이다. 여러 가지 형태를 가질 수 있는 능력 조상 타입 참조 변수로 자손 타입 객체를 다루는 것 class SmartTv extends Tv {} Tv t = new SmartTv(); //타입 불일치. ❓ 객체와 참조변수의 타입이 일치할 때와 일치하지 않을 때의 차이 가정 `Tv` 클래스의 멤버(참조변수, 메서드): 5개 `SmartTv` 클래스의 멤버(참조변수, 메서드): 7개 `SmartTv s = new SmartTv();` 타입이 일치할 때는 멤버 7개를 다 사용할 수 있다. `Tv t = new SmartTv();` 일치하지 않을 때는 멤버 5개만 사용할 수 있다. 자손 타입의 참조변수로 .. 2023. 9. 25.
[자바의 정석] - 추상 클래스와 추상메서드 추상클래스, 추상 메서드 미완성(부족한) 설계도 미완성 메서드를 갖고 있는 클래스 abstract class Player { //추상클래스(미완성 클래스) abstract void play(int pos); //추상메서드(몸통{}이 없는 미완성 메서드) abstract void stop(); //추상메서드 } 다른 클래스 작성에 도움을 주기 위한 것이다. 인스턴스 생성이 불가능하다. Player p = new Player(); //에러. 추상 클래스의 인스턴스 생성 불가 상속을 통해 추상 메서드를 완성해야 인스턴스 생성이 가능하다. class AudioPlayer extends Player { void play(int pos); { /* 생략 */} void stop(); { /* 생략 */} } Aud.. 2023. 9. 25.
[자바의 정석] 참조변수의 형변환, instanceof 연산자 참조변수의 형변환 사용할 수 있는 멤버(멤버 변수, 메서드)의 갯수를 조절하는 것 이거 외에는 아무것도 없다!! 주소값이나 객체? 절대 안바뀐다. 조상 자손 관계일때만 참조변수 서로 형변환 가능(형제X) class Car {} class FireEngine extends Car {} FireEngine f = new FireEngine(); Car c = (Car)f; //조상인 Car타입으로 형변환(생략가능) 예제 class CastingTest1 { public static void main(String args[]) { Car car = null; FireEngine fe = new FireEngine(); FireEngine fe2 = null; fe.water(); car = fe; // car.. 2023. 9. 24.
[자바의 정석] 제어자, 캡슐화 제어자(modifier) 영어로 따지면 형용사다. 클래스와 클래스의 멤버(멤버 변수, 메서드)에 부가적인 의미 부여 접근 제어자 public, protected, (default), private default는 아무것도 아님. 그 외 static, fina, abstract, synchronized, volatile, strictfp …. 하나의 대상에 여러 제어자를 같이 사용 가능하다.(접근 제어자는 하나만) public class ModifierTest { public static final int WIDTH = 200; } static - 클래스의, 공통적인 final - 마지막의, 변경될 수 없는 final class FinalTest { //조상이 될 수 없는 클래스 final int MAX_.. 2023. 9. 24.
[자바의 정석] 상속, 참조변수 super, 생성자 super() 상속 기존의 클래스로 새로운 클래스를 작성하는 것(코드의 재사용) 두 클래스를 부모와 자식으로 관계를 맺어주는 것 class Car {} class FireEngine extends Car {} 자손은 조상의 모든 멤버를 상속받는다.(생성자, 초기화블럭 제외) 왜 자손과 조상이라는 단어를 사용했느냐? 부모의 부모도 있을 수 있다. 바로 위에 부모것만 상속받는 게 아니기 때문이다. 자손의 멤버 개수는 조상보다 적을 수 없다.(같거나 많다.) 자손의 변경은 조상에 영향을 미치지 않는다. 자식 클래스의 변경이 있어도 조상에 영향이 가지 않는다. class Tv { boolean power; // 전원상태(on/off) int channel;// 채널 void power() { power = !power; } .. 2023. 9. 23.
[자바의 정석] 생성자, 변수/멤버 변수의 초기화 챕터 6 끝! 19개의 영상에서 많은 걸 배웠다. 7까지 달려보자 아자자 생성자(contrunctor) 인스턴스가 생성될 때마다 호출되는 ‘인스턴스 초기화 메서드’ 인스턴스 초기화 메서드란? 인스턴스 변수 초기화하는 메서드이다. Time t = new Time(); //객체 생성 t.hour = 12; //초기화 t.minute = 34; //초기화 t.second = 56; //초기화 ❓ 이것을 간단하게 할 수 없을까 Time t = new Time(12, 34, 56); //생성자 호출 특징 이름이 클래스 이름과 같아야 한다. 리턴값이 없다.(void 안 붙임) 모든 클래스는 반드시 생성자를 가져야 한다. 기본 생성자 매개 변수가 없는 생성자 생성자가 하나도 없을 때만, 컴파일러가 자동 추가 매개변수.. 2023. 9. 22.
[자바의 정석] static 메서드와 인스턴스 메서드, 오버로딩 static 메서드와 인스턴스 메서드 인스턴스 메서드 인스턴스 생성 후 ‘참조변수. 메서드이름()’로 호출 인스턴스 멤버와 관련된 작업을 하는 메서드 메서드 내에서 인스턴스 변수 사용가능 static 메서드(클래스메서드) 객체생성없이 ‘클래스이름. 메서드이름()’으로 호출 인스턴스 멤버와 관련없는 작업을 하는 메서드 메서드 내에서 인스턴스 변수 사용불가 결론 메서드 내에서 인스턴스 변수를 쓰냐 안 쓰냐의 차이다. class MyMath2 { long a, b; //인스턴스변수 a, b만을 이용해서 작업하므로 매개변수가 필요없다. long add(){ return a + b; // a, b는 인스턴스변수 } //인스턴스변수와 관계없이 매개변수만으로 작업이 가능하다. static long add(long a.. 2023. 9. 21.
[자바의 정석] 기본형/참조형 매개변수, 참조형 반환타입 기본형 매개변수 class Data { int x; } class PrimitiveParamEx { public static void main(String[] args) { Data d = new Data(); d.x = 10; System.out.println("main() : x = " + d.x); change(d.x); System.out.println("After change(d.x)"); System.out.println("main() : x = " + d.x); } static void change(int x) { // 기본형 매개변수 x = 1000; System.out.println("change() : x = " + x); } } //결과 //main() : x = 10 //change.. 2023. 9. 20.