[#11] Java 다형성 + Class 다이어그램 그려보기

2025. 2. 10. 17:48·LG 유플러스 유레카 SW/Java

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
'LG 유플러스 유레카 SW/Java' 카테고리의 다른 글
  • [#13] Java Generic & Collection
  • [#12] Java 코드 성능 & 가독성 높이는 법
  • [#10] Java 들어가기 + 알고리즘 스터디
  • [#9] Java 들어가기 전에..
nueos
nueos
  • nueos
    nueos 공부 기록
    nueos
  • 전체
    오늘
    어제
    • 분류 전체보기 (191)
      • 해커톤 (1)
      • 네이버 BoostCamp (6)
      • LG 유플러스 유레카 SW (3)
        • React (21)
        • TypeScript (2)
        • JavaScript (2)
        • HTML+CSS (5)
        • Spring (7)
        • Java (6)
        • SQL (2)
        • Algorithm (8)
        • CX (6)
        • Git (2)
        • 프로젝트 (2)
        • 스터디 (9)
        • 과제 (8)
        • 특강 (1)
      • React (3)
      • Next (0)
      • Javascript (2)
      • HTML (2)
      • CSS (9)
      • Algorithm (6)
      • Database (0)
      • OS (13)
      • C++ (24)
      • Python (1)
      • jQuery (1)
      • Django (1)
      • Git (1)
      • 개발 지식 (3)
      • 정보 보안 (22)
      • 포렌식 (1)
      • 암호 (2)
      • 기타 (4)
      • 패스트캠퍼스 FE 프로젝트십 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스택
    큐
    제주지역혁신플랫폼지능형서비스사업단
    디지랩챌린지
    디지털혁신
    힙
    기술로바꾸는세상
    heap
    제주해커톤
    Queue
    exhaustive search
    Stack
    완전 탐색
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
nueos
[#11] Java 다형성 + Class 다이어그램 그려보기
상단으로

티스토리툴바