[자바공부하기 7]OOP의 개념 - 상속 2

 

지난 글에 이어 이번글에서도 OOP의 개념 상속에 대해 나가겠습니다. 2번째 글이죠^^

 

 

SaleEmployee(영업부직원)을 상속한(확장한) SalesChief(영업팀장) Class를 만들어보자.

영업팀장 Class는 영업부직원과 같이 id, 이름, 영업담당 지역을 가지면서 자신만의 속성을 가진다.

   // 영업팀직원 클래스를 상속한 영업팀장 클래스

class SalesChief extends SalesEmployee {
      int salesTarget;  //영업팀 목표 매출액
      public SalesChief(String newName,String newID,String newArea, int newSalesTarget) {
          //super는 상위클래스의 생성자를 의미
          super(newName, newID, newArea); 
          this.salesTarget = newSalesTarget;
      }
      //영업팀장의 업무는 더이상 확장이 안된다는 의미, 상속할수가 없다는 의미
      final public void startJob() {
          System.out.println(super.name + "님이 영업팀 직원을 관리한다...");
          System.out.println(super.name + "님이 관리하는 영업팀의 매출목표는 "+ this.salesTarget + "만원 입니다...");
      }
      }

 

 

SaleChief Class의 경우 SaleEmployee의 startJob() 메소드를 재정의(Override)했다.

매소드의 재정의라고 하는 것은 상속의 관계에 있는 클래스들 사이에서 상위클래스에 있는 메소드를 하위클래스에서 다시 정의하여 사용하는 것을 말한다.

이 경우 하위클래스의 메소드는 상위클래스의 메소드와 이름도, 매개변수 타입도, 그리고 반환형도 같다. 하지만 내부적으로 하는 일은 다르다.

 

만약 SalesChief Class의 startJob 메소드에서 다음과 같이 정의한다고 가정하면

 

 public void startJob() {
          System.out.println(super.chargeArea); 
          System.out.println(super.name + "님이 영업팀 직원을 관리한다...");
    System.out.println(super.name + "님이 관리하는 영업팀의 매출목표는 "+ this.salesTarget + "만원 입니다...");
      }

 

 

아래와 같은 오류발생이 된다.

 

Example.java:59: chargeArea has private access in SalesEmployee
      System.out.println(super.chargeArea); 


객체지향 언어에서는 정보의 은닉(캡슐화,Encapsulation) 을 위해서 위와 같은 접근지정을 할 수 있다. 즉 SaleEmployee의 자료중 정보 은닉의 필요가 있는 필드나 메소드는 접근지정자를 사용해 접근을 제한할 수 있는 것이다.

 

현재 작성한 클래스나 클래스의 맴버를 다른 클래스에게 상속시키고자 하지 않을경우엔 final 키워드를 사용한다. 예를 들어 한 회사에 영업팀장은 그 만의 고유한 업무를 가지고 영업팀장의 업무를 관리하는 또 다른 개체가 없을 때는 영업팀장을 상속하여 더 확장된 기능을 가진 클래스를 만들 필요가 없을 것이다.

이럴경우 final 키워드를 사용한다.

메소드의 경우도 이와 같이 상속을 완전히 금지하는 경우가 있는데 이러한 메소드도 final이라는 키워드와 같이 사용하게 되고 종단 메소드(final method)라고 부른다.

 

 


/* Class의 상속에 관한 예제 Example1.*/
//직원 Class
class Employee {
    String name;
    String id;

  //생성자
    public Employee(String name1, String id1) {
        name = name1;
        id = id1;
    }

    public void gotoOffice() {
        System.out.println(name+"님 출근하였습니다...");
    }

    public void gotoHome() {
        System.out.println(name+"님 퇴근하였습니다...");
    }
}


//직원클래스를 상속한 일반관리자 Class
class Manager extends Employee {
    String chargeDept;
    public Manager(String newName,String newID,String newDept) {
        //super는 상위클래스의 생성자를 의미
        super(newName, newID);    this.chargeDept = newDept;
    }
    public void startJob() {
        System.out.println(this.chargeDept + " " + super.name + "님이 일을 시작합니다...");
    }
}
//직원클래스를 상속한 영업팀직원 클래스
class SalesEmployee extends Employee {
    //영업담당지역, 메소드내에서만 변수에 접근이 가능하다.
    private String chargeArea;
    public SalesEmployee(String newName,String newID,String newArea) {
        //super는 상위클래스의 생성자를 의미
        super(newName, newID);      this.chargeArea = newArea;
    }
    public void startJob() {
        System.out.println(super.name + "님이 " + this.chargeArea + " 지역으로 영업업무를 나갑니다...");
    }
}


