JAVA 35

[JAVA] 다형성 (polymorphism)

여러 가지 형태를 가질 수 있는 능력 조상 타입 참조 변수로 자손 타입 객체를 다루는 것 📌 다형성이란 ‘여러 가지 형태를 가질 수 있는 능력’을 의미합니다. 예를 들어 자동차의 핸들을 교체하면 핸들링이 부드러워지고 바퀴를 교체하면 승차감이 좋아집니다. 소프트웨어 또한 구성하고 있는 객체를 바꿨을 때 소프트웨어의 실행 성능 및 결과물이 다르게 나올 수 있습니다. 참조변수 타입변환을 활용해서 다형성을 구현할 수 있습니다. Tire tire = new HankookTire("HANKOOK"); Tire tire = new KiaTire("KIA"); 부모타이어 변수 = 자식타이어객체; 를 선언하여 자동 타입변환된 변수를 사용하여 각각의 자식타이어 객체에 재정의 된 메서드를 통해 다양한 승차감을 가진 자동차를..

JAVA 2023.06.01

[JAVA] 참조변수의 타입변환

자동 타입 변환 📌 부모타입 변수 = 자식타입객체; 는 자동으로 부모타입으로 변환이 일어납니다. 자식 객체는 부모 객체의 멤버를 상속받기 때문에 부모와 동일하게 취급될 수 있습니다. 예를 들어 포유류 클래스를 상속받은 고래 클래스가 있다면 포유류 고래 = 고래객체; 가 성립될 수 있습니다. 왜냐하면 고래 객체는 포유류의 특징인 모유수유 행위를 가지고 있기 때문입니다. 다만 주의할 점은 부모타입 변수로 자식객체의 멤버에 접근할 때는 부모 클래스에 선언된 즉, 상속받은 멤버만 접근할 수 있습니다. 예제 코드 Mammal 부모 클래스 class Mammal { // 포유류는 새끼를 낳고 모유수유를 한다. public void feeding() { System.out.println("모유수유를 합니다."); }..

JAVA 2023.06.01

[JAVA] super 및 super()

super 📌 super는 부모 클래스의 멤버를 참조할 수 있는 키워드이다. 객체 내부 생성자 및 메서드에서 부모 클래스의 멤버에 접근하기 위해 사용될 수 있다. 자식 클래스 내부에서 선언한 멤버와 부모 클래스에서 상속받은 멤버와 이름이 같을 경우 이를 구분하기 위해서 사용된다. 부모 클래스 // 부모 클래스 Car String model; // 자동차 모델 String color; // 자동차 색상 double price; // 자동차 가격 자식 클래스 // 자식 클래스 SportsCar String model = "Ferrari"; // 자동차 모델 String color = "Red"; // 자동차 색상 double price = 300000000; // 자동차 가격 자식 클래스의 메서드 publi..

JAVA 2023.06.01

[JAVA] 오버라이딩

📌 부모 클래스로부터 상속받은 메서드의 내용을 재정의 하는 것을 오버라이딩이라고 한다. 부모 클래스의 메서드를 그대로 사용 가능하지만 자식 클래스의 상황에 맞게 변경을 해야하는 경우 오버라이딩을 사용한다. 오버라이딩을 하기 위해서는 아래 조건들을 만족해야한다. 선언부가 부모 클래스의 메서드와 일치해야 합니다. 접근 제어자를 부모 클래스의 메서드 보다 좁은 범위로 변경할 수 없습니다. 예외는 부모 클래스의 메서드 보다 많이 선언할 수 없습니다. 코드 예시 자동차 클래스 (부모클래스) public class Car { String company; // 자동차 회사 private String model; // 자동차 모델 private String color; // 자동차 색상 private double pr..

JAVA 2023.06.01

[JAVA] Object

📌 Object 는 말그대로 “객체”를 의미하는 단어이며 보통, Object 클래스를 의미한다. Object 클래스는 Java 내 모든 클래스들의 최상위 부모 클래스이다. 따라서, 모든 클래스는 Object의 메서드를 사용할 수 있다. 또한 부모 클래스가 없는 자식 클래스는 컴파일러에 의해 자동으로 Object 클래스를 상속받게 된다. 🧑‍💻 Object 클래스의 메서드(많은 것중 몇가지) Object clone() : 해당 객체의 복제본을 생성하여 반환함. boolean equals(Object object) : 해당 객체와 전달받은 객체가 같은지 여부를 반환함. Class getClass() : 해당 객체의 클래스 타입을 반환함. int hashCode() : 자바에서 객체를 식별하는 정수값인 해시 ..

JAVA 2023.06.01

[JAVA] final 클래스와 final 메서드

📌 final 키워드를 클래스와 메서드에 선언하면 어떻게 될까? public final class Car {} ... public class SportsCar extends Car{} // 오류가 발생합니다. 클래스에 final 키워드를 지정하여 선언하면 최종적인 클래스가 됨으로 더 이상 상속할 수 없는 클래스가 된다. public class Car { public final void horn() { System.out.println("빵빵"); } } ... public class SportsCar extends Car{ public void horn() { // 오류가 발생합니다. super.horn(); } } 메서드에 final 키워드를 지정하여 선언하면 최종적인 메서드가 됨으로 더 이상 오버라이..

JAVA 2023.06.01

[JAVA] 클래스간의 관계

포함 관계 포함관계는 상속과 같은 방식으로 관계를 맺는 게 아닌, 클래스 내에서 다른 클래스의 인스턴스를 생성하면 포함 관계라고 볼 수 있다. class Car { Door b = new Door(); } Car 클래스에서 Door 클래스의 인스턴스를 생성한다. 이렇게 클래스 내부에서 다른 클래스의 인스턴스를 생성하면 포함관계라고 볼 수 있다. 관계 설정 📌 클래스간의 관계를 분석하여 관계설정을 해줄 수 있습니다. 상속관계 : is - a (”~은 ~(이)다”) 포함관계 : has - a (”~은 ~을(를) 가지고 있다”) ex) 상속관계 상속관계 : 고래는 포유류다 👍 포함관계 : 고래는 포유류를 가지고 있다…? 🤔 ex) 포함관계 자동차는 타이어를 가지고 있다. 👍 자동차는 차문을 가지고 있다. 👍 ..

