관리 메뉴

JIHYUN JEONG

[java] 엄마도 이해하는 자바 기본 2일차 본문

Information Technology/Java

[java] 엄마도 이해하는 자바 기본 2일차

StopHyun 2013. 2. 18. 11:00


□ Method (AM 09:00 ~ 10:00)

 Method = 함수 , 특정한 행위를 하는 것
 ○ public static void go () {}
  - public static : modifier
  - void : return type
  - go : method name
  - () : parameter list
  - {} : method body

 ○ Method 사용 단계
  1. method 정의 
  2. method 호출
 
 [예시]
  
□ Method 만들기 (AM 10:00 ~ 11:00)
 1. 정수형 매개변수 2개를 받아 그합을 돌려주는 sum()

2. 문자열 변수 하나를 매개변수로 받아 그 문장열 뒤에 "hello"를 추가해 돌려주는 addString()

3. 문자열 변수 하나를 매개변수로 받아 그 문자열 앞에 "hello"를 추가해 출력하는 printString()

4. 정수형의 반지름 값을 입력 받아 원 면적을 계산해 return하는 getArea()

5. 논리형 변수 두 개를 입력 받아 두개 모두 참이면 true, 그렇지 않으면 false를 return하는 result()

6. static int count = 300;

public static void go() {
System.out.println(count);
}

 1) go()를 사용하는 문장
 2) 다음 문장의 틀린 부분을 고치시오.
   system.out.println(go());


Method 만들기
2. 정수형 변수 두개를 입력 받아 그 중 큰 수를 return하는 max()
3. 논리형 변수 한개를 입력 받아 그 값을 반대로 바꿔 return 하는 reverse()

□ 생성자 (PM 1:00 ~ 2:00)
 ○ Test t = new Test();
   1. Heap에 객체를 위한 공간 할당
   2. instance 변수 자동 초기화
   3. instance 변수 명시적 초기화
   4. 생성자 호출
   5. 참조값 반환
  ※ instance 변수 = member field field 속성, attribute
  ※ default 생성자를 추가 해 놓지 않고 디폴트 생성자를 사용할 수 없다.(매개변수 생성자를 정의해 두었을 시)
  ※ 클래스 안에 생성자가 하나가 있으면 VM이 자동으로 디폴트 생성자를 제공하지 않는다.

□ Constructor - Car / Circle
 
□ Constructor - Car 
Constructor with parameters
 - Car(int num) {}
   Car(int num, String model) {}
   Car(int num, String model, String owner) {}

  → main()에서 각 생성자 이용해서 객체 생성하기 

□ this() 
 - 생성자에서 생성자 호출 (생성자 안에서만 쓴다)
  public Car() {
       this(0);
  }

  public Car(int num){
       this.num = num;
  }
  
  → 위에 경우는 this(0)은 아래에 있는 int num 파라미터로 찾아가게 된다

□ 생성자 호출
 - Car(int num) {}
    Car(int num, String model) {}
     Car(int num, String model, String owner) {}
  => this를 사용하여 생성자 안에 생성자를 사용 할것

□ Method Overloading
 - 한 클래스 내에서 동일한 이름의 메소드를 여러 번 정의해 놓는 일
 - 각각의 매소드는 파라메터 리스트로 구분함

 - public void go() {}
 - public void go(int a) {}
 - Ex) class Math
  => go() 라는 메소드가 오버로딩 되어 있다.

□ 객체지향 언어의 특징 (2:00 ~ 3:00)
 1. 상속 (Inheritance)
 2. 정보은폐 (Information Hiding, EnCapsulation)
 3. 다형성 (Polymorphism)

□ 상속
  새로운 클래스를 설계할 때 기존 클래스의 내용을 물려 받는 것
  기존 클래스의 내용을 바탕으로 새로운 클래스를 설께하는 것

   Keyword "extends"
     class Parent {}
     class Child extends Parent {}

□ Pr) Parent / Child
 [예시]
  public class Parent {
String name = "Tom";
String address = "Seoul";
public String getName() {
return name;
}
public String getAddress(){
return address;
}
  }
    public class Child extends Parent{
int age =30;

public static void main(String[] args) {
Child c = new Child();
System.out.println(c.getName());
System.out.println(c.getAddress());
}
}

