일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- where
- JavaScript
- 프로그래머스 sql 고득점 kit
- 리눅스
- html
- 정보처리기사필기요약
- order by
- 데이터 조회
- mybatis
- 형변환
- Git
- Java
- Linux
- 백엔드
- scanner
- 정보처리기사
- select
- 알고리즘
- 클래스
- MySQL
- 입출력
- StringBuilder
- 프로그래머스 SQL
- BufferedReader
- github
- 자바
- sql문
- DML
- 메서드
- 개발자
- String클래스
- 백준
- 예외처리
- 스프링
- SQL
- 프로그래밍
- 프론트엔드
- 자바스크립트
- 웹개발
- select문
- Today
- Total
ToBe끝판왕
[ JAVA ] java.util 패키지( Date 클래스 / Calendar 클래스 / Random 클래스 / StringTokenizer 클래스 / Scanner 클래스 / Stringjoiner 클래스 ) , 추상클래스 , 인터페이스 본문
[ JAVA ] java.util 패키지( Date 클래스 / Calendar 클래스 / Random 클래스 / StringTokenizer 클래스 / Scanner 클래스 / Stringjoiner 클래스 ) , 추상클래스 , 인터페이스
업그레이드중 2022. 5. 26. 18:50
java.util 패키지
• 프로그램을 개발하는데 사용할 수 있는 유용한 유틸리티 클래스가 다수 포함되어 있다.
• java.lang 패키지 다음으로 가장 많이 사용된다.
• import문으로 패키지를 불러와야 클래스를 사용가능하다.
• 참고페이지
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/package-summary.html
※ 유틸리티 클래스란 ?
• 여러 클래스에서 공통적으로 사용되는 메서드 중, 관련있는 메서드들끼리 모아서 클래스로 만든것
• 중복된 코드가 발생하지 않고 관리가 용이하다.
• 모든 메서드들이 static 이다.
• 인스턴스화가 필요없다.
• private 접근제한자를 이용한다.
Date 클래스
• 날짜 및 시각정보를 관리하는 클래스이다.
• 대부분의 메서드가 deprecated로 처리되어 있어, 현재는 사용되지 않지만
기존 API의 대다수가 Date 타입을 사용하고 있다.
▶ Date 클래스 예
import java.util.Date;
public class Date {
public static void main( String[] args ) {
// 현재시간을 가져온다.
// java.util.Date d = new java.util.Date() 와 같다.
Date d = new Date();
// Overriding
System.out.println( d );
System.out.println( d.toString() );
System.out.println( d.toLocaleString() );
String strDate = d.toLocaleString();
System.out.println( strDate.substring(0, 4) );
System.out.println( strDate.substring(6, 8) );
// Method
// 1900 부터 해주어야 한다.
System.out.println( d.getYear() + 1900 );
// 0부터 시작해서 +1 해주어야 한다.
System.out.println( d.getMonth() + 1 );
System.out.println( d.getDate() );
System.out.println( d.getDay() );
}
}
▶ Date 클래스 예
import java.util.Date;
public class Date {
public static void main( String[] args ) {
Date d = new Date( 2021-1900, 12-1, 25 );
System.out.println( d.toLocaleString() );
//2021년 2월 마지막 날
Date d1 = new Date(2021 - 1900, 3-1, 0);
System.out.println( d1.toLocaleString() );
// timestamp
System.out.println( d1.getTime() );
Date d2 = new Date( d1.getTime() );
System.out.println( d2.toLocaleString() );
}
}
Calendar 클래스
• 날짜와 시간을 다루는 클래스이다.
• Calendar 클래스가 추가되면서 Date클래스가 deprecated 되어 잘 사용하지 않게 되었다.
• 추상클래스이기 때문에 직접 new 하여 객체 생성이 불가능하다.
▶ Calendar 클래스 주요 상수
▶ Calendar 클래스 예
import java.util.Calendar;
publc class Calendar {
public static void main( String[] args ) [
Calendar c = Calendar.getInstance();
System.out.println( c );
System.out.println( c.get(Calendar.YEAR) );
System.out.println( c.get(Calendar.MONTH) + 1 );
System.out.println( c.get(Calendar.DATE) );
System.out.println( c.get(Calendar.DAY_OF_WEEK) );
}
}
▶ Calendar 클래스 예
import java.util.Calendar;
import java.util.Date;
public class Calnedar {
public static void main( String[] args ) {
Calendar c = Calendar.getInstance();
c.set(2020, 11-1, 1);
System.out.println(c.toString() );
//위에서 설정한 날짜값을 출력하기
System.out.println(c.getTime() );
//위에서 설정한 날짜값을 보기 쉽게 출력하기
Date d = c.getTime();
System.out.println(d.toLocaleString() );
//2020년 12월 31일의 요일을 알아내는 방법
c.set(2021, 1-1, 1-1);
System.out.println(c.get(Calendar.DAY_OF_WEEK ));
String[] weeks = {"일", "월", "화", "수", "목", "금", "토"};
System.out.println(weeks[c.get(Calendar.DAY_OF_WEEK )-1] );
}
}
▶ Calendar 클래스 활용( 달력만들기 )
• 1일의 요일부터 계산
• 1일의 요일과 마지막 날짜를 알면 달력을 만들 수 있다.
• 1을 기준점으로 7번씩 회전한다. ( 마지막날까지 )
import java.util.Calendar;
public class CalendarEx {
public static void main( String[] args ) {
int year = 2022;
int month = 05;
int startDayofWeek = 0;
int endDay = 0;
Calendar sDay = Calendar.getInstance();
Calendar eDay = Calendar.getInstance();
sDay.set( year, month-1, 1 );
eDay.set( year, month, 1-1 );
// 0 - 일요일( Date 클래스 )
// 1 - 일요일( Calendar클래스 )
startDayofWeek = sDay.get( Calendar.DAY_OF_WEEK );
endDay = eDay.get( Calendar.DATE );
System.out.println( startDayofWeek );
System.out.println( endDay );
// 세칸이 하나
System.out.println(" SU MO TU ME TH FR SA");
// 1일 이전 공백
// 일요일부터 시작
// 일요일이 1이기때문에 1부터
for( int i=1; i<startDayofWeek; i++ ) {
System.out.print(" ");
}
// 달력 출력
for( int i=1, n=startDayofWeek; i<=endDay; i++, n++ ) {
// 한자리수 두자리수 차이가 있어서 칸수 맞춰주기 위함이다.
System.out.print( (i<10) ? " "+i : " "+i);
// 7로 나누어 떨어지면 즉 토요일이면 enter
if( n % 7 == 0 ) {
System.out.println();
}
}
}
}
Random 클래스
• 난수를 생성하는 클래스로 객체를 생성하여 사용한다.
• Random( long seed ) 로 종자값( seed ) 을 설정할 수 있다.
• 종자값 없이 Random( ) 으로 하면 실행시마다 다른 값이 나온다.
• 종자값이 같으면 같은값이 나온다.
▶ Random 클래스 메서드
• nextBoolean( ) : boolean 타입의 난수 리턴
• nextDouble( ) : double 타입의 난수 리턴
• nextInt( ) : int 타입의 난수 리턴
• nextInt( int n ) : int타입의 난수를 리턴 ( 범위 : 0 <= 난수 < n )
▶ Random 클래스 예
import java.util.Random;
public class Random {
public static void main( String[] args ) [
int [] selectNumber = new int[6];
Random random = new Random(3);
for( int i=0; i<6; i++ ) {
// 1 ~ 46 정수 난수
selectNumber[i] = random.nextInt(45) + 1;
System.out.println( selectNumber[i] + " " );
}
System.out.println();
}
}
StringTokenizer 클래스
• 우리가 지정한 구분자로 문자열을 쪼개주는 클래스
• 쪼개어진 문자열을 토큰( Token ) 이라고 부른다.
• 참고페이지
https://baby9235.tistory.com/43?category=1021977
▶ StringTokenizer 클래스 사용방법
// 공백 기준( 기본 )
String data1 = "사과 딸기 수박";
StringTokenizer st1 = new StringTokenizer( data1 );
// 구분자 기준
String data2 = "사과&딸기&수박";
StringTokenizer st2 = new StringTokenizer( data2, "&" );
// 여러개 구분자 기준
String data3 = "X=100*(100+200)/3";
StringTokenizer st3 = new StringTokenizer( data3, "=*+/()" );
▶ StringTokenizer 메서드
• countTokens( ) : 토큰의 개수
• nextToken( ) : 다음 토큰을 가리킨다( 각 노큰의 값을 출력 )
• hasMoreTokens( ) : 다음 토큰이 있으면 true, 없으면 false
▶ StringTokenizer 클래스 예
import java.util.StringTokenizer;
public class StringTokenizer {
public static void main(String[] args) {
String data1 = "사과&배&복숭아";
StringTokenizer st1 = new StringTokenizer( data1, "&" );
String data2 = "x=100*(200+300)/2";
StringTokenizer st2 = new StringTokenizer( data2, "=*+/()" );
//토큰의 개수 출력
System.out.println( st2.countTokens() );
while ( st2.hasMoreTokens() ) {
System.out.println( st2.nextToken() );
}
}
}
▶ Split( ) 와의 차이
split( ) 는 있는 그대로 출력하고 StringTokenizer는 공백을 없앤다.
ex)
import java.util.StringTokneizer;
public class StringTokenizer {
public static void main( String[] args ) {
String data = "사과&수박&&&딸기";
StringTokenizer st = new StringTokenizer( data, "&" );
String[] datas = data.split( "&" );
System.out.println( st.countTokens() );
System.out.println( datas.length );
int i=1;
while( st.hasMoreTokens() ) {
System.out.println( i + " : " + st.nextToken() );
i++;
}
i=1;
for( String d : datas ) {
System.out.println( i + " : " + d ) ;
i++;
}
}
}
Scanner 클래스
• 기본적인 데이터 타입들 ( 정수 / 실수 / 문자열 )을 Scanner 클래스의 메서드를 사용하여 입력받을 수 있다.
• 실제 입력은 System.in 에서 한다. ( Scanner 클래스와 짝궁이라고 할 수 있다. )
• 공백( 띄어쓰기 ) 또는 개행( 줄바꿈 ) 을 기준으로 읽는다.
• 참고페이지
https://baby9235.tistory.com/34?category=1021977
▶ Scanner클래스 예
import java.util.Scanner;
public class Scanner {
public static void main( String[] args ) {
Scanner sc = new Scanner( System.in );
System.out.print( "입력 : " );
// next()에서 입력이 될때까지 기다리다가 enter키가 입력되면 다음 진행
// 만약 space바가 입력 값 사이에 입력되면 첫번째 값만 가져온다.
// 여러개의 next() => 여러개 입력받을 수 있다.
String msg1 = sc.next();
String msg2 = sc.next();
System.out.println( "입력된 메시지 : " + msg1 );
System.out.println( "입력된 메시지 : " + msg2 );
// nextLine()은 문장을 입력할 수 있다.
// space에서 안끊기고 다 저장이 된다.
String msg3 = sc.nextLine();
int msg4 = sc.nextInt();
System.out.println( "입력된 메시지 : " + msg3 );
System.out.println( "입력된 메시지 : " + msg4 );
sc.close();
}
}
import java.util.Scanner;
public class Scanner {
public static void main( String[] args ) {
Scanner sc = new Scanner( System.in );
System.out.print( "입력 : " );
// nextLine()은 문장을 입력할 수 있다.
// space에서 안끊기고 다 저장이 된다.
String msg3 = sc.nextLine();
int msg4 = sc.nextInt();
System.out.println( "입력된 메시지 : " + msg3 );
System.out.println( "입력된 메시지 : " + msg4 );
sc.close();
}
}
▶ Scanner클래스 활용문제( 구구단 )
• 입력값 검사
• q 입력하면 구구단 종료
import java.util.Scanner;
public class Scanner {
public static void main( String[] args ) {
while( true ) {
Scanner sc = new Scanner( System.in );
System.out.print( "단수를 입력하세요( 2~9 까지 입력 ) : " );
String dansu = sc.next();
// 입력값 검사
if( dansu.equals( "q" ) ) {
System.out.print( "프로그램을 종료합니다." );
System.exit(0);
}
if( (int)dansu.toCharArray()[0] <= 49 || (int)dansu.toCharArray()[0] >57 ) {
System.out.println( "틀린 단수입니다. 다시 입력해주세요." );
continue;
}
// 계산
int dansu1 = Integer.parseInt( dansu );
System.out.println( dansu1 + "단 출력" );
for( int i=1; i<=9; i++ ) {
System.out.println( dansu1 + " X " + i + " = " + i*dansu1 );
}
}
}
}
StringJoinner 클래스
▶ 문자열 ( String ) 합치는 여러가지 방법
1) + 연산자 이용
2) format( ) 사용
3) join ( ) 사용
4) StringJoinner 클래스 사용
▶ String 합치는 예
import java.util.StringJoiner;
public class StringJoinner {
public static void main( String[] args ) {
// 문자열 연걸 1번
// + 연산자 사용
String str1 = "apple" + ",banana" + ",strawberry";
System.out.println( " +연산자 사용 : " + str1 );
// 문자열 연결 2번
// format() 사용
String str2 = String.format( "%s,%s,%s", "apple", "banana", "strawberry" );
System.out.println( " format() 사용 : " + str2 );
// 문자열 연결 3번
// 배열과 join()을 사용
String[] arr = { "apple", "banana", "strawberry" };
String str3 = String.join( ",", arr );
System.out.println( " join() 사용 : " + str3 );
// 문자열 연결 4번
// StringJoiner 클래스 , add 메서드 사용
StringJoiner sj = new StringJoiner( "," );
sj.add( "apple" ).add( "banana" ).add( "strawberry" );
System.out.println( " StringJoiner사용 : " + sj );
}
}
추상클래스
• 추상( abstract )는 공통되는 특성을 추출하는것을 의미한다.
• 객체를 직접 생성할 수 있는 실체클래스들의 공통적인 특성을 추출해서 선언한 것
• 추상클래스가 부모이고 실체클래스가 자식이다.
• 객체를 직접 생성하지 못한다.
• 추상클래스는 new연산자를 사용해서 인스턴스를 생성하지 못한다.
▶ 추상클래스의 용도
• 실체 클래스들의 공통된 필드와 메서드의 이름을 통일할 목적
- 추상클래스에서 메서드명을 고정하고 다른 클래스들이 상속받아서 override 하게 만든다.
• 실체 클래스를 작성할 때 시간 절약
- 상속받기만해서 사용하기 때문에
▶ 추상클래스의 선언
• class 앞에 abstract를 붙인다.
• 추상클래스를 객체화 하기 위해선, 상속을 통해서 실체클래스로부터 객체를 만들어야 한다.
class Parent1 {
Parent1() {
System.out.println( "Parent1 생성" );
}
}
// 추상클래스 만들기
abstract class Parent2 {
Parent2() {
System.out.println( "Parent2 생성" );
}
}
class Child extends Parent2 {
Child() {
System.out.println( "Child 생성" );
}
}
public class Abstract {
public static void main( String[] args ) {
Parent1 p1 = new Parent1();
// Parent2 p2 = new Parent2() 생성 불가능
Child c1 = new Child(); // 추상클래스인 부모생성자와 실체클래스인
// 자식생성자를 불러온다.
}
}
▶ 추상 메서드
• 일반 클래스는 추상메서드를 가질 수 없다.
• 추상클래스만 추상메서드를 가질 수 있다.
• abstract 클래스는 상속받아야 인스턴스화 되어 쓸 수 있다.
• abstract 메서드는 abstract 클래스 안에서 선언되어, abstract 클래스를 상속받은 클래스내에서
구현되어야 쓸 수 있다.
=> abstract 클래스 / abstract 메서드 모두 선언 후에, 상속을 통해 상속받은 클래스가
인스턴스화 / 구현을 해줘야 사용이 가능하다는 것이다.
abstract class Animal {
public String kind;
public void breathe() {
System.out.println( "숨을 쉽니다." );
}
//추상메소드
public abstract void sound();
}
class Dog extends Animal {
public Dog() {
this.kind = "포유류";
}
// 추상메소드 재정의
// Dog클래스에 맞게
@Override
public void sound() {
System.out.println( "멍멍" );
}
}
class Cat extends Animal {
public Cat() {
this.kind = "포유류";
}
// 추상메소드 재정의
// Cat클래스에 맞게
@Override
public void sound() {
System.out.println( "야옹" );
}
}
public class Abstract {
public static void main( String[] args ) {
Dog dog = new Dog();
Cat cat = new Cat();
dog.sound();
cat.sound();
}
}
인터페이스
• 객체의 사용방법을 정의한 타입
• 객체의 교환성을 높여주기 때문에 다형성을 구현하는데 매우 중요한 역할
• 개발코드와 객체가 서로 통신하는 접점역할을 한다.
( 개발코드가 인터페이스 메서드를 호출하면, 인터페이스는 객체의 메서드를 호출한다. )
• 개발 코드를 수정하지 않고, 사용하는 객체를 변경할 수 있도록 만든다.
• 인터페이스는 여러 객체들과 사용이 가능하기 때문에, 코드 변경없이 실행 내용과 리턴값을 다양화 할 수 있다는
장점을 가진다.
▶ 인터페이스 선언
• 상수, 추상 메서드, 디폴트 메서드, 정적메서드 만 선언 가능
• 객체 생성이 불가능하기 때문에 생성자를 가질 수 없다.
• 접근제한이 생략되어 있다면 public 이 생략되어 있는 것
[public] interface 인터페이스명 { 내용 }
▶ 인터페이스 사용
interface InterA {
//상수
public static final String STR1 = "홍길동";
//추상메소드
public abstract void method1();
}
interface InterB {
//상수
public static final String STR1 = "이몽룡";
//추상메소드
public abstract void method3();
}
class ClassA implements InterA, InterB { //다중상속
public void method1() {
System.out.println( "method1 호출" );
}
public void method2() {
System.out.println( "method2 호출" );
}
public void method3() {
System.out.println( "method3 호출" );
}
}
public class InterfaceEx {
public static void main( String[] args ) {
ClassA a = new ClassA();
a.method1();
a.method2();
a.method3();
System.out.println(InterA.STR1);
System.out.println(InterB.STR1);
}
}
▶ 인터페이스끼리 상속
interface InterA {
String STR1 = "홍길동";
void methodA();
}
//인터페이스끼리 상속
interface InterB extends InterA {
String STR2 = "박문수";
void methodB();
}
class Child implements InterB {
public void methodA() {
System.out.println( "methodA 호출" );
}
public void methodB() {
System.out.println( "methodB 호출" );
}
}
public class InterfaceEx {
public static void main( String[] args ) {
Child c = new Child();
c.methodA();
c.methodB();
System.out.println( c.STR1 );
System.out.println( c.STR2 );
}
}
▶ 인터페이스 상속과 구현 동시에 받기
interface InterA {
String STR1 = "홍길동";
void methodA();
}
//인터페이스끼리 상속
interface InterB extends InterA {
String STR2 = "박문수";
void methodB();
}
class Parent {
Parent() {
System.out.println("Parent 생성자");
}
}
//상속과 구현을 동시에 받는 클래스
class Child extends Parent implements InterB {
Child() {
System.out.println( "Child 생성자" );
}
public void methodA() {
System.out.println( "methodA 호출" );
}
public void methodB() {
System.out.println( "methodB 호출" );
}
}
public class InterfaceEx {
public static void main( String[] args ) {
Child c = new Child();
c.methodA();
c.methodB();
System.out.println(c.STR1);
System.out.println(c.STR2);
}
}
▶ 인터페이스 추상메서드 / 디폴트 메서드 / 정적메서드의 선언
//인터페이스 선언
interface RemoteControl {
//상수
int MAX_VOLUME = 10;
int MIN_VOLUME = 10;
//추상메소드
void turnOn();
void turnOff();
void setVolmn(int volumn);
//디폴트 메소드
default void setMute(boolean mute) {
if(mute) {
System.out.println( "무음 처리합니다." );
} else {
System.out.println( "무음 해제합니다." );
}
}
//정적 메소드
static void changeBattery() {
System.out.println( "건전지를 교체합니다." );
}
}
//구현클래스
class Television implements RemoteControl {
//필드
private int volumn;
//실체메소드 작성
public void turnOn() {
System.out.println( "TV를 켭니다." );
}
public void turnOff() {
System.out.println( "TV를 끕니다." );
}
public void setVolmn( int volumn ) {
if (volumn > RemoteControl.MAX_VOLUME) {
this.volumn = RemoteControl.MAX_VOLUME;
} else if (volumn < RemoteControl.MIN_VOLUME) {
this.volumn = RemoteControl.MAX_VOLUME;
} else {
this.volumn = volumn;
}
System.out.println( "현재 TV 볼륨: " + this.volumn );
}
}
public class RemoteControlEx {
public static void main( String[] args ) {
RemoteControl rc;
rc = new Television();
rc.turnOn();
rc.setVolmn(11);
RemoteControl.changeBattery();
rc.setMute(true);
rc.setMute(false);
rc.turnOff();
}
}
'■ 프로그래밍 SKILLS > JAVA' 카테고리의 다른 글
[ JAVA ] 예외처리( 다중 catch / 예외 강제발생 / 예외 떠넘기기 / 사용자정의 예외 ) , 열거타입 (0) | 2022.06.01 |
---|---|
[ JAVA ] 타입 변환과 다형성 , 중첩클래스 , 익명구현객체 , 예외 (0) | 2022.05.27 |
[ JAVA ] java.lang 패키지( String 클래스 / StringBuffer 클래스 / Math 클래스 / Wrapper 클래스 / System 클래스 ) (0) | 2022.05.25 |
[ JAVA ] java.lang 패키지( Object 클래스 , String 클래스 ) (0) | 2022.05.25 |
[ JAVA ] 인터페이스( Interface ) (0) | 2022.05.24 |