728x90
객체지향과 절차지향

 

  • 객체지향
    객체를 만들어 순서에 연연하지 않고 자주 쓰거나 필요한 부품은 따로 정의하여 모듈화 하는 등의
    장점을 가진 방법.
    객체의 호출 순서에만 영향을 받는다.

  • 절차지향
    하나의 로직을 순서대로 진행하여 처리하는 방법

객체지향 프로그래밍의 특징

 

  1. 캡슐화 :
    캡슐화 = 보안 = 보호
    관련된 데이터(필드)와 기능(메소드)이 하나의 묶음으로 관리된다.
  2. 상속
    이미 작성된 부모 클래스를 이어받아 새롭게 만드는 것
    자식 클래스는 부모 클래스의 모든 속성(필드)과 동작(메소드)을 사용할 수 있다.
    부모 클래스에 없는 기능은 자식 클래스에 추가해 사용한다.
  3. 추상화
    실제 객체를 인스턴스화 할 때, 불필요한 것을 제외하고 필요한 것만 유지한다.
  4. 다형성
    파라미터나 상황에 따라 객체의 동작이 변경되는 것

지역변수와 인스턴스변수

 

  • 지역 변수
    메소드 괄호{ } 안에서 선언, 괄호가 닫히면 사라진다.
    사용하기 전 초기화 필수

  • 인스턴스 변수 (멤버 변수)
    클래스 바디에 생성
    직접 초기화하지 않아도 자바 프로그램에서 자동으로 초기값을 넣어준다.
    ※ 숫자형 변수이면 0으로 처리 (정수형 : 0 , 실수형 : 0.0, 문자형 : 0, 논리형 : false)
         참조형 변수(String)이면 null로 처리

객체와 인스턴스와 클래스

 

  • 객체 : 현실에 존재하는 모든 사물들
  • 인스턴스(instance) : 클래스에 의해 메모리 상에 생성된 객체
    (특정 객체가 어떤 클래스의 객체인지를 관계 위주로 설명할 때 사용)
    ex) Animal a1 = new Animal( ); 에서 "a1은 객체", "a1은 Animal의 인스턴스"
  • 클래스 : 객체를 컴퓨터에서 구현하기 위해 필요한 설계도

이해하기 쉽게 클래스는 쿠키 틀로, 객체(인스턴스)는 쿠키로 예를 들 수 있다.

ex) 

<Animal 클래스의 인스턴스 a1 ~ a5>

Animal a1 = new Animal();
Animal a2 = new Animal();
Animal a3 = new Animal();
Animal a4 = new Animal();
Animal a5 = new Animal();

 


메소드

 

클래스 속에 존재하며 어떤 기능을 수행하는 명령 문장들

 

메소드를 정의하고 해당 기능이 필요할 때 메소드를 호출해서 사용함으로써

같은 명령을 수행할 때 반복적으로 코딩하지 않아도 된다.

 

 

ex)

public static void main(String[]args) {
	메소드 내용
}

public : 접근지정자

static : 접근지정자

void : 리턴타입 (반환형태)

main : 메소드명

 

 

접근지정자의 종류

 

  • public : 공개, 모든 클래스에서 접근 가능
  • private : 비공개, 멤버가 선언된 최상위 클래스 내에서만 접근 가능
  • 생략 : default와 같다. 멤버가 선언된 클래스가 속한 패키지 내에서 접근 가능
  • protected : 같은 패키지와 다른 패키지의 자식 클래스에서 접근 가능

  • static 변수선언 : 클래스 변수가 되어 클래스명.변수명 으로 호출
  • static 메소드선언 : 클래스 메소드가 되어 클래스명.메소드명 으로 호출

  • final 변수선언 : 변수가 상수로 동작, 초기화 이후 변경 불가
  • final 메소드선언 : 상속받은 하위 클래스에서 메소드 오버라이딩 불가

  • abstract 메소드선언 : 추상메소드, 하위클래스에서 구현
  • synchronized 메소드선언 : thread 동기화용 메소드

리턴타입(반환형태)

 

