1) 래퍼 클래스 (Wrapper Class)
1.1 기본 자료형을 객체로 다루기 위해 사용되는 클래스를 의미한다.
- JDK 5 버전부터 지원되며 Autoboxing, Unboxing 기능을 제공.
- Autoboxing : 일반 자료형의 값을 래퍼 클래스로 대입해준다.
- Unboxing : 래퍼 클래스가 가진 값을 일반 자료형으로 변경해준다.
- Autoboxing, Unboxing 은 컴파일러에서 코드를 변경하여 바이트 코드를 생성해주는 것 (편리한 코딩!)
1.2 래퍼 클래스의 종류 및 내부 함수
- 종류 : Byte, Character, Short, Integer, Long, Float, Double, Boolean
- Integer.parseInt("10") : Integer 래퍼클래스의 내부 함수(static)를 이용하면 문자열을 int형으로 반환.
2) 메서드 (Method)
2.1 static 메서드
- 클래스 객체를 생성하지 않아도 사용이 가능한 메서드이다.
- 클래스명.메서드명() 으로 사용하며 static이 아닌 멤버 변수는 사용 할 수 없다.
- Integer.intValue() : 클래스 내부에 저장 된 int 자료형 값을 반환해준다.
- Integer.valueOf("100") : 생성자를 사용하지 않고 정수나 문자열을 Integer 클래스로 반환 받을 수 있다.
2.2 메서드 문법
- [접근제한자][static][반환형][메서드 이름](자료형 지역변수, 자료형 지역변수2)
- StringBuffer, StringBuilder 클래스 : 문자열을 담을 수 있는 버퍼 클래스 (받는 문자열 크기를 자동 확장)
- 객체 지향 재사용성 목적에 맞게 UI와 비지니스 로직을 분리하는 것이 좋다.
- 메서드는 고유 영역이며 메서드안에 또 다른 메서드를 포함되면 안된다.
소스 코드
package ex1;
public class Ex1_Wrapper {
public static void main(String[] args) {
// 기본 타입(primitive type)과 참조 타입(reference type)
// 풀이) 생성 된 객체의 주소.(.의 의미 > 참조해서 찾아가라)
// 그 객체가 가지고 있는 자원(메서드, 속성)을 호출 및 사용
System.out.println("Test".getBytes());
// 기본 자료 타입(primitive type)을
// 객체로 다루기 위해서 사용하는 클래스들을
// 래퍼 클래스(wrapper class) 라고 합니다.
int num = 10;
// wrapper class (Integer)
// jdk 5.0 이상부터 AutoBoxing , UnBoxing을 제공한다.
// AutoBoxing -> 일반 자료형을 Wrapper 클래스로 변경한다.
// Integer num1 = new Integer("10");
// Integer num2 = new Integer("10");
Integer num1 = 10;
Integer num2 = 10;
System.out.println(num1.shortValue());
System.out.println(num1 == num2);
// 범용적인 사용 예
String number1 = "19";
// int ageNum = new Integer(number1);
// Integer 객체를 힙에 생성시키지 않고 바로 스택에서 문자열 정수를 정수값으로 반환
int ageNum = Integer.parseInt(number1);
System.out.println("agenum : " + (ageNum >= 19));
// ----------- jdk 5.0버전부터
Integer ageNum2 = new Integer("10"); // Integer 객체로 생성한 것
int res = ageNum2.intValue(); // 일반 자료형
System.out.println(ageNum2);
System.out.println(res);
// jdk 5.0버전부터 UnBoxing -> Wrapper 클래스를 일반 자료형으로 변경한다.
int ageNum3 = new Integer("10");
// 연습문제) Wrapper 클래스의 종류를 찾아서 AutoBoxing , UnBoxing을 실습해봅시다.
// 예시)
System.out.println("--------------------------------");
Boolean b1 = true;
String b1str = b1.toString();
System.out.println("Boolean AutoBoxing 실습 : " + b1str);
boolean b2 = b1;
System.out.println("Boolean UnBoxing 실습 : " + b2);
System.out.println("--------------------------------");
Byte by1 = 10; // AutoBoxing
byte by1stack = by1.byteValue();
System.out.println("Byte AutoBoxing 실습 : " + by1stack);
byte by2 = by1; // UnBoxing
System.out.println("Byte UnBoxing 실습 : " + by2);
System.out.println("--------------------------------");
Character ch1 = 'C'; // AutoBoxing
int ch1cp = ch1.compareTo('J'); // compareTo 메서드는 ch1과 전달인자 'J'의 값을 비교하여 차이 값을 전달한다.
System.out.println("Character AutoBoxing 실습 : " + ch1cp);
char ch2 = ch1; // UnBoxing
System.out.println("Character UnBoxing 실습 : " + ch2);
System.out.println("--------------------------------");
Short sh1 = 25000; // AutoBoxing
int sh1hash = sh1.hashCode();
System.out.println("Short AutoBoxing 실습 : " + sh1hash);
short sh2 = sh1; // UnBoxing
System.out.println("Short UnBoxing 실습 : " + sh2);
System.out.println("--------------------------------");
Long lg1 = 12345678900L; // AutoBoxing
String lg1str = lg1.toString();
System.out.println("Long AutoBoxing 실습 : " + lg1str);
long lg2 = lg1; // UnBoxing
System.out.println("Long UnBoxing 실습 : " + lg2);
System.out.println("--------------------------------");
Float ft1 = 123.456f; // AutoBoxing
double ft1db = ft1.doubleValue();
System.out.println("Float AutoBoxing 실습 : " + ft1db);
float ft2 = ft1; // UnBoxing
System.out.println("Float UnBoxing 실습 : " + ft2);
System.out.println("--------------------------------");
Double db1 = 123.456; // AutoBoxing
float db1ft = db1.floatValue();
System.out.println("Double AutoBoxing 실습 : " + db1ft);
double db2 = db1; // UnBoxing
System.out.println("Double UnBoxing 실습 : " + db2);
}
}
package ex1;
import java.util.Scanner;
public class Ex2_Scanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("문자1 : ");
// 키보드의 입력값 입력 후 (개행) 문자열로 반환
// String str;
// str = sc.nextLine();
String str = sc.nextLine();
System.out.print("숫자 : ");
// Integer 래퍼 클래스의 내부 함수를 이용하여 입력된 문자열을 int형으로 변환해준다.
int num = Integer.parseInt(sc.nextLine());
System.out.print("문자2 : ");
String str2 = sc.nextLine();
System.out.println("출력");
System.out.println("문자1 : " + str);
System.out.println("숫자 : " + num);
System.out.println("문자2 : " + str2);
// 키보드 장치로부터 연결 된 Scanner 객체를 종료
sc.close();
}
}
package ex1;
import java.util.Scanner;
public class Ex3_IntegerWraffer {
public static void main(String[] args) {
// user interface => UI
Scanner sc = new Scanner(System.in);
System.out.print("반드시 정수를 입력하세요 : ");
// int형을 클래스로 제공해주는 자바 API
String numStr = sc.nextLine();
// NumcerFormatException이 발생될 수 있다.
// 숫자를 나타내는 문자열 값을 정수 int로 반환해주는 메서드
try {
// 예외가 일어 날법한 코드
int num = Integer.parseInt(numStr);
System.out.println("입력 값의 2배 : " + (num * 2));
} catch (Exception e) {
// 예외가 일어나면 실행
System.out.println("숫자만 입력하셔야 합니다.");
System.out.println("error : " + e.getMessage());
}
}
}
package ex2;
import java.util.Scanner;
public class Ex1_Boolean {
private String aa;
// JVM이 처음 호출하는 메서드
public static void main(String[] args) {
String name = scanName();
int age = scanAge();
System.out.println("당신의 이름은 : " + name + "입니다.");
System.out.println("당신의 나이는 : " + age + "세 입니다.");
Boolean juniorAge = checkAge(age);
if (juniorAge == true) {
System.out.println("당신은 미성년자입니다.");
} else {
System.out.println("당신은 성인입니다.");
}
}
// 정수로 반환하는 메서드를 작성 해보세요.
// 추가) 일반자료형, 참조자료형 각각 Wrapper 클래스까지 포함
// 배운데로 연습을 권장합니다.
public static int scanAge() {
Scanner sc = new Scanner(System.in);
System.out.print("나이를 입력하세요 : ");
try {
int age = Integer.parseInt(sc.nextLine());
return age;
} catch (Exception e) {
// 예외가 일어나면 실행
System.out.println("숫자만 입력하셔야 합니다.");
System.out.println("error : " + e.getMessage());
}
return 0;
}
public static String scanName() {
Scanner sc = new Scanner(System.in);
System.out.print("이름을 입력하세요 : ");
String str = sc.nextLine();
return str;
}
public static Boolean checkAge(int age) {
Boolean bool = (age < 19);
return bool;
}
// static 메서드를 정의한다.
/*
<핵심 요약>
void : 반환 값이 없을 경우, return 문을 표시하지 않음
반환형 : 일반자료형, 참조자료형, return 문으로 반환형에 맞게 값을 표시
- 메서드 이름 : 소문자 시작 *****
// 인자값 : 메서드를 호출할 때 전달 받을 값에 맞도록 선언이 되어 있어야 한다.
[접근제한자][static][반환형][메서드 이름](자료형 지역변수, 자료형 지역변수2) {
return 반환값
}
*/
public static String addMember(String id, String pwd, int age) {
StringBuffer sb = new StringBuffer();
sb.append("아이디 : ").append(id);
sb.append("비밀번호 : ").append(pwd);
sb.append("나이 : ").append(age - 1);
// println() : 인자로 전달된 값을 모두 문자로 변환 해주는 메서드이다.
System.out.println(sb);
// StringBuffer 객체이지, String 클래스와 연관이 없는 객체이다
return sb.toString();
}
public static void printLog() {
}
// 반환 값이 있는 메서드
public static String printMsg() {
return "test";
}
}
package ex2;
import java.util.Scanner;
public class Ex2_Oper1 {
// 메서드 역활, 분류
// 객체 지향 : 재사용성 (다형성, 캡슐화 등등)
// 자바클래스를 하나
// 안드로이드, jsp, 스프링(웹어플리케이션), 스윙, Fx.....
public static void main(String[] args) {
// 콘솔 UI : 메인 메서드에서 사용하면 된다.
Scanner sc = new Scanner(System.in);
System.out.print("숫자를 입력 1 : ");
int numA = Integer.parseInt(sc.nextLine());
System.out.print("숫자를 입력 2 : ");
int numB = Integer.parseInt(sc.nextLine());
// 비지니스 로직 :
int resNum1 = numA + numB;
int resNum2 = numA * numB;
int resNum3 = numA - numB;
int resNum4 = numA / numB;
int resNum5 = numA % numB;
System.out.println(resNum1);
System.out.println("결과 : " + resNum1);
System.out.println("같다 : " + (numA == numB));
System.out.println("결과 : " + resNum2);
System.out.println("다르다 : " + (numA != numB));
System.out.println("결과 : " + resNum3);
System.out.println("크다, 크거나 같다 : " + (numA > numB) + " , " + (numA >= numB));
System.out.println("작다, 작거나 같다 : " + (numA < numB) + " , " + (numA <= numB));
System.out.println("결과 : " + resNum4);
System.out.println("결과 : " + resNum5);
sc.close();
}
}
package ex2;
import java.util.Scanner;
public class Ex2_Oper2 {
// 비지니스 기능만 분리해서 메서드를 정의 해봤다.
public static void myModel(int numA, int numB) {
// 비지니스 로직 :
myPlus(numA, numB);
myMin(numA, numB);
myMul(numA, numB);
myDiv(numA, numB);
myRest(numA, numB);
myComp(numA, numB);
}
public static void myPlus(int numA, int numB) {
int resNum = numA + numB;
System.out.println("더하기 결과 : " + resNum);
}
public static void myMin(int numA, int numB) {
int resNum = numA - numB;
System.out.println("빼기 결과 : " + resNum);
}
public static void myMul(int numA, int numB) {
int resNum = numA * numB;
System.out.println("곱하기 결과 : " + resNum);
}
public static void myDiv(int numA, int numB) {
float resNum;
resNum = ((float)numA / (float)numB);
System.out.println("나누기 결과 : " + resNum);
}
public static void myRest(int numA, int numB) {
int resNum = numA % numB;
System.out.println("나머지 결과 : " + resNum);
}
public static void myComp(int numA, int numB) {
System.out.println("같다 : " + (numA == numB));
System.out.println("다르다 : " + (numA != numB));
System.out.println("크다, 크거나 같다 : " + (numA > numB) + " , " + (numA >= numB));
System.out.println("작다, 작거나 같다 : " + (numA < numB) + " , " + (numA <= numB));
}
// 메서드를 다양하게 기능별로 정의 한 후에 값을 호출해서 출력
// 결과가 동일하게 나오도록 구현 해보기
// 메서드는 고유 영역이며 메서드안에 또 다른 메서드를 포함되면 안된다.
public static void main(String[] args) {
// 콘솔 UI : 메인 메서드에서 사용하면 된다.
Scanner sc = new Scanner(System.in);
System.out.print("숫자를 입력 1 : ");
int numA = Integer.parseInt(sc.nextLine());
System.out.print("숫자를 입력 2 : ");
int numB = Integer.parseInt(sc.nextLine());
myModel(numA,numB);
sc.close();
}
}
'JAVA > Study' 카테고리의 다른 글
| [세미 프로젝트] 4. GUI 제작 및 테이블, DTO 설계, 추상메서드 (0) | 2021.03.15 |
|---|---|
| [0201] 5. 제어문 (if,for,forfor), static 멤버 변수 (0) | 2021.03.01 |
| [0129] 4. 연산자, 조건문(if else) (0) | 2021.03.01 |
| [0127] 2. 변수와 타입 , String 클래스의 특성, Scanner 사용 (0) | 2021.03.01 |
| [0126] 1. 프로그래밍 이론 및 자바 기본 실습 (개발환경구축) (0) | 2021.03.01 |