//영업팀직원 클래스를 상속한 영업팀장 클래스
class SalesChief extends SalesEmployee {
      int salesTarget;  //영업팀 목표 매출액
      public SalesChief(String newName,String newID,String newArea, int newSalesTarget) {
              super(newName, newID, newArea);  this.salesTarget = newSalesTarget;
      }
      public void startJob() {
          System.out.println(super.name + "님이 영업팀 직원을 관리한다...");
          System.out.println(super.name + "님이 관리하는 영업팀의 매출목표는 "+ this.salesTarget + "만원 입니다...");
      }
}
//Main Class
class Example {
    public static void main(String args[]) {
        Manager m = new Manager("이종철","12345","솔루션개발");
        m.gotoOffice();        m.startJob();        m.gotoHome();
        SalesEmployee se = new SalesEmployee("차두리","23456","서울");
        se.gotoOffice();        se.startJob();        se.gotoHome();
        SalesChief sc = new SalesChief("홍길동","34567","전국",9000);
        sc.gotoOffice();        sc.startJob();        sc.gotoHome();
    }

 

여기까지 OOP의 개념 -- 상속에 대해 1과2로 나눠 알아보았습니다.^^

 

[자바공부하기 7]OOP의 개념 - 상속 2

 

 

[자바공부하기 6]

OOP의 개념 - 상속 1

 

상속은 한 클래스를 확장하여 새로운 클래스를 만드는 것을 말한다. 이렇게 새로 만들어지는 클래스를 하위클래스라고 부른다. 그리고 원래의 클래스는 상위클래스라고부른다. 하위클래스는 상위클래스에서 정의한 메쏘드와 변수들을 그대로 가지고 있을 수 있다.(물론 이것도 접근변경자를 통해 조절이 가능함)여기에 추가로 하위 클래스 자체적으로 정의된 메쏘드와 변수들을 가질 수 있다. 어떤 클래스에 대해서, 상속받는 하위 클래스는 여러 개가 될수있다.

이미 만들어놓은 클래스를 기반으로 원하는 기능이 추가된 새로운 클래스를 쉽게 만들어낼 수 있다.

자바의 모든 클래스는 상속의 대상이 되는 상위클래스가 반드시 하나 존재한다.

프로그램의 재사용성과 확장성을 높인다.

 

* 상위클래스(SuperClass)  / 하위클래스(Subclass)

 

 

class Employee {

   string name;      string id;

//생성자

    public Employee(string name1, string id1) {

name =name1;    id=id1;

   }

    public void gotoOffice()  {

System.out.printin(name+"님 출근하였습니다...");

   }

 

    public void gotoHome()  {

System.out.printin(name+"님 퇴근하였습니다...");

   }

}

 


Employee Class를 상속한 Manager Class가 있다….
//직원클래스를 상속한 일반관리자 Class
class Manager extends Employee {
    String chargeDept;
    public Manager(String newName,String newID,String newDept) {
        //super는 상위클래스의 생성자를 의미
        super(newName, newID);
        this.chargeDept = newDept;
    }

