07. 클래스(Class) [ JAVA ]

duck-ach·2022년 7월 21일
0

JAVA

목록 보기
7/27

클래스 명명 규칙 (Class Naming Rule)

명명규칙이란, 개발 업무시 각 개발에 대한 이름으로 명명규칙(Naming Rule)을 준수함으로써 코드의 완전성과 가독성을 향상시키고 명확한 의사소통을 통하여 생산성을 높일 수 있다.

  • 클래스 명명 규칙 :
    패키지 다음에 마침표(.)를 적고 클래스명을 적는다.
    ex) java.lang.System.out.println("Hello");
    -패키지 : java.lang
    -클래스 : System
    -필드 : out
    -메소드 :println();

클래스와 객체(Class and Object)

    1. 클래스(Class) : 객체를 만들기 위한 설계도
    1. 객체(Object) : 클래스를 이용해서 만든 실제 객체
    1. 메소드(Method) : 객체의 행동
    1. 필드(Field) : 객체의 속성

일반적인 객체 생성 방법

public class Object {
	public static void main(String[] args) {
    	클래스 객체 = new 클래스();
        // 객체(이름)은 변수이름처럼 개발자가 지으면 된다.
    }
}

메소드 사용

  • 1. 클래스를 이용해서 호출
    System.out.println()
    System.currentTimeMillis()
    System.nanoTime()
    Math.random()
  • 2. 객체를 만들어서 호출
    - String str = new String("Hello")
    ㄴ Hello라는 문자를가진 str 객체가 만들어진다. // 클래스 String, 객체 str
    ㄴ str.equals("Hello")
    - Date now = new Date(); // 클래스 Date, 객체 now
    ㄴ now.getMonth() //오늘 날짜 중 월을 얻는 것
    - StringBuilder sb = new StringBuilder(); // 클래스 StringBuilder, 객체 sb
    ㄴ sb.append()
    -
    붕어빵 붕1 = new 붕어빵(); // 클래스 붕어빵, 객체 붕1
    붕어빵 붕2 = new 붕어빵(); // 클래스 붕어빵, 객체 붕2 //클래스 하나 가지고 객체 여러개 만들기
    붕어빵 붕3 = new 붕어빵(); // 클래스 붕어빵, 객체 붕3
    붕어빵 붕4 = new 붕어빵(); // 클래스 붕어빵, 객체 붕4

Util 라이브러리를 활용한 Date 클래스와 now 객체

import java.util.Date;
public class Date {
	public static void main(String[] args) {
    	Date now = new Date();
		System.out.println(now);
        // Thu Jul 21 18:01:59 KST 2022
    }
}

Util로 Date를 구현하니 요일 날짜 시간을 한번에 보여줬다.
이번엔 spl라이브러리를 활용한 방법을 이용해보겠다.

import java.util.Date;
public class Date {
	public static void main(String[] args) {
    	// java.sql.Date 클래스 (structure query language)
		// 데이터베이스의 날짜 표시 방식에 맞춰 놓은 클래스
		// Oracle 데이터베이스의 날짜 타입("/", "-")과 매칭해서 사용
		
		Date now = new Date(System.currentTimeMillis());
		System.out.println(now);
        // 2022-07-21
    }
}

데이터베이스의 날짜 표시 방식에 맞춰놓은 거라 그런지 굉장히 심플하게 구조가 갖춰진채로 나왔다.

난수(Random Number)

  • 난수(Random Number)란 정의된 범위 내에서 추출된 무작위의 수를 일컫는 말이다.
  • JAVA에서의 난수(Random Number)는 Math 라는 클래스를 이용해서 구현한다.
  • 형식
public class Random {
	public static void main(String[] args) {
    	Math.random();
    }
}

Math.random()을 그대로 추출하면 0.0<= Math.random() < 1.0의 수가 나온다.
즉, 실수로 나온다는 뜻인데 다양한 방법으로 이용할 수 있다.

쉬운 예제로 예를 들어보겠다.

