본문 바로가기
자바 JAVA

23.01.17 (추상 클래스)

by 2023코딩시작 2023. 1. 17.
util ~ singleton~string~object



/*
 * Util 패키지의 주요 클래스
 * 1. Random 클래스
 *    - 임의의 난수를 발생시키는 클래스.
 * 2. Math 클래스
 *    - 수학과 관련된 메서드를 제공해 주는 클래스
 *    - 유일하게 java.ang 패키지에 있는 클래스.
 * 3. Calendar 클래스
 *    - 날짜 / 시간 관련 정보를 제공해 주는 클래스.
 * 4. Arrays 클래스
 *    - 배열 객체를 처리해 주는 클래스.
 */


/*
 * 1. Random 클래스
 *    - 지정된 범위 내에서 임의의 난수를 발생시키는 클래스.
 *    - 활용 분야 : 게임, 확률 등에서 사용됨.
 *    - 형식) nextInt(가장 큰 수) + 시작 수
 */

Random random = new Random();

int[] lotto = new int[6];  // 로또 배열

for(int i=0; i<lotto.length; i++) {
lotto[i] = random.nextInt(45) + 1;

if(i>0) { 
for(int j=0; j<i; j++) {
         if(lotto[i] == lotto[j]) {
             //중복인 경우
             lotto[i] = random.nextInt(45) + 1;
              j = -1;
}}}

/*
 * 2. Math 클래스
 *    - 수학과 관련된 메서드를 제공해 주는 클래스
 */
// 1. max() : 최대값을 구해 주는 메서드
//    min() : 최소값을 구해 주는 메서드
System.out.println("최대값 >>> " + Math.max(num1, num2));

System.out.println("최소값 >>> " + Math.min(num1, num2));
// 두 수를 가지고 비교함.

// 2. round() : 반올림이 적용이 되는 메서드
System.out.println(Math.round(125.5124));

// 3. abs() : 절대값을 구해 주는 메서드.
System.out.println("abs >>> " + Math.abs(-125.34));

// 4. ceil() : 무조건 올림을 해 주는 메서드 
// 웹페이지 페이지수 작성할 때 게시물이 43개여도 10개씩 한페이지씩 할때 ceil이용해서 5페이지됨 
System.out.println("ceil >>>" + Math.ceil(12.123));

 



/*
 * 3. Calendar 클래스
 *    - 날짜 / 시간과 관련된 정보를 제공해 주는 클래스.
 *    - Calendar 클래스는 추상클래스임.
 *    - 추상클래스로 작성된 이유 : 날짜와 시간을 계산하는 방법이 지역, 나라마다 다르기 때문임.
 *    - Calendar 클래스는 날짜와 시간을 계산하는데 꼭 필요한 메서드나 상수로 구성이 되어 있음.
 *    - Calendar 클래스를 객체 생성을 하려면, 
 *      Calendar 클래스가 가지고 있는 클래스(정적) 메서드 getInstance() 메서드를 사용하면 됨.
 *    - getInstance() 메서드를 호출하면 내부적으로 java.util.GregorianCalendar 객체를 생성하여 리턴을 함.
 *    - GregorianCalendar 클래스는 Calendar 클래스의 자식 클래스임.
 *    - getInstance() : 싱글턴 방식. 하나의 인스턴스만을 가지고 공유해서 사용할 때 쓰는 방식.
 */

Calendar cal = Calendar.getInstance();

 

// 날짜와 관련된 정보를 확인하는 방법
int year = cal.get(Calendar.YEAR); // 현재 년도
int month = cal.get(Calendar.MONTH) + 1;
int day = cal.get(Calendar.DAY_OF_MONTH);

// 1년 52주 주에 오늘이 몇번째 주인지 확인
int week = cal.get(Calendar.WEEK_OF_YEAR);

 

// 시간과 관련된 정보를 확인하는 방법
// 1. 12시간제를 이용하는 방법 - 오전(0), 오후(1)
int am_pm = cal.get(Calendar.AM_PM);
int hour = cal.get(Calendar.HOUR);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);

 

if(am_pm==0) {
System.out.println("현재 시간은 오전 " + hour + "시" + minute + "분" + second + "초 입니다.");
}else {
System.out.println("현재 시간은 오후 " + hour + "시" + minute + "분" + second + "초 입니다.");
}

 

// 2. 24시간제를 이용하는 방법
int hours = cal.get(Calendar.HOUR_OF_DAY);

 

 

/*
 * 4. Arrays 클래스
 *    - 배열 객체를 처리해 주는 클래스.
 */

// 1. fill() : 배열의 요소를 특정한 값(데이터)으로 채우는 메서드
Arrays.fill(str, "김유신"); // 클래스이름.멤버메서드 --> static

 

// 2. equals(객체, 객체)
//    두 객체의 내용(데이터)이 같은지 틀린지를 비교하는 메서드. - 반환타입 boolean.
if(Arrays.equals(str, str2)) {

 

// 3. sort() : 배열의 원소(데이터)를 정렬(오름차순)해 주는 메서드.
int[] arr = {54, 67, 13, 97, 41};

Arrays.sort(arr); // 오름차순 정렬

 

 

singleton

@static을 응용하여 프로그램 전반에서 사용하는 인스턴스를 하나만 구현하는 방식

1. private 생성자 만들기

2. 인스턴스 생성하기

3. public 메서드 만들기

 

 

 * String 클래스의 특징
 * 1. 문자열 객체를 처리하는 클래스.
 * 2. 객체 생성 방법 - 2가지
 *    1) 일반 변수 선언 방법으로 객체 생성. // 상수풀에서 홍길동을 찾으므로 str1과 str2의 주소값이 같다
 *       예) String str1 = "홍길동";
 *           String str2 = "홍길동";
 *    2) new 키워드를 이용하는 방법
 *       예) String str3 = new String("홍길동"); // 2번째 방법은 따로 객체가 생성되서 비효율적
 *           String str4 = new String("홍길동");

 