JAVA 2023.06.01

[JAVA] 상속 개념 및 예시

클래스간의 관계와 상속 📌 상속의 사전적 정의는 부모가 자식에게 물려주는 행위를 말합니다. 객체 지향 프로그램에서도 부모 클래스의 필드와 메서드를 자식 클래스에게 물려줄 수 있습니다. 상속을 사용하면 적은 양의 코드로 새로운 클래스를 작성할 수도 있고 공통적인 코드를 관리하여 코드의 추가와 변경이 쉬워질 수도 있습니다. 이러한 특성 때문에 상속을 사용하면 코드의 중복이 제거되고 재사용성이 크게 증가하여 생산성과 유지보수성에 매우 유리해 집니다. 📌 클래스간의 상속은 extends 키워드를 사용하여 정의할 수 있습니다. public class 자식클래스 extends 부모클래스 { } 상속의 키워드는 extends 우리는 상속의 개념을 확장의 개념으로 이해해야합니다. 부모 클래스에 새로운 필드와 메서드가 ..

JAVA 2023.05.31

[JAVA] 접근 제어자

📌 제어자는 클래스, 변수, 메서드의 선언부에 사용되어 부가적인 의미를 부여해 줍니다. 접근 제어자 : public, protected, default, private 그 외 제어자 : static, final, abstract ❗️ 하나의 대상에 여러 개의 제어자를 조합해서 사용할 수 있으나, 접근 제어자는 단 하나만 사용할 수 있습니다. 접근 제어자 📌 멤버 또는 클래스에 사용, 외부에서 접근하지 못하도록 제한합니다. 클래스, 멤버변수, 메서드, 생성자에 사용되고, 지정되어 있지 않다면 default 입니다. public : 접근 제한이 전혀 없습니다. protected : 같은 패키지 내에서, 다른 패키지의 자손클래스에서 접근이 가능합니다 default : 같은 패키지 내에서만 접근이 가능합니다. ..

JAVA 2023.05.31

[JAVA] this 와 this()

this 📌 this는 객체 즉, 인스턴스 자신을 표현하는 키워드입니다. 객체 내부 생성자 및 메서드에서 객체 내부 멤버에 접근하기 위해 사용될 수 있습니다. 객체 내부 멤버에 접근할 때 this 키워드가 필수는 아니지만 상황에 따라 필수가 될 수 있습니다. public Car(String model, String color, double price) { model = model; color = color; price = price; } 이처럼 생성자를 선언하는데 매개변수명과 객체의 필드명이 동일할 경우 오류가 발생하지는 않지만 생성자 블록 내부에서 해당 변수들은 객체의 필드가 아닌 가장 가까운 매개변수명을 가리키게 됨으로 자기 자신에게 값을 대입하는 상황이 되어 버립니다. public Car(Strin..

JAVA 2023.05.31