    public void startJob() {
        System.out.println(this.chargeDept + " " + super.name + "님이 관리업무를 시작합니다...");
    }
}


Employee Class를 상속한 SalesEmployee Class가 있다….
//직원클래스를 상속한 영업팀직원 클래스
class SalesEmployee extends Employee {
    //영업담당지역, 메소드내에서만 변수에 접근이 가능하다.
    private String chargeArea;
    public SalesEmployee(String newName,String newID,String newArea) {
        //super는 상위클래스의 생성자를 의미
        super(newName, newID); 
        this.chargeArea = newArea;
    }
    public void startJob() {
        System.out.println(super.name + "님이 “ + this.chargeArea + “ 지역으로 영업업무를 나갑니다...");   
    }
}

상속을 위해서는 extends keyword를 사용한다. (class a extends b    b로부터 상속을 받음)

extends키워드를 이용해 클래스를 상속받으면 상속받은 클래스는 상위클래스의 필드와 메소드를 상속받는다.

ex>

앞의 Manager Class instance화 했다면
        Manager m = new Manager(“홍길동”, “12345”,”관리부”);
        String id = m.id;
        m.gotoOffice();

등과 같이 사용이 가능하다... 물론 m.startJob()처럼 자신의 Method를 사용이 가능하다.

하위클래스는 객체를 생성할 때 상위클래스의 객체를 먼저 생성해야 한다. 하위 클래스는 크게 상위클래스 객체부와 자기 자신의 객체부로 나눈 수 있다. 즉 new 키워드를 사용하여 하위클래스는 크게 상위클래스 객체부와 자기 자신의 객체부로 나눌 수 있다. 즉 new 키워드를 사용하여 하위클래스를 생성하면 상위클래스의 부분과 하위클래스 고유의 부분이 나뉘어 생성된다는 것이다. 이때 상위클래스 부분을 super이라고한다. 그리고 상위클래스 객체부를 생성하기 위해 사용하는 것이 바로 상위클래스 생성자super()이다.

ex>

   만약 Manager Class에서 super(newName, newID)를 생략하면 다음과 같은 에러가 난다.  생략시에는 default로 super() 이 삽입되는데ㅡ Employee에는 파라미터가 없는 생성자가 선언되지 않았기때문에 ….
      Example.java:22: cannot resolve symbol        symbol  : constructor Employee  ()
        location: class Employee        public Manager(String newName,String newID,String newDept) {

 

하위클래스에서 상위클래스의 맴버를 호출하고자 할때는 .(점) 연산자를 사용하여 나타낼 수 있다.

ex>

Manager Class에서 super.name
      public void startJob() {
            System.out.println(this.chargeDept +” “+ super.name + "님이 직원관리 업무 를 시작합니다...");   
    }

 

 

 

다음글에서 계속나갈께요 ^-^

 

잠깐 !! 자바 정기교육을 안내해드릴께요 ^^ 공부에 참고하시라고 올려드립니다. ^-^

 

- JAVA정기교육 -

 

1. 초보자를 위한 JAVA,JSP실무교육과정

2. 자바기초에서 Ajax,jQuery,Struts2,Spring까지

3. JAVA초보에서 Web&Spring,MiPlatForm까지

4. (개발과정)Ajax,jQuery,Spring3.X&MyBatis 실무과정

위 교육과정을 확인하시려면 아래그림을 클릭해주세요.

 

자바공부하기 6]

 

 

[JAVA공부하기 5]

 

Javah, Javap사용법

 

 

javah option HelloApp(.class 확장자명은 뺀다)

 

- o 옵션

여러개의 클래스로 구성된 자바 프로그램을 위한 헤더 파일을 만들고자 할 때 사용한다.

(여러개의 소스에 관한 정보를 한 파일에 모아놓게 한다.)

javah -o concath hello1App Hello2App Hello3App

 

-stubs 옵션

스텁파일을 생성한다.

스텀 파일의 이름은 원래의 클래스의 이름 뒤에 .c가 붙은 꼴이다.

 

- Javap

클래스 파일을 원시 코드로 엮어셈블해준다. 완전한 소스 파일을 구할 수는 없으며 인자로 클래스 이름을 받고 역어셈블한결과를 표준 출력(콘솔)으로 내보낸다.

사용 예 : javap -c HelloApp>

HelloApp.txt

 

javap -c HelloWorld1 역어셈블한 결과를 화면에
javap -c HelloWorld1 > HelloWorld1.txt   역어셈블한 결과를 text File에 기록
javap -private HelloWorld1   All Class&Member 

 

★ 오라클자바실무교육 -- www.oraclejava.co.kr

☆ 02-6925-4760 - 오라클자바 대표번호

많은 문의 바랍니다.^^

[JAVA공부하기 5]Javah, Javap사용법

[WPF공부하기2]

 

XAML이란?

 

Extensible Application Markup Language 의 약자로 XAML은 선언적 언어다.

개체간의 계층 구조 관계를 보여주는 언어 구조와 형식 확장을 지원하는 백업 입력 규칙을 사용하여 개체를 초기화하고 개체 속성을 설정할 수 있다.

XAML 언어는 UI를 작성할 때 주로 사용이 된다. 또한 처리는 C#, VB으로 가능하며 XAML언어는 개발 프로세스에서 다른 도구와 역할 간에 원본 교환을 지원한다.

XAML 파일은 파일이름 확장명이 .xaml인 XML 파일이다.

 

 

 

 

오라클자바교육센터 믿고 배우세요 ^^

www.oraclejava.co.kr

02-6925-4760

카카오톡 친구추가<추가하셔서 문의해보세요 ^^>

ID : gspec

 

WPF의 특징

 

 

WPF의 특징에 대해서 알아보기전에 WPF의 개념부터 잠깐 보시겠습니다.

 

WPF란?

WPF는 Windows Presentation Foundation의 약자로 기본적인 Imaging과 Effect 이외에 2D, 3D, Audio, Video, Animation 등의 엔진을 자체적으로 제공하여, 개발자가 쉽게 원하는 효과를 구현 할 수 있도록 돕는 역할을 하는 것입니다.

 

WPF의 특징

- DIP(Device Independent Pixel)

- 그래픽과 애니메이션 기본 지원

- 스타일 & 컨트롤 재정의

- 리소스 기반의 컨트롤 접근

- 새로운 시스텐 & 바인딩 기반 접근

 

 

 

열심히 it공부하자!!

 

 

★ 실무교육 잘하는 곳 !! 믿고 배울 수 있는 곳 !!

www.oraclejava.co.kr 로 방문하시거나 궁금하신 점은 02-6925-4760으로 문의해보세요 ^^

 

[자바공부하기 4]

 

JDB 사용법

 

 

JDB - Java DeBugger

 

JDB의 간단한 사용법입니다.

 

D:\자바프로그래밍\예제>javac-g Emp.java

D:\자바프로그래밍\예제>jdb Emp

initializing jdb

> stop at Emp:5

Deferring breakpoint Emp:5.

it will be set after the class is loaded.

> stop at Emp:6

Deferring breakpoint Emp:6

it will be set after the class is loaded.

> stop at Emp:7

Deferring breakpoint Emp:8

it will be set after the class is loaded.

> stop at Emp:8

Deferring breakpoint Emp:8

it will be set after the class is loaded.

 

> run

run Emp

>

VM Started: Unable to set deferred breakpoint Emp:8 : No code at line 8 in Emp

Stopping due to deferred breakpoint errors.

Set deferred breakpoint Emp:7

Set deferred breakpoint Emp:6

Set deferred breakpoint Emp:5

Breakpoint hit : thread = "main", Emp.main(), line=5, bci=14

5 m.goto Office();

main[1] next
김철수님 출근하였습니다...
main[1]
Step completed:
Breakpoint hit: thread="main", Emp.main(), line=6, bci=18
  6            m.startJob();

main[1] print m.chargeDept
 m.chargeDept = "솔루션개발"
main[1] print m.name
 m.name = "김철수"
main[1] cont
솔루션개발 김철수님이 일을 시작합니다...
>
Breakpoint hit: thread="main", Emp.main(), line=7, bci=22
  7    }