□ Method Overriding
 - 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의 하는 것
 - Pr) Child 클래스에서 getName() overriding 하기

 ※ 모든 상속관계에서 부모가 자식보다 항상 훨씬 큼
 ※ 메소드 오버라이딩은 타입과 상관없이 무조건 자식꺼 사용
  Ex) Parent c = new Child();    (O)
       

 2. Parent c를 사용시도   1. Child c 생성됨
 

 즉 범위는 Child 이나 사용하는 건 2. Parent C 범위=> 그래서 사용 가능

 


       Child c = new Parent();    (X)

. 1. Parent c 생성   2. Child c를 사용시도
 

 

 즉 범위는 Parent 이나 사용하는 건 2. Child C 범위=> 그래서 사용을 할 수가 없다


※ static 함수 내에서는 super, this 키워드 사용할 수 없다.

□ 추상 클래스 (3:30 ~ 4:30)
 ○ 추상 메소드 : 함수의 body({}) 부분이 없는 미완성의 함수
 ex) public abstract void go(String m);

 ○ 추상 클래스 : 추상 메소드를 가지는 클래스
 ex) public abstract class MyAbstract{
           public abstract void go(String m);
      } 
 ○ 미완성의 클래스 이므로 생성불가
 ex) public abstract class MyAbstract{}
         MyAbstract m = new MyAbstract();        (X)
 
 ○ 다른 클래스에서 추상 클래스를 상속해서 미완성의 메소드를 구현(완성)해 줘야 함
 ex) public class Complete extends MyAbstract{
       public abstract void go(String m) {}
      } 

□ Ex) Abstract class

□ interface (4:30 ~ 5:30)
 ○ 클래스 안의 모든 메소드가 추상메소드인 미완성의 클래스
 ○ 미완성의 클래스 이므로 생성불가
  - interface MyInterface {
        public void go();
    }
    MyInterface m = new MyInterface();        (O)

※ 추상 클래스는 추상 메소드 + 일반 메소드, but 인터페이스는 Only 추상 메소드
※ 인터페이스 안에서는 abstract 키워드 필요 없음 

 ○ 다중 상속을 지원하기 위해 나옴
 ○ 다른 클래스에서 미완성의 메소드를 구현(완성)해 줘야 함 : implements
   
   public class Complete implements MyInterface {
       // ............
       public void go() {} // 반드시 나와야 함
   }

※ Tom(추상 클래스) , Hilary(인터페이스), Bill(인터페이스), LittleTom(자식)
 - LittleTom은 부모로 Tom, Hilary, Bill 모두 가능하다. 

 ○ 인터페이스 안의 모든 필드는 static, final 
     interface MyInterface{
         static final int count = 30;
         public void go();
     }

     count = 55;     // (X)
     System.out.println(MyInterface.count);    // (O)


  ※ Tom(슈퍼클래스, int age = 10;), Hillary(인터페이스, int age= 5;), Tom(서브클래스, int age = 25;)
      Tom 클래스에서 age 변수를 사용할 시
      → this.age, super.age, interface.age

□ final
 ○ 멤버필드 : 값 변경 불가
 ○ 메소드 : 오버라이딩 불가
 ○ 클래스 : 상속 불가
 
 ○ final int count = 10;
 ○ final void go() {}
 ○ final class FinalClass{}


[추가 연습예제]

 

*** 사각형을 나타내는 클래스(Rect.java)를 설계하시오.


    1. member field: 

가로/세로를 나타내는 width, height(int)

    2. method:

사각형 둘레를 구하는 함수(getCircum())

사각형 면적을 구하는 함수(getArea()) 


3. 생성자

Rect(): 가로/세로 값을 0으로 지정

Rect(int width, int height) : 가로/세로 값을 받아와 멤버필드에 지정

*** RectUser 라는 클래스를 만들고 main() 안에서 

1. Rect 객체를 2개 생성하고(생성자 각각 다른것 사용)

2. 면적과 둘레값을 출력하시오.


*** Food 라는 이름의 추상클래스를 정의한다. 

1. Food는 cook(), taste() 라는 두개의 추상 메소드를 가진다.


2. Food를 상속받는 Noodle, Sandwich라는 두개의 클래스를 정의한다.


3. FoodUser라는 클래스의 main() 함수에서

1) Food type의 배열을 만들고

2) 그 배열안에 Noode객체와 Sandwich객체를 각각 하나씩 생성해 넣는다.

3) 배열안의 각각의 객체가 가지고 있는 cook(), taste()를 호출해 본다..



Car.java

Child.java

Circle.java

Circle1.java

DataTypeTest.java

ICircle.java

IRect.java

IShape.java

IShapeUser.java

MethodTest.java

MethodTest1.java

Parent.java

Rect.java

Shape.java

ShapeUser.java

string.java





Comments