2018년 9월 6일 목요일

Java 클래스와 객체 구현

우리는 이전시간에 자바의 큰 특징인 클래스와 객체를 간단히 살펴보았다.

이번에는 클래스와 객체를 예를들어 직접 만들어보자.
그전에 우린 인터페이스와 추상클래스에 대해서 간단히 살펴보고 진행하자.

- 인터페이스란?
필요한 기능만을 모아놓은 덩어리다.
쉽게말해, 이 기능을 한번 정의를 해놓으면, 재 작성하지않고도 해당 객체에 필요한 기능을 불러와 반복적으로 코드를 작성할 필요없이 재사용성이 가능하다


- 추상클래스란?
자식의 기능이 꼭 필요 할 경우 생성해주는 역할을 한다.
예를들어 부모 클래스에서 상속받는 자식 클래스들에게 공통적으로 필요한 부분 혹은 꼭 상속시켜야만하는 기능이 있을경우 이 추상클래스를 사용하면 된다.

: 추상클래스와 인터페이스는 상속관계가 가능하지만,  직접 자식을 생성 혹은 구현 할 수 없다. (인스턴스 불가능) 다른 클래스에게 기능을 부여하는 역할을 한다는 의미이다.
* 클래스들에게 필요한건 -> 인터페이스와 추상클래스
* 객체에게 필요한건 -> 필요한 기능들만 집합한 클래스


이제, 본격적으로 객체를 생성해보자.
객체를 생성하기위해 우리에게 필요한 클래스, 인터페이스는 다음과 같다.
1. 사람, 혹은 동물들이 할 수 있는 동작들을 모아놓은 인터페이스
2. 1번의 생물체들의 공통적인 특징을 모아놓은 부모클래스
3. 1, 2번을 상속받아 자식 클래스 구현하기.


1. 3개의 인터페이스 구현
1-1. 걷기가 가능하다 Running 인터페이스
1-2. 하늘을 날 수 있다 Flying인터페이스
1-3. 수영이 가능하다 Swimming 인터페이스

  1. interface Running{
  2.  public void run();
  3. }
  4. interface Flying{
  5.  public void fly();
  6. }
  7. interface Swimming{
  8.  public void swim();
  9. }

이전에 설명못했던 부분이 있는데, 인터페이스는 직접 메소드의 body ( 메소드의 내용부분)를 직접 작성할 수 없다.

2. 상속가능한 부모클래스 구현

  1. class Alive{
  2.  public String name;
  3.  public int age;
  4.  public Alive(String name, int age){  // 생성자 구현
  5.     this.name = name;
  6.     this.age = age;
  7.  }
  8.  public void getInfo(){  // 객체 정보를 출력
  9.    System.out.println("이름 : " + this.name);
  10.    System.out.println("나이 : " + this.age);
  11.  }
  12.  public void Addage(){   // 객체 나이 1씩 증가
  13.     this.age++;
  14.     System.out.println("현재나이 : " + this.age);
  15.  }
  16.  public void possibleAct(){ // 객체가 가능한 기능들 실행
  17.  
  18.  }
  19. }

3. 위의 인터페이스, 부모클래스를 상속받는 자식클래스 생성

  1. class Bird extends Alive implements Flying, Running{
  2.     public Bird(String name, int age){
  3.      super(name, age); // 상속받은 객체의 생성자부분을 실행시 부모의 생성자부터 실행이되므로 super()를 통해 부모 생성자 실행!
  4.    }
  5.     public addAge(int year) {  // 메소드 오버로딩.
  6.         System.out.println(year + "년이 지났습니다.");
  7.         this.age += year;
  8.         System.out.println("현재 나이 : " + this.age + "살 입니다. ");
  9.     }
  10.     // 인터페이스의 메소드 오버라이딩 1
  11.     pubic void Fly(){
  12.         System.out.println(this.name + "님은 나는것이 가능합니다.");
  13.     }
  14.     public void Run(){
  15.         System.out.println(this.name + "님은 걷기가 가능합니다.");
  16.     }
  17.     // 클래스의 메소드 오버라이딩 2
  18.     public possibleAct(){
  19.         Fly();
  20.         Run();
  21.     }
  22. }


오버로딩과 오버라이딩은 다음시간에 설명할텐데, 우선, 간단히 부모에게 상속받은 메소드를 원래 것에서 자신의 스타일에 맞게 변형시켜 놓은 메소드라고 알아두자.

4. 객체생성 (인스턴스)

  1. public exam{
  2.     public static void main(String[] args){
  3.         Bird b1 = new Bird("꾀꼬리"11);
  4.         b1.getInfo();
  5.         b1.possibleActivity();
  6.         b1.addAge(3);
  7.     }
  8. }



▶ 실행결과











우리는 한 마리의 새 를 구현했다. 이처럼 자바의 가장 큰 특징인 클래스와 객체에 대해서 간단하게 살펴보았다,

다음시간에는 오버로딩과 오버라이딩에 대해서 살펴보도록 하겠다.


댓글 없음:

댓글 쓰기

[Java] N-I/O(Non-Blocking) 파일 읽기 쓰기 - GatheringByteChannel, ScatteringByteChannel, ByteBuffer 사용.

우리는 지금까지 다음과 같이 살펴보았다. 1.  InputStream / OutputStream : 입, 출력 스트림을 바이트로 처리하여 읽기, 쓰기. 2.  FileInputStream / FileOutputStream : 입, 출력 스트림을 ...