JAVA

2013년 7월 1일 강의내용.

닉넥임 2013. 7. 14. 17:19
반응형

Class Diagram

 

 생성자의 경우 +Manager(name:Sgring):void 이거보단 

 이렇게 << create >>+Manager(name:String):Manager 하는게 더좋다!


 

/* 
 * interface : 추상 메소드(abstract method) 
 * ※ 추상 메소드 : 선언부는 있지만 구현부({ ...... }; 몸(BODY),  
 * 구현하다 : implement, realize, refinement)는 없는 메소드 
 *  
 * ex) void abcd();// 추상 메소드 
 * cf) void abcd() {}; // 일반 메소드 
 *  
 * 생성자(X) 
 * 일반메소드(X)  
 *  
 */ 
public interface Boss { 
    // String name; //(x) ; 일반 class에서는 가능 ! 
    // final static String name="사장님"; // 초기값(initial value) 
    String name = "사장님"; 

    // literal 변수 (o) 
    // 권장사항! -> 인터페이스의 필드 
    // => final(상수) / static final(광역(정적: 고정 메모리 주소) 상수) = final static

    // Boss(){} ; (X) ; 생성자 허용하지 않음 ! 
    // Boss boss = new Boss(); (X) 

    // void abcd(){}; (X) ; 일반 메소드(X) 
    void orderBoss(); // 추상메소드 
    // final void orderBoss(); //추상 메소드 
    // ; interface에서는 final(x) 
    // 은닉성(캡슐화) : 메소드 구현/상속 금지 ! 
    // final -> 추상 메소드로써의 의미 상실 ! 
    // why) final -> 추상 메소드로써의 의미 상실 ! 

    // abstract void orderBoss(); //가능 (O) 

}// end of interface 


//public class Manager implements Boss 
public class Manager implements Boss {
    // final class Manager implements Boss { 

    public Manager() { 
    } 

    public Manager(String name) { 
    } 

    /* 
     * @override : (추상 / 일반) 상속된 메소드를 재정의 하는 것을 나타내는 내부 메타데이터(annotation) ; 
     * since JDK 1.5 (eclipse : actual JDK 1.6) ; 상속성 
     */ 

    @Override 
    public void orderBoss() {
        // public final void orderBoss() { 
        // -> 상속/오버라이딩(overriding) 불가 ! : 은닉성(캡술화) 
        // protected void orderBoss() { ; (x) 
        // 가시성 (접근 제한자)의 범위는 줄어들어서는 안됨 ! 
        // void orderBoss() { (x) ; default 
        // private void orderBoss() { ; (x) 

        System.out.println("orderBoss() : " + "지시를 구현하였습니다."); 
    } 

    /* 
     * overriding(x), overloading(o) : 다형성 
     */ 
    void orderBoss(String name) { 
    } 

    // 매개변수의 자료형/변수의 갯수 차별화 ! 
    // 자료형(o), 변수명(x) -> 조건(x) 
    // void orderBoss(String name2){ ;(x) 
    // public void orederBoss(String name2) { ; (x) 
    // void orderBoss(Object name2){ ;(o) 
    // public void orderBoss(Object name2){ ;(o) 
    public void orderBoss(String name2, boolean flag) {
        // void orderBoss(StringBuffer name2){ ;(o) 
        // void orderBoss(StringBuilder name){ ;(o) 
    } 

    private void orderManager() {
    } 

}// end of class 


/* 
 * final class Manager implements Boss{ 
 * => 상속 자체가 불가 ! : 은닉성(캡슐화) 
 */ 
public class Clerk extends Manager {

    // 상속 -> 재정의(override) 
    // Manager = > public final void orderBoss(){ 
    // (x) why) final = > 상속금지 ! : 은닉성 
    // @Override 
    public void orderBoss() {
    } 

    // 상속 금지 -> 은닉성(캡슐화) 
    // @Override 
    // private void orderManager() { 
    // } 

    // 상속된 메소드(X) 
    // 상속된 메소드 (X) -> "상속과 무관하게" 자기 자신의 메소드 
    private void orderManager() {
    } 

}// end of class 


public class Test { 

    static void test1() { 
    } 

    void test3() { 
    } 

    static void test() { 
        test1(); // 정적 메소드(italic) 호출 
    } 

    public static void main(String[] args) {
        // TODO Auto-generated method stub 

        // Manager manager = new Manager(); 
        // 객체(인스턴스) (변수) 선언 + (동적 변수)할당 
        Manager manager; // 선언 
        manager = new Manager(); // 할당 

        manager.orderBoss(); 
        // 객체(object, instance). 멤버들(필드/메소드) 
        // ~.~ : 소속(has-a relation : 관계) 

        test(); 
        // static 메소드에서 "클래스 내부의" 
        // 함수 호출(call function)시 
        // 호출되는 함수도 역시 "static"이여야 한다. 

        // Boss boss = new Boss(); //(x) 
        // interface 생성자(x) -> 객체(인스턴스) 안됨 (x) 
        // instantiate(객체를 생성하다)(x) 

        // Boss boss; // 문법적 오류(X) 
        // boss = new Manager(); 

        Boss boss = new Manager(); // 문법적으로 올바름(valid)! 

        // boss.name; (x) 
        // Boss.name=""; (x) 
        // interface의 경우는 "interface의 필드"에 
        // 접근할 경우 "final" 키워드가 없어도 
        // final 처럼 간주한다 : 묵시적인 final 

        // 대입 불가 -> why? (final) : 상수(constant) 
        // 은닉성(캡슐화) 
        System.out.println(Boss.name); 
        System.out.println(boss.name); 
        boss.orderBoss(); // 

    }// close of main 

    void test2() { 
        test1(); // 정적 메소드(italic) 호출 
        test3(); // 일반 메소드 호출 
    } 
}// end of class 


반응형