자바 상속(Inheritance) 사용법



상속(Inheritance)란



클래스에서 상속이란 기존에 만들어 놓은 클래스를 그대로 사용 하기 위해 쓰여진다.

상속 받는 클래스는 부모 클래스의 기능을 모두 사용 할 수 있다.

예제를 통해 이해를 도와 보자 아래와 같이 human 이라는 클래스가 있다.


package sample;


public class human {

private int age;

private String name;

private String job;

public void setHumanInfo( int age, String name, String job)

{

this.age = age;

this.name = name;

this.job = job;

}

public void introduce()

{

System.out.println( "My Name is " + name );

System.out.println( "I`m " + age + " and my job is " + job );

}

}


아래는 human을 상속한 korean 클래스가 있다.


package sample;


public class korean extends human {

}


클래스 상속하는 방법은 extends 키워드를 넣어 주면 된다.

보다시피 korean는 상속만 받았지 아무것도 구현 하지 않았다.

이것을 사용하는 예를 보도록 하겠다.


package sample;


public class sample {

public static void main(String[] args) {

    korean k = new korean();

   human h = new human();

   

   k.setHumanInfo(10, "keke", "tester");

   h.setHumanInfo(20, "hoho", "programer");

   

   k.introduce();

   h.introduce();

}

}


[결과]

My Name is keke

I`m 10 and my job is tester

My Name is hoho

I`m 20 and my job is programer


korean는 구현한 부분이 없는데 human을 상속 받아서 human의 기능을 모두 이용 할 수 있다.

다음에는 상속과 더불어 많이 언급되는 오버라이딩에 대해 설명 하도록 하겠다.



반응형

C++ 함수 오버로딩



함수 오버로딩?



함수 명이 같지만 인자나 리턴 값이 다르게 해서 함수를 만들 수 있다.

이것을 함수 오버로딩이라고 한다.

함수 명 그리고 인자, 리턴 까지 모두 같으면 컴파일 에러가 발생하지만 인자나 리턴 값을 다르게 하면

다른 함수로 인식을 한다.


아래 예제를 보자 

인자, 리턴 형이 서로 다른 sum이라는 같은 이름의 함수가 2개 정의 되어있다.


package sample;


public class sample {

int sum( int a, int b ){

System.out.println("int_sum ");

return a + b ;

}

float sum( float a, float b ){

System.out.println("float_sum ");

return a + b;

}

public static void main(String[] args) {

sample s = new sample();

int a = 21, b = 10, c = 0 ;

float d = 35, e = 55, f = 0 ;

c = s.sum(a, b);

f = s.sum(d, e);

}

}


[결과]


int_sum 

float_sum 


함수를 호출 하는 부분에서 똑같이 sum 함수를 호출 하지만 인자 값이 int 이냐 float이냐에 따라 호출 되는 함수가 다른 것을 확인 할 수 있다.


이로써 함수 오버로딩에 대해 알아 봤다.

도움이 되셨나요?



반응형

자바 생성자(Constructor) 사용법



생성자(Constructor)란



클래스 변수에 메모리를 할당 즉 인스턴스를 만드는 과정에서 호출되는 함수를 생성자 함수라 한다.

생긴 것은 아래와 같이 new 옆에 함수 모양처럼 생긴 것이 생성자 이다.


human jack = new human();


기본적으로 클래스를 만들때 생성자 함수를 정의 하지 않아도 컴파일 에러나 실행 에러나 나지 않는다.

아래처럼 생성자를 따로 구현 하지 않아도 상관 없다.


package sample;


public class human {

public String job;

}


일반적으로 생성자에서는 클래스가 사용할 준비가 되어 있도록 초기화 하는 작업을 한다.

예를 들어 아래와 같이 위의 human 클래스를 사용 한다고 해보자.


package sample;


public class sample {

public static void main(String[] args) {

   human jack = new human();

   System.out.println( " job : " + jack.job );

}

}


결과가 어떻게 출력 될까.. 아래 처럼 null이라고 의도 하지 않는 값이 출력이 된다.


job : null 



우리는 프로그래밍 할 때 언제나 의도한 값이 나와야 한다. 

그래서 다음과 같이 오류 값이 나오지 않도록 클래스의 변수를 사용 가능한 상태로 초기화 한다.


package sample;


public class human {

public String job;

public human()

{

job = "";

System.out.println("기본 생성자 호출");

}

}

 

이렇게 생성자에 job 변수를 초기화 시켜주면 null이라는 의도 하지 않는 값은 나오지 않는다.

생성자는 아래 처럼 만들면 되며 일반 함수와 만들 때 차이점은 리턴 형식이 없다는 점이다.


 [접근 범위][함수 명]( 인자1, 인자2... ) 


생성자에도 인자값을 넣을 수 있는데 다음과 같이 만드는 것도 가능하다.


package sample;


public class human {

private int age;

private String name;

private String job;

public human(int age, String name, String job)

{

this.age = age;

this.name = name;

this.job = job;

System.out.println("값 초기화 생성자 호출");

}

}

 

