Java Platform, Standard Edition Documentation - Releases
Java Development Kit Version 17 API Specification
⇒ 자바의 모든 클래스는 Object의 자식이거나 자손 클래스
equals()
메소드는 객체의 번지를 비교하고 boolean 값을 리턴public boolean equals(Object obj)
public int hashCod3()
public class Student extends Object
{
private int no;
private String name;
public Student(int no, String name) {
this.no = no;
this.name = name;
}
// Student 객체를 동등비교하기 위해 hashCode(), equals() 메소드를 재정의
// 학생번호와 이름으로 해시코드 생성하고, 학생번호와 이름이 동일할 경우에만 equals()가 리턴
// 이 코드를 넣어줌으로써 동등객체의 경우 해시코드가 같아 저장된 객체수
// 메모리 처리시 해시코드가 중요한 키워드
//이게 없다면 HashCode 클래스에서 다 다른 객체로 인식하여 저장된 객체 수는 총 3개고 해시코드도 각각 다름
@Override
public int hashCode()
{
int hashCode = no + name.hashCode(); //내 마음대로 해시코드 재설정
return hashCode;
}
public int getNo(){
return no;
}
public String getName(){
return name;
}
@Override
public boolean equals(Object obj)
{
if(obj instanceof Student target) { //obj Member타입인지 검사하고 타입 변환 후 target 변수 대입
if(no==target.getNo()&&name.equals(target.getName()))
return true;
}
return false;
}
}
import java.util.HashSet;
public class HashCodeEx
{
public static void main(String[] args)
{
HashSet hashset = new HashSet(); //저장하는 객체
Student s1 = new Student(1, ".김멀티");
hashset.add(s1);
System.out.println("저장된 객체 수 : " +hashset.size());
// s1 = s2는 같은 객체라 저장이 두 번 되지 않음
Student s2 = new Student(1, ".김멀티");
hashset.add(s2);
System.out.println("저장된 객체 수 : " +hashset.size());
Student s3 = new Student(2, ".이강수");
hashset.add(s3);
System.out.println("저장된 객체 수 : " +hashset.size());
if(s1.hashCode()==s2.hashCode()) { //해시코드를 비교
if(s1.equals(s2)) {
System.out.println("학생번호와 이름이 같으므로 동등객체");
System.out.println(s1.hashCode()+" "+s2.hashCode());
System.out.println(s1.toString()+" "+s2.toString());
}
else {
System.out.println("학생번호와 이름이 다르므로 동등객체 아님");
System.out.println(s1.hashCode()+" "+s2.hashCode());
}
}
else{
System.out.println("해시코드가 다르므로 동등객체 아님");
System.out.println(s1.hashCode()+" "+s2.hashCode());
}
}
}
public String toString()
‘클래스명@16진수
’로 구성된 문자열 리턴Object obj = new Object();
System.out.println(obj.toString());
@Override
public String toString() {
return "학생번호"+no+"학생이름은 "+name;
}
******************************************************실행클래스 ========******************************************************
if(s1.hashCode()==s2.hashCode()) { //해시코드를 비교
if(s1.equals(s2)) {
System.out.println("학생번호와 이름이 같으므로 동등객체");
System.out.println(s1.hashCode()+" "+s2.hashCode());
System.out.println(s1.toString()+" "+s2.toString());
}
else {
System.out.println("학생번호와 이름이 다르므로 동등객체 아님");
System.out.println(s1.hashCode()+" "+s2.hashCode());
}
}
else{
System.out.println("해시코드가 다르므로 동등객체 아님");
System.out.println(s1.hashCode()+" "+s2.hashCode());
}
}
err예제
public class ErrEx
{
public static void main(String[] args)
{
// out 필드 이용하면 콘솔에 원하는 문자열 출력 가능
try {
int value = Integer.parseInt("1oo");
}
catch(NumberFormatException e) {
System.err.println("에러내용");
System.err.println(e.getMessage());
}
}
}
int keyCode = System.in.read();
import java.io.IOException;
public class ErrEx
{
public static void main(String[] args)
{
int speed = 0;
int keyCode = 0;
while(true) {
//Enter키를 읽지 않았을 경우에만 실행
if(keyCode !=13 && keyCode !=10) {
if(keyCode==49) speed++;
else if(keyCode==50) speed--;
else if(keyCode==51) break;
System.out.println("1. 속도증가 2. 감속 3. 중지");
System.out.println("-----------------");
System.out.println("현재 속도"+speed);
System.out.println("번호를 선택하세요1");
}
try {
keyCode = System.in.read();
}
catch(IOException e) {
System.out.println(e.getMessage());
}
}
System.out.println("프로그램 종료");
System.exit(0); //프로세스 강제 종료 // 0 정상종료 //-1 , 1 비정상종료
}
}
StringBulider
(내부 버퍼(데이터 저장 하는 메모리))에 문자열을 저장해 두고 그 안에서 추가, 수정 삭제 작업 가능하도록 함import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class ByteToStringEx
{
public static void main(String[] args) throws Exception
{
// String 클래스는 문자열을 저장하고 조작할 때 사용하는 클래스
// 문자열 리터럴은 자동으로 String 객체로 생성되지만, String클래스의 다양한 생성자를 이용하여 직접 객체 생성 가능
String data = "자바";
//String ==> byte배열 (기본: UTF-8 인코딩)
byte[] arr1 = data.getBytes(); //= byte[] arr1 = data.getBytes("UTF-8");
System.out.println("arr1 :" + Arrays.toString(arr1));
//byte배열을 => String(기본: UTF-8 디코딩 : 한글 1글자당 3byte)
String str1 = new String(arr1);
System.out.println("str1 :" + str1);
data = "자바프로그래밍";
//String ==> byte배열 (기본: EUC-KR 인코딩 : 한글 1글자당 2byte) => 지정안해주면 다시 되돌릴 때 깨짐
byte[] arr2 = data.getBytes("EUC-KR");
System.out.println("arr2 :" + Arrays.toString(arr2));
String str2 = new String(arr2,"EUC-KR"); //String 클래스는 다양한 생성자를 제공하고 있어 원하는 문자열처리 가능
System.out.println("str2 :" + str2);
String data1 ="ABC";
data1 += "DEF"; //String 내부 문자열을 수정 할 수 없다. 그런데, + 원래 문자열이 아닌 "ABC" + "DEF" => "ABCDEF"
//StringBulider(내부 버퍼(데이터 저장 하는 메모리))에 문자열을 저장해 두고 그 안에서 추가, 수정 삭제 작업 가능하도록 함
String data2 = new StringBuilder().append("DEF").insert(0, "ABC").delete(3, 4).toString();
System.out.println(data2);
}
}
단지 객체로 생성하는 목적
박싱
: 기본 타입 값을 포장 객체로 만드는 과정. 포장 클래스 변수에 기본 타입 값이 대입 시 발생언박싱
: 포장 객체에서 기본 타입 값을 얻어내는 과정. 기본 타입 변수에 포장 객체가 대입 시 발생Integer obj = 100; //박싱
int value = obj; //언박싱
int value = obj + 50; //언박싱 후 연산
‘parse+기본타입’
명으로 되어 있는 정적 메소드 있음public class BoxUnBoxingEx
{
public static void main(String[] args)
{
// 숫자 100을 Integer 클래스로 포장하세요.
Integer obj = 100;
System.out.println("value: "+obj.intValue());
Float obj1 = 1.5f;
System.out.println("value: "+obj.floatValue());
//Unboxing
int value = obj;
System.out.println(value);
// 연산지 UnBoxing
value = obj + 100;
System.out.println(value);
Character ch1 = 'A';
char ch2 = ch1;
System.out.println(ch1.charValue()+" "+ch2);
//문자열을 기본값으로 변환하는 코드
//~128~127 초과일 경우
Integer ob1 = 300;
Integer ob2 = 300;
//System.out.println("==:"+(ob1==ob2));
System.out.println("equals() : "+(ob1.equals(ob2)));
//-128~127 범위의 값일 경우
Integer ob3 = 100;
Integer ob4 = 100;
//System.out.println("== : "+(ob3==ob4));
// 포장값 비교시 내부값 비교 후 재정의 하는 것이 좋음
System.out.println("equals() : "+(ob3.equals(ob4)));
}
}
public class MathEx
{
public static void main(String[] args) {
//근 정수 또는 작은 정수 값 얻기
double d1 = Math.ceil(5.3);
double d2 = Math.floor(5.3);
long v3 = Math.max(3, 4);
long v4 = Math.min(3, 7);
double value = 12.3456;
double tmp1 = value * 100;
long tmp2 = Math.round(tmp1);
System.out.println(d1+" "+ d2+" "+v3+" "+ v4+ " "+value +" "+ tmp1+" "+tmp2);
}
}
import java.util.Arrays;
import java.util.Random;
public class RandomEx
{
public static void main(String[] args) {
//선택번호 6개가 저장될 배열 생성
int[] selectNumber = new int[6];
Random random = new Random(3); //선택번호를 얻기 위해 Random 객체 생성
System.out.println("선택번호: ");
// 선택번호 6개를 얻어 selectNumber 배열에 저장 for 문
for(int i=1; i<selectNumber.length; i++) {
selectNumber[i] = random.nextInt(45)+1;
System.out.println(selectNumber[i]+" ");
}
System.out.println("==================");
int[] winningNumber = new int[6];
random = new Random(5);
System.out.println("당첨번호 : ");
// 당첨번호 6개를 얻어 winneringNumber 배열에 저장 for문을 작성해 보세요!
for(int i=1; i<winningNumber.length; i++) {
winningNumber[i] = random.nextInt(45)+1;
System.out.println(winningNumber[i]+" ");
}
System.out.println("=======================");
// 당첨여부 확인
Arrays.sort(selectNumber);
Arrays.sort(winningNumber);
boolean result = Arrays.equals(selectNumber, winningNumber);
System.out.println("당첨여부");
if(result) {
System.out.println("로또 1등 당첨!!!");
}
else {
System.out.println("다음 기회");
}
}
}
getInstance()
메소드로 컴퓨터에 설정된 시대 기준으로 Calendar 하위 객체를 얻을 수 있음Date()
생성자는 컴퓨터의 현재 날짜를 읽어 Date 객체로 만듦import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DataEx
{
public static void main(String[] args)
{
Date now = new Date();
String str1 = now.toString();
System.out.println(str1);
//System.out.println(now.getHours()); => 너무 오래돼서 쓰지마라
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
String str2 = sdf.format(now);
System.out.println(str2);
//달력을 표현하는 추상클래스 Calendar : 자식클래스에서 구현하도록
Calendar now1 = Calendar.getInstance();
int year = now1.get(Calendar.YEAR);
int month = now1.get(Calendar.MONTH)+1; //0부터 시작이라 +1
int day = now1.get(Calendar.DAY_OF_MONTH);
System.out.println(year+"."+month+"."+day);
}
}
문자숫자@daum.net
, 전화번호(010 선택 0000-0000) : 숫자나 문자의 범위 지정(02|032|033|010)-\d{3, 4}-\d{4}
⇒ \d{3, 4} 3글자이거나 4글자여야 함\\w+@\\w+\\.\\w+(\\.\\w+)?
⇒ .
모든 문자 중에서 한개의 문자를 의미. \w.
문자matches()
메소드 제공boolean result = Pattern.matches("정규식", "검증할 문자열");
import java.util.regex.Pattern;
public class PatternEx
{
public static void main(String[] args)
{
String regExp = "(02|032|033|010)-\\d{3,4}-\\d{4}";
String data = "010-1234-5678";
boolean result = Pattern.matches(regExp, data);
if(result) System.out.println("정규식과 일치합니다. 데이터베이스 저장에 적합한 문자열입니다.");
else System.out.println("정규식에 불일치합니다. 데이터를 다시 입력해 주세요");
regExp = "\\w+@\\w+\\.\\w+(\\.\\w+)?";
data = "white@daum.net"; //유효성 검증
result = Pattern.matches(regExp, data);
if(result) System.out.println("정규식과 일치합니다. 데이터베이스 저장에 적합한 문자열입니다.");
else System.out.println("정규식에 불일치합니다. 데이터를 다시 입력해 주세요");
}
}
💡 **자주 사용하는 표현식의 의미**참고!!
- 숫자만 : ^[0-9]*$
- 영문자만 : ^[a-zA-Z]*$
- 한글만 : ^[가-힣]*$
- 영어 & 숫자만 : ^[a-zA-Z0-9]*$
- E-Mail : ^[a-zA-Z0-9]+@[a-zA-Z0-9]+$
- 휴대폰 : ^01(?:0|1|[6-9]) - (?:\d{3}|\d{4}) - \d{4}$
- 일반전화 : ^\d{2.3} - \d{3,4} - \d{4}$
- 주민등록번호 : \d{6} - [1-4]\d{6}
- IP 주소 : ([0-9]{1,3}) . ([0-9]{1,3}) . ([0-9]{1,3}) . ([0-9]{1,3})
matches()
메소드 제공절대경로
/
move
를 이용하면 옮길 수 있음자바는 쉬운것 같으면서 너무 복잡하다ㅠ 인터페이스부터는 배웠던 거라도 실제로는 어떻게 쓰이는 지에 대한 것은 대학에서 안배워서 그런지 인터페이스 이후부터는 뭔가 더 지식이 확고 해지는 기분이다. 따로 공부를 더 해야 확고 해질 테니 더 열심히 하자