
1. JAVA API
: application programming interface
- 미리 만들어진 기능인 라이브러리
- API안에 많은 패키지들이 존재 (lang, util, IO 등)
메서드 모형 읽는 법
접근제어자 + (매개변수) + ;(결과)반환유형 - 클래스가 선언된 위치
접근제어자 구분
public private default protected
2. java.lang 패키지
- 기본적인 클래스들을 담고 있는 패키지(이므로)
- java.lang 패키지의 클래스와 인터페이스는 import 구문 없이 사용 가능
나머지는 import 구문 필요
3. Object (aka.최고 조상)
- 모든 자바의 클래스는 Object클래스의 자식이거나 자손 클래스
- 특정 메소드 오버라이딩(toString, equals, clone 등)
Person implements Cloneable
<java />
package api.lang.object;
public class Person /*extends Object*/ implements Cloneable{
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 오버라이딩 - toString: 멤버변수 한눈에 확인하는 역할
// generate toString
@Override
public String toString() {
return "Person [name=" + name + "]";
}
// 멤버변수명이 같으면 true 반환
@Override
public boolean equals(Object obj) {
if(obj instanceof Person) {
Person p1 = (Person)obj;
String n = p1.getName();
if(n.equals(this.name)) {
System.out.println("이름이 같음");
return true;
}
}
return false;
// return super.equals(obj);
}
// clone 메서드를 사용하고 싶다면 override
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
- Object 상속을 받고, Cloneable interface를 implements 하는 Person Class
- private 인스턴스 함수 name, 생성자, getter & setter
- 멤버변수 한눈에 확인하는 역할을 하는 toString() 오버라이드
- 같은 값인지 확인하는 equals 메서드 오버라이드
obj(객체)와 Person(클래스)의 형변환이 같은지 확인하는 instanceof 연산자 true이면 obj를 Person타입의 p1에 넣고, 이름이 같은지 확인 -? - 객체의 복사를 가능하게 하는 clone 메서드 오버라이드
Cloneable 인터페이스가 구현된 클래스에서만 사용 가능
https://kobalja2020.tistory.com/entry/Java-%EC%9E%90%EB%B0%94-Object-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%9D%98-clone-%EB%A9%94%EC%84%9C%EB%93%9C%EC%99%80-Cloneable-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC
<java />
// Cloneable 인터페이스를 구현하고, clone 메서드를 재정의 해야하기 때문에
// (상위 클래스의 clone을 return하여 연결, CloneNotSupportedException 예외를 반드시 메서드 밖으로 던져줌)
// Name이라는 변수를 return하도록 하여 만든 클래스
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
MainClass
<java />
package api.lang.object;
public class MainClass {
public static void main(String[] args) {
Person p1 = new Person("홍길동");
// toString
String a = p1.toString();
System.out.println(a); // 아래와 결과 같음
System.out.println(p1.toString()); //반환ok
// equals()
Person p2 = new Person("홍길동");
System.out.println(p1.equals(p2)); // 똑같습니까? true
// clone() - 객체복사
try {
Object obj = p1.clone();
Person p3 = (Person)obj;
System.out.println("복사된 객체의 name: " + p3.getName());
System.out.println(p3 == p1); // false, 주소는 다르고 완전히 동일한 객체 생성
} catch (Exception e) {
e.printStackTrace();
}
}
}
--------------------------------------------출력------------------------------------------
Person [name=홍길동]
Person [name=홍길동]
이름이 같음
true
복사된 객체의 name: 홍길동
false
- Person 객체 생성 후 toString() 메서드로 리턴
- Pesron 객체 하나더 생성 후 이름이 같은지 확인: equals() 메서드
- p1을 복사한 객체 p3는 주소는 다르고 완전히 동일한 객체 생성 - ?
3.1. to String()
- 객체가 가지고 있는 정보나 값들을 문자열(String)로 만들어 리턴하는 메서드
= 대부분의 경우 인스턴스 변수에 저장된 값들을 문자열로 표현한다는 뜻 - 오버라이딩(재정의)하여 사용해야 함
- 오버라이딩 하지 않으면 클래스이름과 16진수의 해시코드가 출력됨 = Object클래스의 toString()이 호출됨
해시 자료구조에서는 hashCode로 먼저 비교를 하고, 결과가 같다면 equals로 추가로 비교
3.2. equals()
- 객체 간의 값 비교에 사용 ▶ 값이 같은지 여부
- 두 객체의 같고 다름은 참조변수의 값으로 판단 → 항상 false 반환
객체 생성시 서로 다른 두 개의 객체가 같은 주소를 갖을 수는 X,
두 개 이상의 참조변수가 같은 주소값을 가질 수는 O - Value클래스에서 equals()를 오버라이딩하여 객체에 저장된 내용을 비교
- null 체크를 해야 NullPointerException을 방지
3.3. hashCode()
- 객체의 해시 코드를 반환하는 메서드 ▶ 객체를 식별
- 동일한 객체는 동일한 해시 코드 반환
- equals() 메서드가 true를 반환하는 두 객체는 반드시 같은 해시 코드를 반환해야 하지만,
해시 코드가 같은 두 객체가 equals() 메서드에서 true를 반환할 필요는 없음 - hashCode() 메서드를 오버라이딩할 때는 equals() 메서드와 일관성을 유지해야 함
String 클래스의 hashCode()는 객체 주소가 아닌 문자열의 내용을 기반으로 해시코드를 생성하므로
문자열의 내용이 같으면 항상 같은 값의 해시코드 반환
2022.10.26 - [프로그래밍 언어/Java] - [Java] API_ Collection Framework (List, Set, Map)
https://okky.kr/articles/596050
3.4. hashCode() vs 주소값
- 주소값 - 메모리상에 객체가 저장된 위치
- hashCode - 객체를 구분하기위한 정수값
<java />
public class Person {
private String name;
private int age;
// 생성자, getter, setter 등 생략
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
- equals() 메서드는 객체의 name과 age 필드를 비교하여 두 객체의 값이 동일한지 여부를 판단
- Objects.equals() 메서드를 사용하여 null 체크를 수행하고, 필드 값을 비교
- hashCode() 메서드는 객체의 name과 age 필드를 기반으로 해시 코드를 생성
Objects.hash() 메서드를 사용하여 해시 코드를 생성하며, 필드 값을 포함하여 해시 코드를 생성 - equals()와 hashCode() 메서드를 오버라이딩하여 동등성 비교와 해시 기능을 구현
4. System
- 프로그램 종료, 키보드 입출력, 모니터 출력, 메모리 정리, 현재시간 읽기 등의 기능
- System 클래스의 모든 멤버는 static으로 구성 (System.~)
ex) System.out.println(); - out이라는 변수 사용
4.1. exit()
- 프로세스 강제 종료
- 정상 종료 매개값: 0
- 비정상 종료 매개값: 0이외의 다른 값
4.2. currenTimeMillis()
- 현재 시간을 읽어서 밀리센컨드(1/1000초)단위와 나노세컨드(1/10^9초)단위의 long값 리턴
1초 = 1000 - 프로그램 실행 소요 시간 측정으로 성능을 테스트할 때 사용
SystemEx
<java />
package api.lang.system;
public class SystemEx {
public static void main(String[] args) {
System.out.println("출력");
// System.exit(0);
// System.gc();
long start = System.currentTimeMillis();
// System.out.println(start); // 1970/1/1이후의 현재까지의 지나온 시간을 밀리초로 나타낸 것
long sum = 0;
for(long i = 1; i <= 10000000000L; i++) {
sum += i;
}
long end = System.currentTimeMillis();
// System.out.println(end);
System.out.println((end - start) * 0.001(밀리세컨드 단위이므로) + "초 소요됨");
}
}
- long start, long end 변수 설정해주고 마지막에 (end - start) * 0.001
- start, end 사이 실행할 코드 적기 - 실행시간 확인 목적
100억까지 합계를 구하는 for 반복문 수행 실시
or Thread.sleep(5000); - 약 5초 정도 출력
4.3. getProperty()
- JVM시작시 자동 설정되는 시스템의 속성값 구함
4.4. gc()
- 가비지 컬렉터 실행
5. String - 문자열
생성자를 사용해서 객체를 만들 필요 없이 바로 초기화해서 사용 가능
5.1. String 클래스의 주요 메서드
메서드 이름 | 내용 | 기타 |
charAt() | 특정 인덱스의 글자를 리턴 | char - char |
indexOf() | 특정 문자열의 시작 인덱스 값을 반환 | 주어진 문자열이 포함되어 있지 않으면 -1 을 리턴 |
lastIndexOf() | 문자열 내에서 searchValue가 마지막으로 등장하는 인덱스 | 포함되어 있지 않으면 -1 을 리턴, 대소문자 구분, 탐색한 문자열의 시작점만 반환 |
length() | 문자열의 길이 | |
replace() | 특정 문자열 변경 | CharSequence target: String타입 문자열을 입력가능 |
원본 문자는 안 바뀜 바꾸려면 s = s.replace("길", ""); |
||
replaceAll() | 정규표현식 사용가능 replaceAll(정규식 또는 기존문자, 대체문자) |
|
substring() | 인덱스를 기준으로 그 앞의 문자열을 자름 원하는 위치만큼 |
만약 매개값으로 인덱스를 2개 주면 처음 매개값 이상 두 번째 매개값 미만의 문자열을 제외하고 나머지를 삭제 |
toUpperCase() | 문자열 대문자로 치환 | |
toLowerCase() | 문자열 소문자로 치환 | |
trim() | 문자열의 앞, 뒤 공백을 제거 | 말그대로 지우기 |
equals() | 문자열의 값 비교 | 대소 비교 |
valueOf() | 기본 데이터 타입의 값 → 문자열로 변환 | 숫자 → 문자 변경 |
toString() | 문자열을 그대로 반환 | |
split(" ") | 특정 문자열 기준으로 잘라서 배열에 리턴 | 분배: 문자열을 쪼개서 배열에 담아줌 |
split (String regex, int limit) |
limit - 배열의 길이 제한 | limit > 0 : 길이의 제한, 뒷 부분 분리x limit < 0 : 빈 값도 포함 |
split(s, -1) : 마지막에 오는 빈 문자열도 포함하도록 | ||
StringTokenizer vs split : 빈 값을 무시하고 처리 vs limit을 주면 빈값도 처리되나 제한값을 알아야 함 | ||
compareTo(b) compareToIgnorecase (대소문자 무시) |
문자열 비교, 문자열과 사전순서로 비교 앞이 더 크면 = 양수 / 내림차순 앞이 더 작으면 = 음수 / 오름차순 |
같다 = 0 |
contains(b) | 2개의 String 비교해서 true, false | |
concat(b) | 문자와 문자 결합 | |
format( "%d", a ) | 서식화된 문자열 반환 | |
replaceFirst( a, b ) | 처음 만나는 a를 b로 바꿔서 출력 | |
startsWith( b ) | 지정한 문자로 시작하는지 판단 - t/f | 대소 구별 |
endsWith( b ) | 지정한 문자로 끝나는지 판단 - t/f | 대소 구별 (코딩테스트) |
정규표현식 참고
https://boilerplate.tistory.com/53
자바 정규식을 이용한 문자열 추출
자바에서 문자열에서 특정 조건에 따라 배열로 변환하는 방법에 대해서 알아보겠습니다. 주로 split() 함수를 사용하게 되는데요, 하나의 특정 문자열 기준으로 추출하는 방법은 쉽습니다. // 콤
boilerplate.tistory.com
StringEx
<bash />
package api.lang.string;
import java.util.Arrays;
public class StringEx {
public static void main(String[] args) {
String s = "홍길동";
char a = s.charAt(0);
System.out.println(a);
// 길 문자를 찾으면 위치반환, 못찾으면 -1반환
int index = s.indexOf("길");
System.out.println("길 시작위치: " + index);
// replace - 원본문자는 유지
// s = s.replace("길", ""); 이렇게하면 원본문자 바뀜
String result = s.replace("길", "");
System.out.println("결과: "+ result);
System.out.println("원본문자열: " + s);
// subString - 인덱스 기준으로 절삭, 추출
String s2 = "오늘은 날씨가 추워요";
String result2 = s2.substring(4);
System.out.println("결과: " + result2); // 4미만 절삭
String result3 = s2.substring(4, 7);
System.out.println(result3); // 4이상 7미만 추출
// trim - 앞뒤공백제거
System.out.println(" 홍길동".trim() );
// split - 문자열 자르기
String[] result4 = s2.split(" ");
System.out.println(Arrays.toString(result4)); // [오늘은, 날씨가, 추워요]
// split - 매개변수 2개 주면 배열의 크기 제한
String[] result5 = "010-1234-5678".split("-", 2);
System.out.println(Arrays.toString(result5)); // [010, 1234-5678]
// contains - 문자열 포함여부
if(s.contains("홍")) {
System.out.println("홍 이 포함됨");
}
// String.valueOf - 기본값 → 문자열 변환
String result6 = String.copyValueOf(new char[] {'a', 'b', 'c'}); // 변수 안주고, 매개변수에 배열 요소를 {}에 적음
System.out.println(result6); // abc
String result7 = String.valueOf(2);
System.out.println("문자열 바뀐 결과: " + result7 + 3); // 23
}
}
replaceAll
<java />
package main.java;
public class test2 {
public static void main(String[] args) {
String str = "자동차 가격은 300,000,000원 입니다.";
str = str.replaceAll("[0-9]", "A");
System.out.println(str); // 결과 : 자동차 가격은 AAA,AAA,AAA원 입니다.
String str2 = "자동차 가격은 300,000,000원 입니다.";
str2 = str2.replaceAll("자동차", "CAR");
System.out.println(str2); // 결과 : CAR 가격은 300,000,000원 입니다.
}
}
5.2. StringBuilder
- String의 단점을 보완
String객체는 데이터에 변화가 생기면 기존 객체를 재활용하지 않고, 새로운 객체 생성 → 메모리 과소비 - 새로운 객체 생성 시 속도가 느려지는 현상 발생 측면에서 개선된 클래스 → 기존 객체 재활용, 속도 ↑
- StringBuilder sb = new StringBuilder(" "); 객체 만들고 시작
5.2.1. StringBuilder 클래스의 주요 메서드
메서드 | 내용 | 기타 |
append() | 기존 문자열의 뒤에 문자열 추가 | 마지막에 추가 |
insert() | 특정 위치에 문자열 추가 | 중간에 추가 |
delete() | 문자열 삭제 | |
deleteCharAt() | 특정 인덱스의 문자 하나를 삭제 | |
replace() | 문자열의 일부분 → 다른 문자열로 대체 | " " → "" 공백제거 |
setCharAt() | 문자열에서 주어진 index의 문자 → 다른 문자로 대체 | |
toString() | 객체의 값을 문자열로 반환 | |
reverse() | 문자열을 거꾸로 뒤집음 |

StringTest
<java />
package api.lang.sb;
public class StringTest {
public static void main(String[] args) {
long start = System.currentTimeMillis();
// String str = "";
// for(int i = 1; i < 300000; i++) {
// str += "A"; // 대략 10초쯤 걸림
// }
StringBuilder sb = new StringBuilder("");
for(int i = 1; i < 3000000; i++) {
sb.append("A"); // 실행하자마자 바로 나옴
}
long end = System.currentTimeMillis();
System.out.println((end - start) * 0.001);
}
}
StrBufferEx
<java />
package api.lang.sb;
public class StrBufferEx {
public static void main(String[] args) {
String str = new String("Java");
StringBuffer sb = new StringBuffer("Java");
System.out.println(str);
System.out.println(sb);
str = str += "Program"; // 문자열
sb.append("Program"); // 버퍼클래스 void형 문자열 그냥 붙이기만함
System.out.println(str);
System.out.println(sb);
// 문자열 마지막에 추가
sb.append("기존 문자열을 마지막에 추가");
System.out.println(sb);
-----> append()로 기존 문자열 뒤에 추가 했으므로 sb는 바뀐 문자열로 출력
// 중간에 추가
sb.insert(11, "-");
System.out.println(sb);
// 문자열 변경
sb.replace(0, 4, "자바");
System.out.println(sb);
// 문자열 삭제
sb.delete(0, 2);
System.out.println(sb);
// 문자열로 형변환
// System.out.println(str.equals(sb));
String result = sb.toString();
// 거꾸로
sb.reverse();
System.out.println(sb);
}
}
--------------------------------출력----------------------------
Java
Java
JavaProgram
JavaProgram
JavaProgram기존 문자열을 마지막에 추가
JavaProgram-기존 문자열을 마지막에 추가
자바Program-기존 문자열을 마지막에 추가
Program-기존 문자열을 마지막에 추가
가추 에막지마 을열자문 존기-margorP
5.3. Quiz17 - Validation1
<java />
/* 문제1
* 주민번호 검증메서드 masking(String)
* 마스킹 메서드는 주민번호값이 매개변수로 들어올 때
* 950101-*******로 마스킹 처리하여 리턴하는 static메서드를 만들어주세요.
*
* 1. 문제의 간소화를 위해 생년월일은 정상범위라고 가정합니다.
* 2. 13자리가 아니거나, 남,여(1,2,3,4) 가 아니라면 throws처리합니다.
* 3. 주민번호는 - 를 포함해서 받을 수 있습니다.
* 4. 남, 여에 대한 정보를 출력해줍니다.
*
* masking메서드를 만들어주세요
* 검증데이터 950101-1000000 -> 남자
* 검증데이터 9501012000000 -> 여자
* 검증데이터 950101-5000000 -> 예외
* 검증데이터 9501015000000 -> 예외
* 검증데이터 950101511111 -> 예외
*/
Validation_ 선생님풀이
<java />
package quiz17;
import java.nio.file.attribute.AclEntry;
import java.util.Arrays;
public class Validation_teacher {
public static void main(String[] args) {
Validation_teacher v = new Validation_teacher();
try {
System.out.println(v.masking("950101-1234567"));
} catch (Exception e) {
e.printStackTrace();
}
} // main의 끝
public static String masking(String s) throws Exception {
s = s.replace("-","");
// 남자, 여자 출력
if(s.length() != 13) {
throw new Exception();
} else {
switch (s.charAt(6)) {
case '1' :
case '3' :
System.out.println("남자");
break;
case '2' :
case '4' :
System.out.println("여자");
break;
default :
throw new Exception(); //1~4가 아닌 다른 값
}
}
return s.substring(0,6) + "-" + "*".repeat(7);
}
}
- public static String masking 메서드 생성 후 매개변수는 String으로 주민번호 값이 들어옴
- 예외가 일어나면 통으로 메서드 종료되는 throw Exception으로 예외 떠넘기기
- 주민번호는 "-" 포함해서 받기 때문에 replace로 없애주기
- if 조건문: 길이가 13이 아니면 예외
switch문: charAt()으로 인덱스 6번째 숫자가 1,3 = 남자 / 2,4 = 여자 이외의 다른값은 예외 - masking 메서드 리턴값: substring으로 앞에서 6번째까지 제외하고 뒷부분 삭제, " * " 7번 반복 ("*".repeat(7);)
Validation_ 내 풀이
<java />
package quiz17;
import java.nio.file.attribute.AclEntry;
import java.util.Arrays;
public class Validation {
/* 문제1
* 주민번호 검증메서드 masking(String)
* 마스킹 메서드는 주민번호값이 매개변수로 들어올 때
* 950101-*******로 마스킹 처리하여 리턴하는 static메서드를 만들어주세요.
*
* 1. 문제의 간소화를 위해 생년월일은 정상범위라고 가정합니다.
* 2. 13자리가 아니거나, 남,여(1,2,3,4) 가 아니라면 throws처리합니다.
* 3. 주민번호는 - 를 포함해서 받을 수 있습니다.
* 4. 남, 여에 대한 정보를 출력해줍니다.
*
* masking메서드를 만들어주세요
* 검증데이터 950101-1000000 -> 남자
* 검증데이터 9501012000000 -> 여자
* 검증데이터 950101-5000000 -> 예외
* 검증데이터 9501015000000 -> 예외
* 검증데이터 950101511111 -> 예외
*/
public static void main(String[] args) {
Validation v = new Validation();
try {
v.masking("950101-1234567");
} catch (Exception e) {
e.printStackTrace();
}
} // main의 끝
public static void masking(String s) throws Exception {
String result = s.substring(7, 14);
String result2 = s.replace(result, "*******");
System.out.println(result2);
char a = s.replace("-", "").charAt(6);
// 남자, 여자 출력
if((s.replace("-","").length() == 13) && (a == '1' || a == '3')) {
System.out.println("남자");
} else if ((s.replace("-","").length() == 13) && (a == '2' || a == '4')) {
System.out.println("여자");
}
// 오류 출력
if (s.replace("-","").length() != 13) {
throw new Exception("숫자 개수 맞춰주세요");
} else if (a != '1' && a != '2' && a != '3' && a != '4')
throw new Exception("잘못 입력");
}
}
- replace를 이용하여 주민번호 뒷자리를 *******로 바꿈
- 문자형 변수 a는 -를 제외하고, 인덱스 6번 = 뒷자리 중 첫번째 문자
- if 조건문을 사용하여 남자, 여자 출력
- if 조건문을 사용한 예외 처리
Validation2_ 선생님풀이
<java />
package quiz17;
- 선생님 풀이 모름
Validation2_ 내 풀이
<java />
package quiz17;
public class Validation2 {
/* 문제2
1. String palindromeCheck(String)함수는 매개변수로 String 값을 받아, 회문 여부를 검사하는 static 메서드입니다.
2. 회문: 똑바로 읽으나 거꾸로 읽으나 똑같은 단어나 문장.
3. ex) 다시 합창 합시다, 다 같은 것은 같다, 아 좋다 좋아 등
4. 문장은 공백을 포함하여 받을 수 있습니다.
5. 회문이라면 "회문입니다", 아니라면 "회문이 아닙니다" 를 리턴합니다.
6. 힌트)
* 함수를 이용하여 공백을 제거하세요. 힌트: replace()
* 문장의 길이의 중간값을 구하세요.
* 첫문장과, 마지막문장을 비교하며 중간으로 이동
* for문에서 charAt()을 사용해서 반대로 잘라 붙이세요. (or 빌더를 이용 하여 문자를 뒤집어 비교)
*/
public static void main(String[] args) {
Validation2 val = new Validation2();
System.out.println(val.palindromeCheck("다 같은 것은 같다"));
} // main의 끝
public static String palindromeCheck(String word) {
String b = word.replace(" ", "");
int mid = b.length() / 2;
// System.out.println(mid);
int end = b.length()-1;
char[] arr = b.toCharArray();
String answer = "회문입니다";
for(int i = 0 ; i < mid; i++) {
if(arr[i] != arr[end]) {
answer = "회문이 아닙니다";
break;
}
end--;
}
return answer;
}
// 검색) stringBuilder의 reverse() 사용
// public static void Solution(String str){
// // 대소문자 구분하지 않기 위함
// str = str.toLowerCase(Locale.ROOT);
//
// StringBuilder builder = new StringBuilder(str).reverse();
// if(builder.toString().equals(str)){
// System.out.println("YES");
// }else{
// System.out.println("NO");
// }
// main에서
// Scanner in=new Scanner(System.in);
// String input = in.next();
//
// Solution(input);
}
6. Math - 수학관련
- 수학계산에 사용할 수 있는 메서드
- 모두 static 메서드 → Math. 으로 사용 가능
6.0.1. Math 클래스의 주요 메서드
메서드 | 내용 | 기타 |
abs() | 절대값 | |
ceil() | 소수점 올림, 정수 반환 | |
floor() | 소수점 내림, 정수 반환 | |
round() | 소수점 반올림값 | |
max() | 수를 비교하여 최대값 | |
main() | 수를 비교하여 최소값 | |
random() | 랜덤값 | 0.0 <= 값 < 1.0 |
rint() | 가장 가까운 정수를 실수 형태로 만듦 |
MathEx
<java />
package api.lang.math;
public class MathEx {
public static void main(String[] args) {
// Math m = new Math(); 객체 생성 X
// 올림
double up = Math.ceil(1.3);
System.out.println(up);
// 내림
double down = Math.floor(1.2);
System.out.println(down);
// 반올림
double r = Math.round(3.14);
System.out.println(r);
// 루트값
double sqrt = Math.sqrt(16);
System.out.println(sqrt);
// 절대값
double abs = Math.abs(-4);
System.out.println(abs);
// 큰 값
int max = Math.max(5, 3);
System.out.println(max);
}
}
----------------------출력-------------------
2.0
1.0
3.0
4.0
4.0
5
7. Wrapper (중요)
- 기본 타입의 값을 갖는 객체(포장 객체)
기본 타입의 값을 객체 내부에 두고 포장하기 때문 - 원래 기본타입은 객체 X, .(점) 찍어서 나타낼 수 X → 포장 객체로 만들면 객체 생성 O, 점 찍어서 사용 가능
Wrapper 클래스
Byte, Short, Integer(int), Long, Float, Double, Boolean, Character(char)
Integer.toString() - 정수값을 10진수 문자열로 변환
7.1. boxing & unboxing


Boxing
<java />
package api.lang.wrapper;
public class Boxing {
public static void main(String[] args) {
int a = 100;
double b = 3.14;
long c = 200L;
// 기본형 → 객체형 포장하는 작업을 boxing
Integer val = new Integer(a);
Double val2 = new Double(b);
Long val3 = new Long(c);
System.out.println(val); // 원래는 주소가 나오는데 이렇게하면 값이 나옴
Object[] arr = { val, val2, val3 }; //객체형 변수를 Object 배열에 저장
// 객체형 → 기본형으로 변경하는 작업 unboxing
int a1 = val.intValue();
double b1 = val2.doubleValue();
long c1 = val3.longValue();
}
}
Autoboxing
<java />
package api.lang.wrapper;
public class Autoboxing {
public static void main(String[] args) {
// Autoboxing → 자동형변환
int a = 100;
Integer val = a;
a = val;
Object[] arr = { 1, 2, 3 }; // 상호형변환이 되면서 이게 가능해짐
int v1 = Integer.parseInt("3");
int v2 = Integer.parseInt("34");
double v3 = Double.parseDouble("3.14");
long v4 = Long.parseLong("12323423454654");
System.out.println(v1 + v2 + v3 + v4);
}
}
오늘 하루
기억에 남는 부분
- 메서드 모형 읽는법
- replace사용법!!!
어려운 부분
- String 문자열 사용하는 부분, 어떻게 해야 효율적으로 사용할지 잘 모르겠음
- Wrapper의 boxing, unboxing 완벽 이해는 못 한 듯
문제 해결 부분
- quiz17 Validation: 선생님처럼 정확하게는 못 풀었지만 substring, replace, charAt 사용해서 출력은 함
예외의 던지기도 사용
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] API_ java.util (Generic, 제네릭)(컬렉션 프레임워크), ArrayList (0) | 2022.10.26 |
---|---|
[Java] API_ java.util (Arrays 클래스 - search, date, calendar, random) (0) | 2022.10.25 |
[Java] 예외 처리 (try ~ catch ~ finally), throws & throw (0) | 2022.10.17 |
[Java] interface (0) | 2022.10.14 |
[Java] 제어자 (static, final, abstract) (0) | 2022.10.13 |