main[1] next
main[1]
The application exited
** help 보는 방법 jdb로 들어간후 help하고 입력하면 간단한 도움말이 나타남. 

 - [자바공부하기 4]JDB 사용법

 

★ it 교육문의는 오라클자바교육센터 대표번호 02-6925-4760으로 연락해보세요 ^^

☆ 친절한 안내로 상담해드립니다.

★ 환급도 받고 교육도 받으세요!

 

 

 

[자바공부하기 3]

* JAR 사용법

 

Jar  ->  cjdma Option의 첫번째 문자 (기본적인 연산을 지정)

 

C :  새로운 Jar Archive를 생성, 마지막인자로 입력파일등을 표시, 새롭게 생성된 Jar File은 첫번째 엔트리로 Meta - Int / Menifest.mf 파일을 가지며 이 파일은 Jar File의 내용을 나열하며 각각의 파일에 대한 메시지 요약을 포함한다.

 

: Jar Archive의 내용을 나열한다.

 

u : Jar Archive 파일의 내용을 갱신, 커맨드라인에 나열된 파일은 이 아카이브에 추가된다.

m옵션과 같이 사용된 경우에는 지정된 메니페스트 정보를 Jar File에 추가한다.

 

x : Jar Archive의 내용을 추출한다.

- 한정자 옵션(4개의 명령지정문 뒤에서 연산에 관한 자세한 정보를 제공)

 