리턴할 값이 없을 때에는 void

리턴할 값이 있을 때에는 반드시 리턴되는 값의 타입을 명시해주어야 한다. ex) int, String....

메소드 실행 중에 return이 된다면, return 이후의 실행은 무시되고 메소드가 종료된다.

 


예제 1.

<객체 만들고 사용하기>

public class OOP01 {
	int number;
	
	public static void main(String[] args) {
		
		Apple a1 = new Apple();			//Apple클래스의 인스턴스 a1 만들기
		a1.print();				//a1 객체의 메소드 print() 사용하기
		
		System.out.println("===============");
		
		OOP01 oop01 = new OOP01(); 		//OOP01클래스의 인스턴스 oop01 만들기
		
		oop01.print2();
		
		int p3 = oop01.print3();
		System.out.println(p3);
		
		String p4 = oop01.print4();
		System.out.println(p4);
		
		double p5 = oop01.print5();
		System.out.println(p5);
        
		System.out.println("===============");
		
		System.out.println(oop01.number); 
		
		oop01.number = 1000;
		System.out.println(oop01.number); 
		
	}						//main메소드 종료

	void print2() {
		System.out.println("코딩일기");
	}
	
	int print3() {
		return 1;
	}
	
	String print4() {
		return "Hello";
	}
	
	double print5() {
		return 3.14;
	}
}							//OOP01클래스 종료

class Apple{						//Apple클래스 선언
	public void print() {				//print( ) 메소드 선언
		System.out.println("Apple클래스 코드");	//명령어 코드	
	}
}

[실행결과]

Apple클래스 코드
===============
코딩일기
1
Hello
3.14
===============
0
1000

예제 2.

<객체 만들고 사용하기 2>

package oop;

class NoteBook{
	String game;
	String power;
	int memory = 1024;
	
	void runGame() {
		System.out.println(game + "을 실행합니다.");
	}
	
	void power(String stats) {			//stats : 가상변수
		System.out.println("노트북 : " + stats);
	}
	
	int addMemory(int memory) {			//지역 가상 변수
		memory += this.memory;			//인스턴스 변수 (this = 현재 클래스에 있는)
		return memory;
	}
}

public class OOP02 {
	public static void main(String[] args) {
		
		NoteBook lg = new NoteBook();
		
		lg.power("On");
		lg.game = "diablo4";
		lg.runGame();
		int result = lg.addMemory(1024);
		System.out.println("1024를 추가하면 " + result + "가 됩니다.");
		
		NoteBook ss = new NoteBook();
		lg.memory += 2048;
		System.out.println(lg.memory);
		System.out.println(ss.memory);
		System.out.println(ss.game);
	}	
}

[실행결과]

노트북 : On
diablo4을 실행합니다.
1024를 추가하면 2048가 됩니다.
3072
1024
null

예제 3.

<다른 패키지의 객체 사용하기>

 

oop 패키지

package oop;

