Java 다형성
1️⃣ polymorphic variable(다형적 변수)
- 슈퍼 타입으로 선언된 변수
- shadow effect가 생김 (슈퍼 타입 아래의 멤버들이 가려지는 효과)
2️⃣ overriding(재정의)
- 슈퍼의 메소드를 자식 클래스에서 내용을 변경하여 정의하는 것
- 확장성, 성능, 정합성 향상
- shadow effect가 적용되는 않는 예외 메소드
- super: public void area () {xxx} / sub: public void area () {yyy}
- 서브 클래스는 슈퍼 클래스의 접근 제어자보다 같거나 높아야 함(ex. super: protected ➡️ sub: protected/public)
3️⃣ overloading
- 한 클래스 내에서 같은 이름의 메소드가 다수 존재하는 것
- ex) PrintStream의 println 다수
- 규칙: 메소드 이름은 같고, 파라미터 리스트는 반드시 달라야 함.
Java 제어자
1️⃣ Access Modifier
- private < (default) < protected < public
- class : public(default)
- method, data : 4가지 중 하나
2️⃣ Usage Modifier (사용 지정자)
- static - 객체 생성 없이 사용
- class : inner class에만 선언, 외부 클래스의 인스턴스 없이 사용 가능
- data : 공유하는 데이터
- method : 객체 생성 없이 호출 가능한 메소드
- abstract - 상속으로만 사용(객체 생성 불가)
- class: 객체 생성 불가 클래스
- data: X
- methid: 구현 블락 없음, overriding 강제
- final - 변경 없이 사용
- class: 상속 불가
- data: 상수
- method: overriding 불가
Java Interface
- 다중 상속을 위한 프로그램 단위
- 모든 메서드가 abstract
- 객체의 타입으로 사용
- 스스로 객체 생성 불가
- 객체지향적 !
package interface_;
public interface Flyer {
public void fly();
}
// Animal.java
package interface_;
public abstract class Animal {
public abstract void eat();
}
// Bird.java
package interface_;
public class Bird extends Animal implements Flyer{
@Override
public void eat() {
System.out.println("벌레를 먹는다...");
}
public void fly() {
System.out.println("날개를 펄럭이며 난다...");
}
}
// Human.java
package interface_;
public class Human extends Animal{
@Override
public void eat() {
System.out.println("밥을 먹고 산다...");
}
public void walk() {
System.out.println("직립보행한다...");
}
}
// Superman.java
package interface_;
public class Superman extends Human implements Flyer{
@Override
public void eat() {
System.out.println("빵을 먹고 산다...");
System.out.println("가끔 ");
super.eat();
}
public void fly() {
System.out.println("망토를 펄럭이며 난다...");
}
}
// Vehicle.java
package interface_;
public abstract class Vehicle {
int distance;
public abstract void transfer();
}
// Airplane.java
package interface_;
public class Airplane extends Vehicle implements Flyer{
@Override
public void transfer() {
distance=flight(0,100);
}
public int flight(int from, int to) {
System.out.println("엔진을 가동하며 난다...");
return to-from;
}
@Override
public void fly() {
flight(0,0);
}
}
// Test.java
package interface_;
public class Test {
public static void main(String[] args) {
Bird b=new Bird();
Superman s=new Superman();
Airplane a=new Airplane();
Show.airShow(b);
Show.airShow(s);
Show.airShow(a);
//Show.airShow("hello");
}
}
class Show{
static public void airShow(Flyer f) {
f.fly();
}
}
Class 다이어그램 그려보기
스터디원들과 쇼핑몰을 도메인으로 하여 클래스 다이어그램을 그렸다. 관계 연결하는 부분이 어려웠고, 나머지는 다른 사람들이 그려놓은 것들을 서치해서 참고하며 그렸다..
- 고객-주문: 연관 관계
- 주문-상품: 연관 관계
- 고객-장바구니: 연관 관계
- 상품- 장바구니: 집합 관계(근데 연관 관계도 가능할 듯?)
- 주문-결제: 의존 관계
- 결제-신용카드 결제: 일반화(상속) 관계
- 결제-온라인 입금 결제: 일반화(상속) 관계
- 상품-카테고리: 연관 관계
💥 트러블 슈팅
❓ amateras에서 class 다이어그램 안 열리는 문제
https://velog.io/@maasj/Eclipse-Amateras-modeler-%EC%84%A4%EC%B9%98-%EB%B0%A9%EB%B2%95
[Eclipse] Amateras-modeler 설치 방법
오늘은 프로젝트의 유지/보수를 위한 객체지향 설계 패턴을 구성할 때 유용한 tool인 Amateras-modeler의 설치 방법에 대해서 정리해보고자 합니다.
velog.io
- eclipse.ini 파일 대신 SpringToolSuite4.ini 파일 수정하면 됨 !
728x90
반응형
'LG 유플러스 유레카 SW > Java' 카테고리의 다른 글
[#14] Java 재귀 & 배열 & Exception (0) | 2025.02.13 |
---|---|
[#13] Java Generic & Collection (0) | 2025.02.12 |
[#12] Java 코드 성능 & 가독성 높이는 법 (0) | 2025.02.11 |
[#10] Java 들어가기 + 알고리즘 스터디 (0) | 2025.02.07 |
[#9] Java 들어가기 전에.. (0) | 2025.02.06 |