TIL


2022.03.21


コンピュータについて
スプリング160~177 p

スプリングの開始


instanceof演算子


作成されたオブジェクトが特定のクラスのインスタンスであるかどうかを尋ねる演算子
  • .
    package ex04.instanceof01;
    
    class 동물{
    	
    }
    
    class 조류 extends 동물{
    	
    }
    
    class 펭귄 extends 조류 {
    	
    }
    
    
    public class Driver {
    	public static void main(String[] args) {
    		동물 동물객체 = new 동물(); 
    		조류 조류객체 = new 조류();
    		펭귄 펭귄객체 = new 펭귄();
    		
    		//00클래스로 00객체를 표현할 수 있니?
    		System.out.println(동물객체 instanceof 동물);
    		
    		System.out.println(조류객체 instanceof 동물);
    		System.out.println(조류객체 instanceof 조류);
    		
    		System.out.println(펭귄객체 instanceof 동물);
    		System.out.println(펭귄객체 instanceof 조류);
    		System.out.println(펭귄객체 instanceof 펭귄);
    		
    		System.out.println(펭귄객체 instanceof Object);
    	}
    }
  • オブジェクト参照変数のタイプ実オブジェクトのタイプではない
  • オブジェクト参照変数のタイプ処理
    package ex04.instanceof02;
    
    class 동물{
    	
    }
    
    class 조류 extends 동물{
    	
    }
    
    class 펭귄 extends 조류 {
    	
    }
    
    
    public class Driver {
    	public static void main(String[] args) {
    		
    		동물 동물객체 = new 동물(); 
    		동물 조류객체 = new 조류();
    		동물 펭귄객체 = new 펭귄();
    		
    		//객체 참조 변수의 타입이 아닌 실제 객체의 타입에 의해 처리!
    		System.out.println(동물객체 instanceof 동물);
    		
    		System.out.println(조류객체 instanceof 동물);
    		System.out.println(조류객체 instanceof 조류);
    		
    		System.out.println(펭귄객체 instanceof 동물);
    		System.out.println(펭귄객체 instanceof 조류);
    		System.out.println(펭귄객체 instanceof 펭귄);
    		
    		System.out.println(펭귄객체 instanceof Object);
    	}
    }
    
  • instanceof演算子は、クラスの継承関係とインタフェース実装関係にも適用されます.
    package ex04.instanceof03;
    
    interface 날수있는{
    	
    }
    class 박쥐 implements 날수있는{
    	
    }
    class 참새 implements 날수있는{
    	
    }
    
    public class Driver {
    	public static void main(String[] args) {
    		날수있는 박쥐객체 = new 박쥐();
    		날수있는 참새객체 = new 참새();
    		
    		System.out.println(박쥐객체 instanceof 날수있는);
    		System.out.println(박쥐객체 instanceof 박쥐);
    		
    		System.out.println(참새객체 instanceof 날수있는);
    		System.out.println(참새객체 instanceof 참새);
    	}
    }
    

    interfaceキーワードとimplementsキーワード

    package ex04.interface01;
    
    //인터페이스는 public 추상 메서드와 public 정적 상수만 가질 수 있다.
    public interface Speakable {
    	//public static final이 생략
    	double PI = 3.14159;
    	//public static final double PI = 3.14159;
    	final double absoluteZeroPoint = -275.15;
    	//public static final double absoluteZeroPoint = -275.15;
    	
    	//public abstract가 생략
    	void sayYes();
    	//public abstract void sayYes();
    }

    このキーワード

  • オブジェクトが自称するときに使用するキーワード
  • です.
  • の領域変数が属性(オブジェクト変数、静的変数)と同じ名前である場合、領域変数は
  • より優先される.
  • のオブジェクト変数と同じ名前の領域変数がある場合、この変数はプレフィックス
  • として使用する.
  • の静的変数と同じ名前の領域変数がある場合、クラス名をプレフィックス
  • として使用する.
    package ex04.This;
    
    class 펭귄{
    	int var = 10;
    	
    	void test() {
    		int var = 20;
    		
    		System.out.println(var);
    		System.out.println(this.var);
    	}
    }
    
    public class Driver {
    	public static void main(String[] args) {
    		펭귄 뽀로로 = new 펭귄();
    		뽀로로.test();
    	}
    } 

    スーパーキー

  • は、上記の最上位インスタンス
  • である.
    package ex04.Super;
    
    class 동물{
    	void method() {
    		System.out.println("동물");
    	}
    }
    
    class 조류 extends 동물 {
    	void method() {
    		super.method();
    		System.out.println("조류");
    	}
    }
    
    class 펭귄 extends 조류{
    	void method() {
    		super.method();
    		//super.super.method() --- X
    		System.out.println("펭귄");
    		
    	}
    }
    
    public class Driver {
    	public static void main(String[] args) {
    		펭귄 뽀로로 = new 펭귄();
    		//동물, 조류, 펭귄 순서대로 출력
    		뽀로로.method();
    	}
    }

    オブジェクト向け設計5原則-OLID


    SRP-単一責任原則

  • クラスを変更する必要がある理由は1つだけです.
  • ロールの分離(責任)
  • 属性が単一責任原則を遵守できない場合
  • // 남자냐 여자냐에 따라 군번이 있거나 없을 수 잇음
    //따라서 남자클래스, 여자클래스를 분리해줘야함
    class 사람{
    	String 군번;
    }
  • メソッドが単一責任の原則を守らない場合、
  • package ex05.srp;
    
    public class 강아지 {
    	final static Boolean 수컷 = true;
    	final static Boolean 암컷 = false;
    	Boolean 성별;
    	
    	
    	//메서드가 수컷 강아지의 행위와 암컷 강이지의 행위를 모두 구현하려고 하는게 srp를 위반
    	void 소변보다() {
    		if(this.성별 == 수컷) {
    			//1
    		}else {
    			//2
    		}
    	}
    }
    
    package ex05.srp;
    
    public  abstract class 강아지2 {
    	final static Boolean 수컷 = true;
    	final static Boolean 암컷 = false;
    	Boolean 성별;
    	
    	abstract void 소변보다();
    }
    
    //수컷강아지,암컷강아지를 구별해서 소변보다 메소드를 분리함
    class 수컷강아지 extends 강아지2{
    
    	@Override
    	void 소변보다() {
    		
    	}
    	
    }
    
    class 암컷강아지 extends 강아지2{
    
    	@Override
    	void 소변보다() {
    		
    	}
    	
    }