public class Apples {
	public static void main(String[] args) {
		
	Apple a1 = new Apple();		 	//현재 패키지 속의 Apple클래스의 인스턴스 a1
	apple.Apple a2 = new apple.Apple(); 	//apple패키지 속의 Apple클래스의 인스턴스 a2
	com.poseidon.apple.Apple a3 = new com.poseidon.apple.Apple();

	a1.print();
	a2.print();
	a3.print();

       /*Apple apple = new Apple(); 의 형태로 다른 패키지 속의 Apple클래스를 사용하고 싶다면 
       반드시 import를 해주어야 한다
	ex)apple.Apple 를 import 했을 경우 a1.print();의 출력값은
	apple패키지 속의 Apple 가 된다*/

 

oop 패키지

package oop;

public class Apple{	
	public void print() {	
		System.out.println("현재 패키지 속의 Apple클래스");
	}
}

 

apple 패키지

package apple;

public class Apple {
	public void print() {
		System.out.println("apple패키지 속의 Apple클래스");
	}
}

 

com.poseidon.apple 패키지

package com.poseidon.apple;

public class Apple {
	public void print() {
		System.out.println("com.poseidon.apple패키지 속의 Apple클래스");
	}
}

 

[Apples 실행결과]

현재 패키지 속의 Apple클래스
apple패키지 속의 Apple클래스
com.poseidon.apple패키지 속의 Apple클래스

예제 4.

<set, get>

class Animal{						//클래스 선언
	String name;
	int age;
	
	public void setName(String name) {		//저장 (set)
		this.name = name;
	}
	
	public String getName() {			//값 불러오기 (get)
		return this.name;
	}
}

public class OOP03 {

	public static void main(String[] args) {
		
		Animal r2d2 = new Animal();		//인스턴스 생성
		System.out.println(r2d2.name);		//기본값 null
		System.out.println(r2d2.age);		//기본값 0
		System.out.println("========");
		r2d2.name = "R2D2";
		
		Animal cat = new Animal();
		cat.name = "동수";
		
		Animal dog = new Animal();
		dog.name = "3PO";
		
		System.out.println(r2d2.name);
		System.out.println(cat.name);
		System.out.println(dog.name);
		
		cat.setName("수동");
		String name = cat.getName();
		System.out.println(name);
	}
}

[실행결과]

null
0
========
R2D2
동수
3PO
수동

'JAVA' 카테고리의 다른 글

오버라이드 (Override)  (0) 2021.07.18
스태틱 (Static)  (0) 2021.07.18
MessageFormat  (0) 2021.07.14
currentTimeMillis  (0) 2021.07.14
Date / Calendar / SimpleDateFormat  (0) 2021.07.14
728x90
문자열 형식 클래스

 

문자열에 데이터가 들어갈 자리를 표시해 주고, 프로그램이 실행되면서 동적으로 데이터를 삽입해 문자열을 완성시킬 수 있다.

import 필요

 

ex)

String var1 = "변수1";
String var2 = "변수2";
String var3 = "변수3";
String str = "첫번째 : {0}, 두번째 : {1}, 세번째 : {2}";
		
String result = MessageFormat.format(str, var1, var2, var3);
System.out.println(result);

[실행결과]

첫번째 : 변수1, 두번째 : 변수2, 세번째 : 변수3

 


예제 1.

<MessageFormat을 사용하지 않은 방법>

String name = "홍길동";
String id = "hong5000";
String tel = "010-5569-8102";
		
System.out.println("이름 : " + name + ", 아이디 : " + id + ", tel : " + tel);

[실행결과]

이름 : 홍길동, 아이디 : hong5000, tel : 010-5569-8102

예제 2.

<MessageFormat 사용하기>

String name = "홍길동";
String id = "hong5000";
String tel = "010-5569-8102";

String text = "이름 : {0}, 아이디 : {1}, tel : {2}";
String result = MessageFormat.format(text, name, id, tel);

System.out.println(result);
  • MessageFormat.format( )을 통해 문자열의 {0}, {1}, {2}... 에 값을 대입할 수 있다
  • MessageFormat.format( 문자열(text), 변수0(name), 변수1(id), 변수2(tel) );

[실행결과]

이름 : 홍길동, 아이디 : hong5000, tel : 010-5569-8102

예제 3.

<변수를 배열로 묶어 사용하기>

String text = "이름 : {0}, 아이디 : {1}, tel : {2}";
String[] arr = {"홍길동", "hong5000", "010-5569-8102"};
String result = MessageFormat.format(text, arr);
        
System.out.println(result);

[실행결과]

이름 : 홍길동, 아이디 : hong5000, tel : 010-5569-8102

'JAVA' 카테고리의 다른 글

스태틱 (Static)  (0) 2021.07.18
객체지향 프로그래밍 (Object Oriented Programming)  (0) 2021.07.14
currentTimeMillis  (0) 2021.07.14
Date / Calendar / SimpleDateFormat  (0) 2021.07.14
동적 가변 배열 (DynamicArray)  (0) 2021.07.13
728x90
System.currentTimeMillis( )

 

밀리세컨드로 나타낸 현재까지의 유닉스 시간

 

주로 프로그램의 구동시간을 측정할 때 사용된다.

 

ex)