10% 확률로 "대박", 90% 확률로 "쪽박"을 구현하시오.

public class ExampleRandom1 {
	public static void main(String[] args) {
    	if(Math.random() < 0.1) {
			System.out.println("대박");
		} else {
			System.out.println("쪽박");
		}
    }
}

역시 도박만큼 집중이 잘 되는게 없다.
운을 시험해보면서 Random() 메소드에 관해 단번에 이해했다.

주사위가 2개가 있습니다. 2개가 어떤 숫자가 나올지 출력하시오.

이 문제는 일반적인 방법과 for문을 이용한 방법 두가지 방법으로 풀어보겠다.

방법1

public class ExampleRandom2 {
	public static void main(String[] args) {
    	int diceA = (int)(Math.random() * 6) + 1; 
        	System.out.println("Dice 1 : " + diceA); 
        int diceB = (int)(Math.random() * 6) + 1;
		  	System.out.println("Dice 2 : " + diceB);
    }
}

방법2(for문활용)

public class ExampleRandom2 {
	public static void main(String[] args) {
    	for(int n = 0; n < 2; n++) {
			int dice = (int)(Math.random() * 6) + 1;
			System.out.println("Dice " + dice);
		}
    }
}

for문이 이렇게 실용적으로 잘 쓰일 수 있다니 잘 숙지해 두자.

여섯자리 휴대폰 인증 숫자 6자리 출력하기. (ex.234565)

public class ExampleRandom2 {
	public static void main(String[] args) {
    	String code = "";
		for(int n = 0; n < 6; n++) {
			code +=(int)(Math.random() * 10); // "" + 100 = "100" 이것을 활용한다.
		}
		System.out.println(code);
    }
}

위에서 풀어보았던 for문을 활용하여 풀어보았다.
그리고 숫자를 문자열로 변경하는 "" + 100 = "100" 이 공식을 잘 활용하여 String문자열로 간편하게 바꿀 수 있었다.

ASKII문자표에 따른 A~Z(65~90)사이의 코드값을 랜덤으로 생성하시오.

public class ExampleRandom2 {
	public static void main(String[] args) {
    	System.out.println((char)((int)(Math.random() * 26) + 'a'));
    }
}

단 한줄로 랜덤의 대문자 알파벳을 생성할 수 있다.
위의 코드 응용으로 한 문제만 더 풀어보도록 하겠다.

대문자와 소문자를 섞어서 랜덤하게 6글자를 만들어 휴대폰 인증 숫자를 생성하시오.

public class ExampleRandom2 {
	public static void main(String[] args) {
    	String enCode = "";
		for(int n = 0; n < 6; n++) {
			if(Math.random() < 0.5) { // 조건 : 50% 확률로
				enCode += (char)((int)(Math.random() * 26) + 'A');
			} else {
				enCode += (char)((int)(Math.random() * 26) + 'a');
			}
				
		}
		System.out.println(enCode);
    }
}

처음엔 대문자와 소문자를 한번에 추출하려고 했다가 if문 걸었다가 완전 난리를 부렸는데
똑같은 if문이지만 훨씬 간편하고 간단한 방법을 찾았다.
난수도 쓸일이 많으니 잘 익혀두자.

날짜 & 시간

우선 날짜와 시간을 하면서 System클래스를 이용한 날짜 시간을 탐색해보자.

  • 1. 타임스탬프(timestamp)
    1970-01-01 0:00부터 1/1000초마다 증가하는 long타입의 정수값 (1초에 1000개가 늘음)
public class TimeStamp {
	public static void main(String[] args) {
    	long timestamp = System.currentTimeMillis(); // currentTime = 현재시간 Millis 1000분의 1초
		System.out.println(timestamp);
        //1658390843094 (나의 현재 타임스탬프가 출력된다.)
        // 개발자들이 업로드 제목 정할 때
		// 경과시간 계산할 때
    }
}
  • 2. 나노타임(nanoTime)
    s > ㎳(1/1000) > ㎲(1/백만1000000) > ㎱(1/십억1000000000) > ㎰(1/1조1000000000000)
    나노초(㎱) 값을 가지는 long 타입의 정수값.
    주로 두개의 나노초(㎱) 사이의 경과시간 계산용으로 쓰인다.