f : Jar가 Command Line의 지정된 이름의 Jar File 에 대해 수행되는 것임을 나타낸다. 지정되지 않으면 표준입력으로 Jar File을 읽고 표준출력으로 Jar File을 쓴다.

 

m : 메니페스트 템플릿이 코맨드라인에 지정되었음을 JAR 명령에게 알린다. (c, u Option과 함께사용)

 

M : Jar가 기본메니페스트 파일을 생성하지 않도록함 (c, u와 함께 사용)

 

v : 여러가지 출력을 내보내도록 한다.

 

O : jar가 압축 없이 파일을 Jar 아카이브에 저장하도록 한다.

 

첫번째 옵션이 f를 포함한다면 jar파일의 이름을 기술하며, m을 포함한다면 menifest파일이름을 기술한다.

만약 첫번째 Option이 f, m을 모두 포함한다면 이와 동일한 순서로 나열해야 한다. Files에는 Jar Archive에 포함시킬 파일을 나열한다.

 

 

* 추가옵션

 

C Directory : Jar가 다음파일 및 디렉토리를 처리하는중에 지정된 dir을 바꾸도록 한다. C Option은 몇개라도 사용이 가능하며, 다음 C Option이 올때까지 유효하다.

 

I jar file : c, t, u, x 대신 사용, Jar File의 파일구조등의 인덱스를 산출하도록, Meta - Inf/ Index.List 파일에 저장 추후 자바인터프리터나 애플릿뷰어등이 알고리즘의 최적화하고 불필요한 Jar File을 다운로드 하지 않기 위해서 이 인덱스 정보를 이용할 수 있다.

 

 

 
* jar cvf hello.jar HelloWorld*.class


jar cf hello.jar HelloWorld*.class -> 위의 것과 동일하나 화면에 출력이 나타나지 않는다.
jar cmf myMenifest test.jar HelloWorld.class -> test.jar File을 만들면서 myMenifest 라는 파일의 내용을 MENIFEST.MF File에 첨가한다.
Jar ufm test.jar myMenifest -> 이미 만들어져 있는 test.jar File의 MENIFEST.MF File을 myMenifest 를 참조하여 갱신한다.
Jar umf myMenifest test.jar

D:\자바프로그래밍\예제>jar tvf hello.jar
    0 Fri Jun 28 19:07:24 KST 2002 META-INF/
    95 Wed Jul 03 00:08:38 KST 2002 META-INF/MANIFEST.MF
  430 Fri Jun 28 18:30:38 KST 2002 HelloWorld.class
D:\자바프로그래밍\예제>jar tf test.jar
META-INF/
META-INF/MANIFEST.MF
HelloWorld.class

 

 

[자바공부하기 3]Jar 사용법

 

★ JAVA 강의 만족도 Good!! ---- > www.oraclejava.co.kr 방문해보세요 ^^

 

[자바공부하기2]Nateive Thread / Green Thread 선점형 / 비선점형

 

Sun의 JDK 1.2 / 1.3에는 JIT기술이 도입되어 loading 시점에 바이트코드를 실제 기계에서 수행되는 코드로 바꾼 후 실행하게 함으로써 상당한 성능 향상을 가져왔다.

네이티브와 그린 쓰레드는 자바에서 사용되는 쓰레드의 실제 구현상의 차이를 나타내는 것이다.

쓰레드를 자바 가상 기계 내에서 처리하는 것이 그린 쓰레드이고, 커널의 쓰레드 지원 기능을 이용하는 것이 네이티브 쓰레드이다.

 

비선점형 멀티태스킹

운영체제가 제어권을 가지고 있지 않고 응용 프로그램이 제어권을 가지고 있는 것으로 응용 프로그램이 제어권을 운영체제로 돌려주지 않고 중앙 처리 장치를 족점하면 컴퓨터가 다운되는 현상이 생길 수 있다.

 

선점형 멀티태스킹

운영체제가 제어권을 응용 프로그램에게 부여하는 것으로 응용 프로그램이 제어권을 독점하는 것을 방지하여 안정적인 작업 환경을 지원하는 체제이다.

 

 

 

 

 

- 문의사항은 위의 번호로 연락주시거나 그림을 클릭하시면 홈페이지로 이동됩니다. ^^ -

 

 

[자바공부하기2]Nateive Thread / Green Thread 선점형 / 비선점형

+ Recent posts