생성자에 인자가 추가 되면 실행 할 때 인자 값을 넣어서 호출 할 수 있게 된다.


package sample;


public class sample {

public static void main(String[] args) {

human hoke = new human(20, "hoke", "tester");

}

}


이상으로 자바에서 생성자 호출하는 방법에 대해 설명 했습니다.

도움이 되셨습니까?

반응형

'프로그램 > Java' 카테고리의 다른 글

[Java] 클래스 상속 (Inheritance)  (0) 2016.12.08
[Java] 함수 오버로딩 (Function Overloading)  (0) 2016.12.07
[Java] 함수(method) 사용법  (0) 2016.12.01
[Java] 클래스와 인스턴스  (0) 2016.11.23
[Java] 데이터 타입  (0) 2016.11.20

자바 함수(method) 사용법



함수(method)란



자바에서 함수란 클래스의 기능을 뜻한다.

인간이라는 클래스가 있다고 하자 인간이 흔히 할 수 있는 것이 무엇일까?

보고, 듣고, 먹고..등등 기능이 존재 한다.

이런 기능 하나하나를 함수라 한다.


다음 인간 클래스 예제를 보자


public class human {

private int age;

private String name;

private String job;


     private boolean checkAge( int age )

{

if( age < 1 )

return false ;

return true;

}

public void setHumanInfo( int age, String name, String job)

{

if( checkAge( age ) == false )

this.age = 1;

else

this.age = age;

this.name = name;

this.job = job;

}

public void introduce()

{

System.out.println( "My Name is " + name );

System.out.println( "I`m " + age + " and my job is " + job );

}

}


여기서 인간 클래스가 할 수 있는 기능은 정보입력(setHumanInfo) 과 소개(introduce)이다. 


이 기능이 곧 함수이며 함수는 다음과 같이 작성 할 수 있다.


 [접근 범위] [리턴 형식] [함수 명]( 인자1, 인자2... ) 


[접근 범위]

  -. public : 모든 클래스에게 접근 허용

  -. protected : 상속 관계 클래스에게만 접근 허용

  -. private : 선언된 클래스에서만 허용


[리턴 형식]

  -. 함수가 종료 후 함수를 호출 한 쪽에 특정 값을 전달 해 줄 수 있다.


[인자]

  -. 함수를 호출 할 때 함수에 값을 전달 할 수 있다.


예제에 사용되었던 함수를 보며 하나씩 설명해 이해를 돕도록 하겠다.


public void introduce()

{

System.out.println( "My Name is " + name );

System.out.println( "I`m " + age + " and my job is " + job );

}


이 함수는 접근 범위가 public 이므로 어떤 객체에서 접근이 가능하다.

리턴 형식은 void로 되어있는데 이것은 리턴 값이 없는 것을 의미 한다.

또한 인자값을 넣어야 하는 부분에는 () 이렇게 아무것도 들어있지 않아 인자도 존재 하지 않는다.



public void setHumanInfo( int age, String name, String job )

{

if( checkAge( age ) == false )

this.age = 1;

else

this.age = age;

this.name = name;

this.job = job;

}


이 함수는 앞에 함수와의 차이점은 인자가 존재 한다는 점이다.

인자 넣는 부분에 age는 int형, name은 String형등으로 총 3개의 인자를 전달 해준다.





private boolean checkAge( int age )

{

if( age < 1 )

return false ;

return true;

}


이 함수는 앞에 있는 함수 들과 다르게 접근 범위가 private 이다.

human 객체 안에서만 동작 가능하며 아래 예제와 같이 다른 곳에서 사용 하려고 하면 


package sample;


public class sample {

public static void main(String[] args) {

   human jack = new human();

   human hoke = new human();

   

            jack.setHumanInfo(10, "jack", "worker" );

   jack.checkAge(10);

}

}


아래와 같은 오류가 발생 한다.

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 

The method checkAge(int) from the type human is not visible


at sample.sample.main(sample.java:9)


setHumanInfo 함수 안에서 사용 하는데 이럴땐 문제가 없다.


또한 다른점이 boolean인데 boolean은 성공,실패 두가지 값을 갖는 데이터 형식이며 이 값을 리턴 해 준다.

setHumanInfo를 보자


public void setHumanInfo( int age, String name, String job )

{

        boolean retval = checkAge(age) ; -----------> checkAge 결과 값에 따라 retval에 값이 true나 false가 된다.

if( retval == false )

this.age = 1;

else

this.age = age;

this.name = name;

this.job = job;

}



이상으로 자바에서 함수 사용법에 대해 설명했다.

도움이 되셨나요?

반응형

'프로그램 > Java' 카테고리의 다른 글

[Java] 함수 오버로딩 (Function Overloading)  (0) 2016.12.07
[Java] 생성자( Constructor )  (0) 2016.12.06
[Java] 클래스와 인스턴스  (0) 2016.11.23
[Java] 데이터 타입  (0) 2016.11.20
[Java] 자바 기초, 컴파일, 실행  (0) 2016.11.19

+ Recent posts