public class TimeStamp {
	public static void main(String[] args) {
    	long beginTime = System.nanoTime();
		int total = 1 + 2 + 3 + 4 + 5;
		long endTime = System.nanoTime();
		System.out.println(total + " 계산에 걸린 시간 : " + (endTime - beginTime) + "㎱");
        //15 계산에 걸린 시간 : 200㎱
    }
}

캘린더(Calendar)

  • 현재 날짜 또는 특정 날짜를 나타낼 때 사용.
  • 날짜의 특정 요소(년, 월, 일, 시, 분, 초, ...)를 쉽게 사용.
  • 선언
import java.util.Calendar;
public class Calendar {
	public static void main(String[] args) {
    Calendar cal = Calendar.getInstance();
    }
}

년, 월, 일

import java.util.Calendar;
public class Calendar {
	public static void main(String[] args) {
    Calendar cal = Calendar.getInstance();
    int year = cal.get(Calendar.YEAR);
		
		int month = cal.get(Calendar.MONTH);
		int day = cal.get(Calendar.DAY_OF_MONTH); // 월 기준 몇일
		int weekNo = cal.get(Calendar.DAY_OF_WEEK); // 일주일 중 몇번째 날짜인가(요일)
        
     	System.out.println(year); // 2022
		System.out.println(month + 1); // 7, 월 : 0 ~ 11(주의가 필요함)
		System.out.println(day); // 25
        switch(weekNo) { // 숫자로 나오기 때문에 (일요일 = 1) switch문을 사용하여 추출해주었다.
		case 1 : System.out.println("일요일"); break;
		case 2 : System.out.println("월요일"); break;
		case 3 : System.out.println("화요일"); break;
		case 4 : System.out.println("수요일"); break;
		case 5 : System.out.println("목요일"); break;
		case 6 : System.out.println("금요일"); break;
		default : System.out.println("토요일");
		}
	
    }
}

오전/오후, 시, 분, 초

import java.util.Calendar;
public class Calendar {
	public static void main(String[] args) {
    Calendar cal = Calendar.getInstance();
  		int ampm = cal.get(Calendar.AM_PM);  // 오전이면 0 오후면 1
		int hour12 = cal.get(Calendar.HOUR); 		// 1 ~ 12시
		int hour24 = cal.get(Calendar.HOUR_OF_DAY); // 0 ~ 23시
		int min = cal.get(Calendar.MINUTE);			// 0 ~ 59분
		int second = cal.get(Calendar.SECOND);		// 0 ~ 59	
        
		switch(ampm) {
			case 0 : System.out.println("오전");
			case 1 : System.out.println("오후");
		}
        
		System.out.println("현재시각 : " + hour12 + "시 " + min + "분 " + second + "초");
		}
    }
}

캘린더 클래스는 get() 메소드를 활용하여 여러 인스턴스를 받아 날짜와 시간을 추출한다.

LocalDateTime클래스

  • 특정 날짜 요소 사용이 가능하다.
  • 날짜의 패턴 지정이 가능하다. (ex. yyyy-MM-dd 등)
  • Calendar는 get()메소드 하나였지만, LocalDateTime는 다 따로 되어있어 직관적이고 편리하다.
  • 선언
    import java.time.LocalDateTime;
    public class LocalDateTime {
    	public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();
       }
    }

특정 날짜 요소 사용

import java.time.LocalDateTime;