long stratT = System.currentTimeMillis();

//// 측정할 코드 ////

long endT = System.currentTimeMillis();

System.out.println((endT - stratT) / 1000.0);		//구동시간 초단위로 출력

 

 

 

'JAVA' 카테고리의 다른 글

객체지향 프로그래밍 (Object Oriented Programming)  (0) 2021.07.14
MessageFormat  (0) 2021.07.14
Date / Calendar / SimpleDateFormat  (0) 2021.07.14
동적 가변 배열 (DynamicArray)  (0) 2021.07.13
배열 복사 (ArrayCopy)  (0) 2021.07.13
728x90

날짜 형식

Date

 

밀리초 단위로 현재시간을 나타내는 클래스

 

예전에 많이 쓰였지만 대부분의 기능이 중요도가 떨어져 주로 사용되지 않는다.

import 필요

 

ex)

Date date = new Date();				//현재시간 (요일, 월, 일, 시간 KST(한국표준시), 년도)
Date date2 = new Date(100, 7, 14);		//특정날짜의 월, 요일 (년도(1900+), 월(1+), 일(0+))
        
System.out.println(date);
System.out.println(date.getDay());		//요일 0 ~ 6 (일 ~ 토)
System.out.println(date.getHours());
System.out.println(date.getMinutes());
System.out.println(date.getSeconds());
System.out.println(date2);

[실행결과]

Wed Jul 14 11:58:33 KST 2021
Mon Aug 14 00:00:00 KST 2000
3
11
58
33


예제 1.

<남은 시간 계산>

  • 올해 크리스마스까지 며칠 남았는지 계산하고 몇요일인지 출력하기
Date date = new Date();					//현재 시간
Date xMas = new Date(121, 11, 25);			//올해 크리스마스

System.out.println(date.getTime());			//date까지의 유닉스 시간
System.out.println(xMas.getTime());			//xMas까지의 유닉스 시간
		
long xMasT = xMas.getTime() - date.getTime();		//올해 크리스마스까지의 시간 - 현재시간
System.out.println(xMasT); 
		
long result = xMasT / (1000 * 60 * 60 * 24);		//밀리세컨드를 일로 바꾸기 ( / (초 * 분 * 시 * 일))
		
System.out.println("이번 크리스마스까지 " + result + "일 남았습니다.");
		
int day = xMas.getDay();

switch (day) {
case 0:
	System.out.println("일요일 입니다.");
	break;

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;
			
default:
	System.out.println("토요일 입니다.");
	break;
	}
  • getTime( ) : 생성된 Date객체의 유닉스 시간을 가져오는 메소드
    반환값 : 밀리초(ms)
  • 유닉스 시간 : 
    1970년 1월 1일 00:00:00 협정세계시(UTC)로부터의 경과 시간을 초로 환산하여 정수로 나타낸 것

[실행결과]

1626232081987
1640358000000
14125918013
이번 크리스마스까지 163일 남았습니다.
토요일 입니다.


Calendar

 

달력 조작을 위한 메서드를 담은 추상 클래스

 

Calendar에 있는 메소드를 사용하기 위해서는 getInstance( ) 를 사용해야 한다.

import 필요

 

ex)

Calendar cal = Calendar.getInstance();
Date date = cal.getTime();

System.out.println(cal);					//cal 의 속성
System.out.println(date); 					//현재 시간

System.out.println(cal.get(Calendar.YEAR)); 			//년            
System.out.println(cal.get(Calendar.MONTH) + 1); 		//월 (월만 0부터 시작)
System.out.println(cal.get(Calendar.DATE)); 			//일
System.out.println(cal.get(Calendar.HOUR)); 			//시
System.out.println(cal.get(Calendar.MINUTE)); 			//분
System.out.println(cal.get(Calendar.SECOND)); 			//초

System.out.println("================");

