본문 바로가기

분류 전체보기

(449)
내부 클래스 - instance 클래스/ static 클래스 내부 클래스 : 클래스 안에 선언된 클래스 어느 위치에 선언하느냐에 따라서 4가지 형태가 있을 수 있다. 첫번째. 클래스 안에 인스턴스 변수, 즉 필드를 선언하는 위치에 선언되는 경우, 이런 경우를 보통 중첩클래스 혹은 인스턴스 클래스라고 한다. package Java02; public class InnerExam { // 내부클래스 // 필드를 선언하는 위치에 클래스를 선언하는 것이다. // 1. Cal이라는 클래스 선언 class Cal{ // 클래스를 선언하는 거니깐 똑같이 필드를 선언할 수도 있고 // 메소드를 정의해 놓을 수도 있다. int value = 0; public void plus(){ value++; } } } 이렇게 내부에 존재하고 있는 Cal이라는 객체를 사용하기위해서는 어떻게해야..
인터페이스(interface)의 default method 기존 인터페이스는 추상메소드만 가질 수 있었는데 Java 8 이후는 default method와 static method를 정의할 수 있도록 변경되었다. 인터페이스가 default라는 키워드로 선언이 되면 메소드를 구현할 수가 있고, 또한 이를 구현한 클래스 내에서는 default메소드를 오버라이딩 할 수 있다. Calculator.java package Java02; public interface Calculator { public int plus(int a, int b); public int multiple(int a, int b); default int exec(int a, int b){ return a+b; } } default라는 키워드를 붙여서 메소드를 선언하면 신기하게도 오류가 발생하지 않고..
인터페이스(interface) 사용 인터페이스를 정의할 때는 그 객체를 선언하기 전에 이 객체가 어떤 어떤기능들을 갖고 있으면 좋을까?하는 이런 기능들을 모아놓은 것이다라고 생각하면 된다. 그런데 그기능들을 정의만 했지, 실제 구현을 하지않았기 때문에 인터페이스만 갖고 무언가를 사용할 수는 없다. 그래서 이런 인터페이스를 반드시 구현해서 사용해야만 한다. LedTV.java(interface인 TV를 구현, implements) package Java02; // class LedTV를 정의하는데 이 LedTV는 인터페이스 TV를 구현하겠다라는 의미 // 이 의미는 TV가 가진 기능들을 LEDTV도 갖게하겠다라는 의미와 같다. public class LedTV implements TV{ @Override public void turnOn()..
인터페이스(interface) 정의 우리는 객체를 만들 기 전에 그 객체가 어떤 기능을 가지고 있을까? 에 대하여 먼저 고민해야 한다. 만약, 우리가 TV라는 객체를 만든다고 가정해보자. 우리는 TV가 어떤 기능을 가질까라는 고민을 하게 될 것이다. 기본적으로 TV의 기능으로 전원을 켜고 끄는 기능, 볼륨 조절 기능, 채널 변경 기능도 꼭 있었으면 좋겠다. TV를 어떻게 만들지 내부적으로 내가 전원을 켰을 때, 어떤 식으로 구현이 되어 켜지는지 모르지만 이런 기능들은 필요해. 라고 생각할 수 있다. 그래서 꼭 필요한 기능들, 무슨 기능들이 있으면 좋을까?라는 고민을 할 수 있을 텐데 이를 구현은 하지 않고, 그 기능들만 쭉 선언해서 가지고 있는 것을 "interface(인터페이스)"라고 한다. 인터페이스: 서로 관계가 없는 물체들이 상호 ..
[프로그래머스] 클래스형변환 실습(2) Car.java public class Car{ public int gas; } Suv.java public class Suv extends Car{ } Truck.java public class Truck extends Car{ } Bus.java public class Bus extends Car{ } GasStraintion.java(수정 전) public class GasStation{ public static void main(String[]args){ GasStation gasStation = new GasStation(); //gasStation인스턴스 생성 Suv suv = new Suv(); //suv 인스턴스 생성 Truck truck = new Truck(); //truck 인스턴스 ..
클래스형변환 클래스 형변환 부모타입으로 자식객체를 참조하게 되면 부모가 가지고 있는 메소드만 사용할 수 있다. 자식객체가 가지고 있는 메소드나 속성을 사용하고 싶다면 형변환 해야 한다. 형변환 Car6.java public class Car6{ public void run(){ System.out.println("Car6의 run메소드"); } } Bus2.java public class Bus2 extends Car{ public void ppangppang(){ System.out.println("빵빵."); } } BusExam02.java package Java02; public class BusExam02 { public static void main(String[] args) { Car6 c = new B..
오버라이딩(Overriding) 오버라이딩(Overriding) 부모가 가지고 있는 메소드와 똑같은 모양의 메소드를 자식이 가지고 있는 것. 즉. 오버라이딩이란 메소드를 재정의 하는 것이다. 부모가 물려준 기능이 내가 필요하기는 하지만 그 기능을 그대로 사용하는 게 별로 좋지 않을 때. 부모가 물려준 메소드를 자식이 다시 정의해서 사용하는 것을 오버라이딩이라 한다. 요약. 부모클래스의 메소드를 자식클래스에서 재정의하여 사용하는 것 메소드 오버라이딩 Car 클래스를 상속받은 Bus 클래스는 부모클래스가 가진고 있는 run() 메소드를 잘 사용한다. Car5.java(부모클래스) //run 메소드를 가지고 있는 Car클래스 public class Car5{ public void run(){ System.out.println("Car5의 r..
super & 부모생성자 super와 부모생성자 class가 인스턴스화 될 때 생성자가 실행되면서 객체의 초기화를 한다. 그때 자신의 생성자만 실행이 되는 것이 아니고, 부모의 생성자부터 실행된다. Car4.java ( 부모생성자 ) package Java02; public class Car4 { // Car4클래스의 기본생성자 public Car4(){ System.out.println("Car4의 기본생성자입니다."); } } Truck.java ( 자식생성자 ) package Java02; //Car4를 상속받은 Truck 클래스 public class Truck extends Car4{ //Truck이라는 클래스의 기본생성자 public Truck(){ System.out.println("Truck의 기본생성자입니다.")..