Spring/Model1 _2(MVC)

0920 JSP - 상속

jeoniee 2022. 9. 20. 13:01
728x90
반응형

목차

    객체

    클래스를 구체화(메모리에 올림) 형태
     
     

    상속 


     
     - 프로그래밍에서 상속 의미 
     => 이미 정의 되어 있는 객체(속성)를 사용(객체 사이 관계를 맺음) 해서 새로운 객체를 만드는 것. 
     => 자식클래스가 부모 클래스의 모든 요소를 사용 가능하게 하는 것, 자식(선택권자) 이 부모를 선택해서 상속을 받는다.
     
     
    부모 클래스 ( 슈퍼 클래스 -SuperClass)  , 상위 클래스 
    자식 클래스 ( 서브 클래스 -SubClass)     , 하위 클래스

     

    [ 상위 객체 ] : 공통 속성을 보유, 속성 간단
    [ 하위 객체 ] : 개별 속성을 보유, 속성 복잡 

     
     

     
     
     
     

    두 클래스 상속 시키기

    SubClass (자식) SuperClass (부모)

    class SubClass{
    }
    
    class SuperClass{
    }

     

    class SuperClass{
    
    }
    
    class SubClass extends SuperClass{
    	
    }

    SubClass 가 부모 class를 extends 했기 때문에 부모 클래스의 기능들을 쓸 수 있다. 
     
     

    상속을 쓰기 위한 전제 조건 (必)

    1. 부모 객체가 존재해야 함
    2. 부모 객체의 성격(형태)과 유사한 형태를 구현해야 한다. 
    (아이폰 - 아이폰) o
    (아이폰 - 갤럭시) x 
     
     
     
     

    예제


    //iPhone 13 객체 - 속성 : color, price 
    class Iphone13{
    String color; 
    int price;
    
    }
    
    
    
    
    //iPhone 14 객체 - 속성 : color, price, tel 
    class Iphone14 extends Iphone13{
    // String color; (공통 속성) 
    // int price; (공통 속성) 
    String tel;  (특수 속성) 
    
    }

     
    Extends를 씀으로써,
    String, int를 굳이 쓰지 않아도, 부모로부터 받은 String, int를 이용할 수 있다. 
     
     

    //아이폰 13, 14 객체 생성 - 정보 출력
    Iphone13 i13 = new Iphone13();
    i13.color = "white";
    i13.price = 1;
    
    Iphone14 i14 = new Iphone14();
    i14.color = "grey";
    i14.price = 2;
    i14.tel = "000-0000-0000";

    class Parent{
    	public void pprn() {
    		System.out.println(" P : pprn() 호출!!! ");
    	}
    }
    
    class Child extends Parent{
    	public void cprn() {
    		System.out.println(" C : cprn() 호출!!!");
    	}
    }

    child가 parent 객체를 상속함.

    Parent p1 = new Parent();
    		p1.pprn();
    		
    Child c1 = new Child();
    		c1.cprn();
    		c1.pprn();

    Child는 부모의 pprn을 쓸 수 있다. (상속관계 o  - 부모의 메서드 호출) 
     
    < > 부모는 Child의 cprn을 쓸 수 없다! 
     
     
     
     
                                           

     

    접근 지정자 (제어자)

    public >> protected >> default (생략) >> private

     
     

    private        : 자신 클래스 
    생략              : 자신 클래스, 같은 패키지 
    protected  : 자신 클래스, 같은 패키지, 하위 클래스 
    public         : 자신 클래스, 같은 패키지, 하위 클래스, 다른 패키지 
     
     
    protected 

    상속관계 일 때는 public, 아닐 때는 private
     


    class Point2D{
    	private int x;
    	private int y;
    }
    
    class Point3D extends Point2D{
    	//int x;
    	//int y;
    	int z;
    	
    }
    		
    		Point2D p2 = new Point2D();
    //		p2.x = 100;
    //		p2.y = 200; 
    		
    		Point3D p3 = new Point3D();
    		p3.x = 100;
    		p3.y = 200; 
    		p3.z = 300;

     

    [ p r i v a t e ] 
    사용 불가! 
     
     
     
     
     
     

    class Point2D{
    	protected int x;
    	private int y;
    }

     

     
     
     

    [ p r o t e c t e d ] 
    int x를 protected로 바꿨더니 사용 가능해짐 , 상속한 객체만 쓰게 해 주겠다는 뜻 (접근 불가능했던 객체도 접근 가능하게 만들어줌) 
     
     
     
     
     


    메서드 오버 라이딩vs 메서드 오버 로딩

     

    '상속'

    오버 라이딩 - 상속관계에서만 사용 가능 (必)
    오버 로딩 - 상속관계가 아니어도 사용 가능 
     
     
     

    메서드 오버 라이딩 

    서브 클래스에서 슈퍼 클래스의 메서드를 재 정의하는 것. 
    (상속이 전제되어 있음)
     
    -> 기존의 부모의 메서드를 같은 형태로 사용하는 것 ( 동작은 다름 )
    -> 기존의 메서드명, 전달 인자의 타입, 전달 인자의 개수가 모두 동일 
    -> 부모의 메서드를 '은닉' 시켜서 항상 재 정의된 메서드가 호출
     

    class Child extends Parent{
    	@Override
    	public void pprn() {
    		System.out.println(" P : pprn() 호출!!!(오버라이딩 함)");
    	}
    	public void cprn() {
    		System.out.println(" C : cprn() 호출!!!");
    	}
    }

    부모의 pprn()을 복붙함 => 오버 라이딩
     

    오버라이드 메시지가 뜸 

     
    @ 해당 메서드가 오버 라이딩하고 있다는 걸 알려줌 
     
     
     
     
     
     
     


     

    똑같은 메서드 2개 됐음
    1개 - 부모가 준거
    1개 - 내가 오버 라이딩한 거
     
    근데 충돌이 안 일어난다.
    왜냐면 오버 라이딩 한 메서드가 호출이 되기 때문
    => 기존의 것은 안 쓰고 새로 정의한 것만 쓰기 때문. 하지만 원래 가져온 (부모) 건 안 사라짐!
     
     
    [ 에러 조건 => 동일 메서드 2개 있을 때 ] 
     
    둘 중 하나가 없으면 에러가 안 나므로, (사실 부모의 pprn을 없애지는 않음)
    부모의 pprn을 은닉시키고 오버 라이딩 한 pprn을 호출 되게 만들어서 에러를 발생시키지 않게 한다. 
     
     

    728x90
    반응형