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

UNION, INTERSECT, MINUS




UNION( 중복 제거 합집합 ), UNION ALL ( 중복 포함 합집합 )



UNION은 합집합을 의미 한다.

2개 이상의 테이블 조회 결과중 중복을 제외 하고 모두 출력 된다.


예제를 통해 이해를 돕도록 하겠다.


SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE > 80;

[결과]

2

3


SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE < 30;

[결과]

3

4


각각의 쿼리 실행의 결과가 (2,3), (3,4)입니다.

이것을 UNION을 이용해서 중복된 값을 제거 하고 조회 되도록 해보겠다.


SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE > 80

UNION

SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE < 30;

[결과]

2

3

4


UNION을 사용하는 방법은 2개 이상의 데이터 조회 SELECT 구문 사이에 UNION 을 넣어 주면 된다.

[SELECT를 이용한 데이터 집합1]

UNION

[SELECT를 이용한 데이터 집합2]


중복된 값을 제거 하지 않고 모두 표시 하고 싶을 때는 UNION ALL을 사용 한다.


SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE > 80

UNION ALL

SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE < 30;

[결과]

2

3

3

4


UNION ALL을 사용하는 방법은 2개 이상의 데이터 조회 SELECT 구문 사이에 UNION ALL을 넣어 주면 된다.

[SELECT를 이용한 데이터 집합1]

UNION ALL

[SELECT를 이용한 데이터 집합2]




INTERSECT(교집합)



INTERSECT은 교집합을 의미 한다.

2개 이상의 테이블 조회 결과중 중복 값만 출력 된다.


예제를 통해 이해를 돕도록 하겠다.


SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE > 80;

[결과]

2

3


SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE < 30;

[결과]

3

4


각각의 쿼리 실행의 결과가 (2,3), (3,4)입니다.

이것을 INTERSECT을 이용해서 중복된 값만 조회 되도록 해보겠다.


SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE > 80

INTERSECT

SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE < 30;

[결과]

3



MINUS(차집합)



MINUS은 차집합을 의미 한다.

2개 이상의 테이블 조회 결과중 기준이 되는 테이블에서 나머지 테이블의 중복된 값을 제거하고 출력 된다.


예제를 통해 이해를 돕도록 하겠다.


SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE > 80;

[결과]

2

3


SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE < 30;

[결과]

3

4


각각의 쿼리 실행의 결과가 (2,3), (3,4)입니다.

이것을 MINUS을 이용해서 첫번째 테이블 결과중 두 번째 테이블과 중복값을 제거하고 조회 되도록 해보겠다.


SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE > 80

MINUS

SELECT CLASS FROM TBL_REPORT_CARD WHERE SCORE < 30;

[결과]

2


반응형

오라클 GROUP BY, HAVING 절




GROUP BY절 사용법


GROUP는 특정 컬럼을 기준으로 집계를 내는데 사용된다.

일단 예를 들어 보도록 하겠습니다.

아래와 같이 학급 전체의 성적을 나타내는 테이블이 있습니다.

class는 반 명이며 name 학생 이름 score는 해당 학생의 성적 점수 입니다.




이제 이런 학급 전체 성적을 학급 별로 총합 집계를 내고 싶으면 group by를 이용합니다.


SELECT CLASS, SUM(SCORE) 

FROM TBL_REPORT_CARD 

GROUP BY CLASS;


그럼 다음과 같이 학급별로 점수 총합의 결과가 출력 됩니다.



Group by를 사용 하는 방법은 아래와 같습니다.



SELECT [GROUP BY 절에 지정된 컬럼1] [GROUP BY별로 집계할 값] 

FROM [테이블 명] 

GROUP BY [ 그룹으로 묶을 컬럼 값 ]




Having절 사용법


Having 절은 Group by로 집계된 값 중 where 절 처럼 특정 조건을 추가한다고 생각 하시면 됩니다.

예를 들어 학급별 총합 결과 중에 150점 이상인 것만 출력 하고 싶으면 다음과 같이 예제를 작성하면 됩니다.



SELECT CLASS, SUM(SCORE) 

FROM TBL_REPORT_CARD 

GROUP BY CLASS

HAVING SUM(SCORE) > 150 ;


결과 값은 아래와 같습니다.


Having 절을 사용 하는 방법은 아래와 같습니다.


SELECT [GROUP BY 절에 지정된 컬럼1] [GROUP BY별로 집계할 값] 

FROM [테이블 명] 

GROUP BY [ 그룹으로 묶을 컬럼 값 ]

HAVING [조건 추가] ;


이상으로 Group by와 Having 절에 대해 알아봤습니다.

도움이 되셨나요?

반응형

+ Recent posts