// 문자열 연산(결합)
str1 = str1 + str2;

System.out.println("str1 주소 >>> " + System.identityHashCode(str1));

// String은 대표적인 final 클래스라 연산시 새로운 상수풀로 주소값이 바뀜

 

 

// 1. toUpperCase() : 소문자 -> 대문자
//    toLowerCase() : 대문자 -> 소문자

 

// 2. length() : 문자열의 길이를 정수값으로 반환해주는 메서드.

 

// 3. concat() : 문자열을 결합하는 메서드.

 

// 4. eqaulsIgnoreCase()
//    => 대소문자를 구분하지 않는 메서드.

 

// 5. charAt(index)
//    => 문자열에서 특정 단일 문자를 추출하는 메서드 (0부터시작)

 

 

 

/*
 * String 클래스의 단점
 * - 빈번하게 문자열 연산을 실행할 경우 메모리를 많이 차지하게 됨.
 * - 매번 연산시마다 새로운 객체를 생성하게 됨.
 *   ==> 메모리 영역의 과부하가 발생할 가능성이 큼.
 * - 이러한 단점을 개선한 클래스가 등장을 함 : StringBuffer 클래스
 */

1. append() : 문자열을 추가해 주는 메서드

 

2. replace() : 문자열을 교체하는 메서드
    형식) replace(시작 index, 끝(-1) index, "교체할 문자열");

 

3. substring() : 문자열을 추출하는 메서드. // 웹 홈페이지 게시판 연/월/일 만 뽑고 시분초는 안뽑을 때 사용
   형식1) substring(시작 index, 끝(-1) index) // 중간 문자열 추출할 때
   형식2) substring(시작 index, )  // 원하는 곳부터 끝까지 추출할 때

 

/*
 * StringTokenizer 클래스
 * - 특수 문자를 기준문자(delimiter)를 기준으로 문자열을 잘라주는(파싱) 클래스.
 * - 기준문자로 분리된 문자열을 토큰(token)이라고 함.
 * - 웹에서 전화번호를 하이폰(-) 기준으로 앞자리, 중간자리, 뒷자리 형식으로 구분해서 번호를 추출할 때 사용함.
 *   (예 : 주민번호, 핸드폰 번호 등등)
 */

// countTokens() : 기준문자로 분리된 토큰의 갯수를 정수값으로 반환해 주는 메서드.

 

// hasMoreTokens() : 반환할 다음 토큰이 있는지를 확인하는 메서드.
//  ==> 있으며 true값을, 없으면 false값을 반환

 

// nextToken() : 존재하는 토큰을 반환해 주는 메서드.

 

 

/*
 * Object 클래스
 * 1. java의 모든 클래스의 조상 클래스이다.
 *    ==> java의 가장 최상위 조상클래스가 Object 클래스임.
 * 2. 사용자가 정의한 클래스에 자동으로 상속이 된다.
 *    ==> 단, extends 키워드를 사용하지 않은 클래스에만 상속이 됨.
 *    
 * [Object 클래스의 주요 메서드]
 * - toString() : - 객체 자신의 정보를 문자열로 반환하는 메서드.
 *                - 인스턴스에 대한 정보를 문자열로 제공할 목적으로 사용이 됨.
 * - getClass() : - 객체 자신의 클래스 정보를 담고 있는 Class 인스턴스를 반환하는 메서드. 
 * - hashCode() : - 객체 자신의 해쉬 코드를 반환하는 메서드.
 * - equals() : - 객체 자신과 또 다른 객체가 같은 객체인지 알려주는 메서드.
 * - clone() : - 객체 자신의 복사본을 만드는 메서드.
 */

 

 

/*
 * toString() 메서드 재정의
 * - Object 클래스에서 상속을 받은 메서드를 유용한 정보가 반환이 되도록 재정의.
 * - 해당 클래스의 멤버변수가 정보를 가지고 있는데 
 *   가지고 있는 데이터에 올바른 값이 담겼는지, 혹은 틀린 데이터가 담겼는지 확인을 하고 싶은 경우에 
 *   toString() 메서드를 재정의하여 값을 확인할 수 있음. 
 */

source - generate toString()..

 

object배열은 모든 자료형을 받을수 있으나 딱히 쓸모는 없다.

 

 

 

 

😀단축for문

for(String k : str) {
System.out.println("str 배열 요소 >>> " + k);

 

😀배열

new를 넣어야지 heap메모리에 잡힘

[0] => 인덱스

arr [1] ==> 배열이름에 1번째 인덱스

 

😀클래스이름.멤버메서드 --> static

'자바 JAVA' 카테고리의 다른 글

23.01.26 (네트워크)  (1) 2023.01.26
23.01.18 (기본 클래스)  (0) 2023.01.18
23.01.16 (상속과 다형성)  (0) 2023.01.16
23.01.13 (클래스와 객체)  (0) 2023.01.13
23.01.12 (클래스와 객체)  (0) 2023.01.12

댓글