public class LocalDateTime {
	public static void main(String[] args) {
   
    LocalDateTime now = LocalDateTime.now();
    	int year = now.getYear();
		int month = now.getMonthValue(); 	// 1 ~ 12
		int day = now.getDayOfMonth(); 		// 1 ~ 31
		int hour = now.getHour(); 			// 0 ~ 59
		int minute = now.getMinute();		// 0 ~ 59
		int second = now.getSecond();		// 0 ~ 59
       
       	System.out.println(year); // 2022
		System.out.println(month); // 07
		System.out.println(day); // 25
		System.out.println(hour); // 10
		System.out.println(minute); // 50
		System.out.println(second); // 6
   }
}

오타로 인한 오류를 줄이기 위해 가능하면 코드는 직접 키보드로 입력하지 않고 복사를 하는것이 좋다.

패턴

패턴의 적용결과는 항상 String이다.

날짜 / 시간 패턴
대 · 소문자를 주의 해야한다.

  • yy : 22 (2자리 년도)

  • yyyy : 2022 (4자리 년도)

  • M : 7 (월 1 ~ 12)

  • MM : 07 (월 01 ~ 12)

  • MMM : 7월 (월 1월 ~ 2월)

  • d : (일 1 ~ 31)

  • dd : (일 01 ~ 31)

  • u : 요일(1 ~ 7) (1 = 월요일, 2 = 화요일 ..... 7 = 일요일)

  • E : 요일 (월 ~ 일)

  • a : 오전/오후

  • h : (1 ~ 12)

  • hh : (01 ~ 12)

  • H : (0 ~ 23)

  • HH : (00 ~ 23)

  • m : (0 ~ 59)

  • mm : (00 ~ 59)

  • s : (0 ~ 59)

  • ss : (00 ~ 59)

LocalDateTime의 패턴 적용

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class LocalDateTimePattern {
	public static void main(String[] args) {
    LocalDateTime now = LocalDateTime.now();
    	
       	DateTimeFormatter dtf = DateTimeFormatter.ofPattern("a h:mm yyyy-MM-dd");
		String date = dtf.format(now); // 패턴의 적용결과는 String이므로
		System.out.println(date); // 오전 11:19 2022-07-25
    
    
   }
}

DateTimeFormatter.ofPattern()메소드를 활용해서 패턴을 적용해준다.
적용 양식은 큰 따옴표("")로 감싸준다.

SimpleDateTime클래스

  • java.text.SimpleDateFormat 클래스
  • 패턴이 적용된 String 타입의 날짜를 반환한다.
  • 선언
import java.text.SimpleDateFormat;\
import java.util.Date;
public class SimpleDateTime {
	public static void main(String[] args) {
     Date date1 = new Date();
    }
}

java.sql패키지에 있는 Date 활용해보기.

바로 위에 선언된 SimpleDateTime class는 util에 소속된 Date이다.
sql패키지를 한 클래스 안에 함께 선언하려면

import java.text.SimpleDateFormat;\
import java.util.Date;
public class SimpleDateTime2 {
	public static void main(String[] args) {
     Date date1 = new Date();
     java.sql.Date date2 = new java.sql.Date(System.currentTimeMillis());
    }
}

Date 메소드는 이름이 같은 메소드인데 소속된 패키지(java.util, java.sql)가 달라서 다른 import가 중복되면 컴퓨터가 코드를 읽을 때 헷갈려서 제대로 인식하지 못하므로 이렇게 풀어서 선언을 해야한다.
(자동완성을 하더라도 java.sql.Date 이렇게 완성된다.)

SimpleDateFormat을 이용한 패턴형식 날짜 반환

import java.text.SimpleDateFormat;\
import java.util.Date;
public class SimpleDateTime3 {
	public static void main(String[] args) {
     Date date1 = new Date();
     java.sql.Date date2 = new java.sql.Date(System.currentTimeMillis());
     
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String result1 = sdf.format(date1);
		String result2 = sdf.format(date2);
		
		System.out.println(result1); // 2022-07-25 12:00:48
		System.out.println(result2); // 2022-07-25 12:00:48
    }
}

결과는 동일하다.

profile
자몽 허니 블랙티와 아메리카노 사이 그 어딘가

0개의 댓글