본문 바로가기

JAVA공부(이것이 자바다)

java.base 모듈

java.base는 모든 모듈이 의존하는 기본 모듈로 모듈 중 유일하게 requires하지 않아도 사용할 수 있다.

 

Object 클래스

모든 클래스가 암시적으로 상속받는 최상위 클래스이다.

object클래스가 가지고 있는 함수는 equals()와 hashCode(), toString()가 있는데 이를 오버라이딩해서 사용한다.

--equals()

public boolean equals(Object obj){
	if(obj instanceof Member target){
    	if(id.equals(target.id)){
        	return true;
        }
    }
        return false;
}

 

--hashCode()

public int hashCode(){
	int hashCode = no + name.hashCode();
    return hashCode;
    
}

--toString()

public String toString(){

	return company +", "+os;
    
}

--> 사용이 어떻게 되는 지만 알고 나머지는 그냥 자동생성으로 생성하면된다.

 

롬복

https://projectlombok.org/download

 

Download

 

projectlombok.org

다운 받고 jar를 eclipse가 설치된 폴더에 설치해준다. 

그리고 내가 개발할 java프로젝트 폴더에 build path에 추가 해주면 사용 가능하다.

 

@Data

기본생성자, getter, setter, hashCode, equals, toString자동으로 생성해준다.

@AllArgsConstructor

모든 필드를 초기화시키는 생성자 포함한다.

@Builder

생성자에 필드 초기화 매개변수를 내가 넣고 싶은 순서대로 넣을 수있다. builder가 new를 포함하고 있고 마지막 build()를 통해서 객체를 생성한다.

Member member3 = Member.builder()
				.age(10)
				.name("홍길동")
				.id("hong")
				.build();

 

 

System클래스

err : 콘솔창에 에러 내용을 빨간 색으로 출력

in : 키보드 입력

exit() : 프로세스를 종료하는 함수이고 0이면 정상종료이고 -1이면 에러가 있어서 종료된 것이다.

 

System.in.read(); :엔터 값까지 다 받아오는 함수이다. 그래서 /r/n -> 10,13을 제외해주고 읽어 와야한다.

 

if(keyCode != 13 && keyCode != 10) {
			//키를 하나씩 읽음
			keyCode = System.in.read();
}

 

currentTimeMillis(): 1/1000초단위로 진행된 시간을 리턴

nanoTime() : 1/1000000000초 단위로 진행된 시간을 리턴

 

 

환경변수

getenv()- 고급시스템 설정에 환경설정안에 있는 변수명을 출력한다. 운영체제에 종속적인 프로그램을 만들때 사용한다.

getproperty("키") - 자바에 미리 정의된 환경변수 ,getProperties()

위 두 함수를 통해서 알아야 할 점은 변수가 변화함에 따라서 결과값이 달라지므로 변수도 하나의 인터페이스로 보아야 한다는 점이다

 

String

UTF-8에서는 한글이 3byte 영어 1byte EUC-KR에서는 한글 2byte 영어 1byte이다.

 

 

StringBuilder

String과 달리 문자열을 조작해도 문자열 주소가 안 바뀐다. 문자열을 변경해야하는 문자열에 적합하다

String과의 차이점: String은 문자열을 변경하면 메모리공간을 계속 재할당해서 메모리사용이 비효율적이다. StringBuilder를 만들면 16byte의 공간을 문자열을 위해 할당하고 그 공간이 초과하면 16byte를 추가해서 다시 할당한다. 할당받은 공간이 넘지 않는다면 계속해서 같은 메모리공간을 참조한다. 공간이 커지지 않으면 주소가 변경되지 않는다.

replace(시작위치, 끝위치, 문자열)

String data = new StringBuilder()
		.append("DEF")
                .insert(0,"ABC")
                .delete(3,4)
                .toString();//ABCEF

StringTokenizer

문자열이 구분자로 연결되어있을경우 문자열을 분리하여 사용하기 위해서 사용한다.

String.split과의 차이점 : split은 문자열을 통째로 분리해서 배열로 저장하기 때문에 원하는 문자열을 찾고 끝내야 할 경우 매우 비효율적이다. StringTokenizer로 문자열을 찾으면 원하는 문자열을 찾고 나면 정지 할 수 있어서 문자열 전체를 분리하는계산을 하지 않아도 된다는 장점이 있다.

hasMoreTokens()를 통해서 다음 문자열이 남아있는지 while문의 조건에서 확인하고 nextToken()을 통해 분리한 문자열을 하나씩 가져오면서 사용가능하다.

 

String data2 = "홍길동/이수홍/박연수";
StringTokenizer st = new StringTokenizer(data2, "/");
while(st.hasMoreTokens()){
	String token = st.nextToken();
    System.out.println(token);
}

 

 

포장클래스

사용목적

1. String을 기본타입으로 바꾸기 위함이다.

2. object클래스를 DIP원칙에 의해서 데이터를 일관성있게 관리하기 위함이다.

 

--> 속도 지연이 있기 때문에  object클래스로 관리해야 할 때가 아니라면 안쓰는 편이 좋다.

--> 포장클래스는 객체 일치 여부를 판단할 때 equals메소드를 사용한다. == 과 !=는 사용하지 않는 편이 좋다.

 

Math

0<=random()<1

 

 

Calendar

Calendar now = Calendar.getInstance();

 -- > 싱글톤으로 객체를 받아온다.

 

Calendar.MONTH : 1-12 ->0~11

Calendar.DAY_OF_WEEK : 일 ~ 토 -> 0 ~ 6

 

 

 

LocalDateTime

of()-->객체생성을 대신해주는 메소드-->이를통해 팩토리 패턴을 구현한다.

 

 

 

SimpleDateFormat

new SimpleDateFormat("yyyy년 MM월 dd일");

 

 

 

정규표현식

[] 한개의 문자
\d 한개 숫자
\s 공백
\w  한개의 알파벳 또는 숫자
\. .
. 모든문자중 한개의 문자
? 없음 또는 한개
* 없음 또는 한개 이상
+ 한개 이상
{n}   정확히 n개
{n,} 최소한 n개
{n,m} n개 부터 m개까지
a | b  a 또는 b
() 그룹핑

 

 

pattern클래스

문자열을 정규식과 일치하는 지 검증하는 matches메소드가 있다.

boolean result = Pattern.matches("정규식","검증할 문자열");

 

 

 

 

 

'JAVA공부(이것이 자바다)' 카테고리의 다른 글

스레드  (3) 2023.06.09
java.base 이어서  (0) 2023.06.08
중첩클래스 이어서  (0) 2023.06.05
인터페이스 이어서  (0) 2023.06.02
상속 이어서  (0) 2023.05.31