System.out.println(cal.get(Calendar.DAY_OF_WEEK)); 		//요일 (일요일부터 1로 시작)
System.out.println(cal.get(Calendar.AM_PM));			//오전, 오후 (0, 1)	
System.out.println(cal.get(Calendar.HOUR_OF_DAY));		//24시간 표기		
System.out.println(cal.getActualMaximum(Calendar.DATE));	//이번 달의 마지막 날짜
System.out.println(cal.get(Calendar.DAY_OF_WEEK_IN_MONTH));	//이번 달의 몇번째 같은 요일인가
		
long longTime = cal.getTimeInMillis();				//밀리세컨드로 계산한 cal 까지의 유닉스 시간
System.out.println(longTime);

[실행결과]

java.util.GregorianCalendar[time=1626187455212,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Seoul",offset=32400000,dstSavings=0,useDaylight=false,transitions=30,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2021,MONTH=6,WEEK_OF_YEAR=29,WEEK_OF_MONTH=3,DAY_OF_MONTH=13,DAY_OF_YEAR=194,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=11,HOUR_OF_DAY=23,MINUTE=44,SECOND=15,MILLISECOND=212,ZONE_OFFSET=32400000,DST_OFFSET=0]
Tue Jul 13 23:44:15 KST 2021
2021
7
13
11
44
15
================
3
1
23
31
2
1626187455212


예제 1.

<나이 계산>

  • 출생년도 입력
  • 나이 = 현재 년도 - 입력받은 년도 + 1
Calendar cal = Calendar.getInstance();
Scanner sc = new Scanner(System.in);
								
System.out.println("출생 년도를 입력해주세요.");
				
int input = sc.nextInt();			
int result = cal.get(Calendar.YEAR) - input + 1;
				
System.out.println("당신의 나이는 " + result + "살 입니다.");
				
sc.close();

[실행결과]

출생 년도를 입력해주세요.
1995
당신의 나이는 27살 입니다.

예제 2.

<현재시간 출력>

  • 현재 시간을 출력하는 프로그램
  • 출력 예시 : 2021년 1월 1일 금요일 오전 11시 11분 11초 입니다.
Calendar cal = Calendar.getInstance(); 

int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int date = cal.get(Calendar.DATE);
int day_of_week = cal.get(Calendar.DAY_OF_WEEK);
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);
		
String weekstr = "";
switch (day_of_week) {
case 1:
	weekstr = "일";
	break;

case 2:
	weekstr = "월";
	break;
			
case 3:
	weekstr = "화";
	break;
			
case 4:
	weekstr = "수";
	break;
			
case 5:
	weekstr = "목";
	break;
			
case 6:
	weekstr = "금";
	break;
			
default:
	weekstr = "토";
	break;
}
		
String am_pmstr = am_pm == 0 ? "오전" : "오후";
		
System.out.println(year + "년 " + month + "월 " + date + "일 " + weekstr + "요일 " 
		+ am_pmstr + hour + "시 " + minute + "분 " + second + "초 입니다.");

[실행결과]

2021년 7월 14일 수요일 오전1시 8분 59초 입니다.


SimpleDateFormat

 

Date 클래스에서 정의한 객체를 자신이 원하는 방식으로 출력을 할 수 있게 해주는 클래스

 

필요한 부분만을 가져올 수 있기 때문에 매우 편리하게 사용할 수 있다.

import 필요

 

날짜 표현방식 표 :

출처 : https://bvc12.tistory.com/168


ex)

Date date = new Date();
		
SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 E요일 a hh시 mm분 ss초 "); 

System.out.println(sdf);
System.out.println(sdf.format(date));

[실행결과]

java.text.SimpleDateFormat@95fa6916
2021년 07월 14일 수요일 오전 12시 07분 33초 

 

 

 

 

'JAVA' 카테고리의 다른 글

MessageFormat  (0) 2021.07.14
currentTimeMillis  (0) 2021.07.14
동적 가변 배열 (DynamicArray)  (0) 2021.07.13
배열 복사 (ArrayCopy)  (0) 2021.07.13
isDigit  (0) 2021.07.11

+ Recent posts