Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- cursor문
- 환경설정
- 컬렉션 타입
- NestedFor
- 사용자예외클래스생성
- 컬렉션프레임워크
- 집합_SET
- GRANT VIEW
- 참조형변수
- abstract
- 생성자오버로드
- 제네릭
- 정수형타입
- 자동차수리시스템
- 대덕인재개발원
- 예외처리
- 예외미루기
- 메소드오버로딩
- 객체 비교
- 다형성
- 추상메서드
- oracle
- exception
- 어윈 사용법
- Java
- 인터페이스
- 자바
- 오라클
- 한국건설관리시스템
- EnhancedFor
Archives
- Today
- Total
거니의 velog
230829_스레드 1 본문
[ArgsTest.java]
package kr.or.ddit.basic;
public class ArgsTest {
/*
* 접근제한자 반환값 메서드명( 매개변수들... ) {
*
* }
*/
// public static void test(int a, int b) {
//
// }
// 매개변수로 받은 정수들의 합계를 구하는 메서드를 작성하시오.
// (단, 이 정수들의 개수는 상황에 따라 다를 수 있다.)
// 배열 이용하기
public int sumArr(int[] data) {
int sum = 0; // 합계 저장 변수 초기화
for(int i=0; i<data.length; i++) {
sum += data[i];
}
return sum;
}
// 가변형 인수 ==> 메서드를 호출할 때 사용되는 인수의 개수가 호출할 때마다 다를 때 사용한다.
// - 가변형 인수는 구현한 메서드 안에서는 배열로 처리된다.
// - 가변형 인수는 한가지 자료형만 사용할 수 있다.
public int sumArg(int...data) {
int sum = 0;
for(int i=0; i<data.length; i++) {
sum += data[i];
}
return sum;
}
// 가변형 인수와 일반적인 인수를 같이 사용할 경우에는 가변형 인수를 제일 뒤 쪽에 배치해야 한다.
public String sumArg2(String name, int...data) {
int sum = 0;
for(int i=0; i<data.length; i++) {
sum += data[i];
}
return name + "씨의 점수 ==> " + sum + "점";
}
public static void main(String[] args) {
// test(10, 20); // 인수 개수 = 매개변수 개수
ArgsTest test = new ArgsTest();
int[] nums = {100, 200, 300, 400}; // 배열 선언과 초기화를 동시에 할 때
// int[] nums;
// nums = {100, 200, 300, 400}; // 배열 선언과 초기화 분리할 수 없음.
// 배열 선언과 초기화를 동시에 할 수도 있고 따로 할 수도 있다.
// int[] nums2 = new int[]{100, 200, 300, 400};
int[] nums2; // 배열 선언
nums2 = new int[]{100, 200, 300, 400}; // 배열 초기화
System.out.println(test.sumArr(nums)); // 1000
// System.out.println(test.sumArr( {1, 2, 3, 4, 5} )); // 배열 초기화 불가능.
System.out.println(test.sumArr( new int[]{1, 2, 3, 4, 5} )); // 15
System.out.println("--------------------------------------");
System.out.println(test.sumArg(100, 200, 300, 400)); // 1000
System.out.println(test.sumArg(1, 2, 3, 4, 5)); // 15
System.out.println("--------------------------------------");
System.out.println(test.sumArg2("홍길동", 10,20,30,40)); // 홍길동씨의 점수 ==> 100점
}
}
[GenericTest.java]
package kr.or.ddit.basic;
// 제네릭 나오기 전에 사용한 방식
class NonGeneric {
private Object value;
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}
/*
* 제네릭 클래스 작성 방법
*
* 형식 )
*
* class 클래스명<제네릭타입글자> {
* 제네릭타입글자 변수명; // 변수 선언에 제네릭을 사용할 경우
* ...
*
* 제네릭타입글자 메서드명( 매개변수들... ) { // 메서드의 반환값에 제네릭을 사용할 경우
* ~~~
* return 값;
* }
*
* 반환값타입 메서드명(제네릭타입글자 변수명, ...) { // 메서드의 매개변수에 제네릭을 사용할 경우
* ~~~
* return 값;
* }
* }
*
*
*/
// MyGeneric<String> mg1 = new MyGeneric<String>();
// MyGeneric<Integer> mg2 = new MyGeneric<>();
class MyGeneric<T> {
private T value;
public void setValue(T value) {
this.value = value;
}
public T getValue() {
return value;
}
}
public class GenericTest {
public static void main(String[] args) {
NonGeneric ng1 = new NonGeneric();
ng1.setValue("가나다라");
NonGeneric ng2 = new NonGeneric();
ng2.setValue(100);
String rtnNg1 = (String) ng1.getValue();
System.out.println("문자열 반환값 rtnNg1 => " + rtnNg1); // 문자열 반환값 rtnNg1 => 가나다라
int rtnNg2 = (int) ng2.getValue();
System.out.println("정수 반환값 rtnNg2 => " + rtnNg2); // 정수 반환값 rtnNg2 => 100
System.out.println();
System.out.println("---------------------------------");
MyGeneric<String> mg1 = new MyGeneric<String>();
mg1.setValue("우리나라");
// mg1.setValue(1000); // 오류가 남. 제네릭에 설정한 데이터 타입(String)이 아니기 때문.
MyGeneric<Integer> mg2 = new MyGeneric<>();
mg2.setValue(500);
// mg2.setValue("대한민국"); // 오류가 남. 제네릭에 설정한 데이터 타입(Integer)이 아니기 때문.
// 반환값 받아올 때 형변환이 필요 없다.
String rtnMg1 = mg1.getValue();
System.out.println("제네릭 문자열 반환값 rtnMg1 => " + rtnMg1); // 제네릭 문자열 반환값 rtnMg1 => 우리나라
int rtnMg2 = mg2.getValue();
System.out.println("제네릭 정수 반환값 rtnMg2 => " + rtnMg2); // 제네릭 정수 반환값 rtnMg2 => 500
System.out.println();
System.out.println("---------------------------------");
// ----------------------------------------------------------
// String temp = (String) ng2.getValue();
// System.out.println("temp = " + temp);
// Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
// 원 데이터는 Integer인데 Object로 감싸서 가져옴.
// 어떤 변수에 저장할 때는 Object가 가장 큰 조상이므로 변수 타입에 맞게 다운 캐스팅할 수 있다. 문법적으로는 전혀 문제가 없다.
// 실행할 때 문제가 발생. Object 껍데기 벗기고 그 안에 들어 있는 데이터가 Integer 데이터. 이를 String으로 바꿀 수 없는 것.
// 예전에는 이런 식의 오류가 많았다.
// 컴파일 에러는 찾기 쉬우나, 논리적 오류는 찾기 어려운 이유.
}
}
'대덕인재개발원 > 대덕인재개발원_자바기반 애플리케이션' 카테고리의 다른 글
230831_스레드 3 (0) | 2023.08.31 |
---|---|
230830_스레드 2 (0) | 2023.08.29 |
230829_컬렉션 프레임워크 6 (1) | 2023.08.29 |
230828_컬렉션 프레임워크 5 (1) | 2023.08.28 |
230825_컬렉션 프레임워크 4 (0) | 2023.08.25 |