2018. 11. 27. 22:42ㆍIT/JAVA
행운상을 뽑기위한 프로그램
import java.util.*; class Luck { public static void main(String[] args) { Random r = new Random(); int select=0; for(int i=0;i<100;i++) { select=8; while(select ==8) { select=r.nextInt(10)+1; } try { Thread.sleep(30); } catch (InterruptedException e) {} System.out.println(select); } System.out.print("행운의 번호는" + select); } } |
객체지향과 절차지향
절차지향 : 데이터구조와 그 데이터를 변화 시키는 알고리즘(함수)으로 구성(데이터자체가 주인공)
객체지향 : 객체들이 메시지를 통하여 통신함으로써 원하는 결과를 얻는다. 각 객체는 고유의 데이터와 데이터를 처리할 수 있는 메소드로 구성
객체는 데이터와 메소드를 가진다.
성적처리를 한다고 가정해보자.
객체지향프로그래밍에서는 각 학생마다 객체이다. 즉 자신의 성적 데이터와 성적을 출력하는 매소드가 각 객체마다 존재한다.
나 : 너 성적 모니?(김현중 학생 한사람에게 물어봤다.)
현중이 : 나 90점.(현중이 머릿속에 성적점수 데이터를 입이라는 메소드를 통해 나에게 메시지가 전달된다.)
동작보다는 객체, 논리보다는 자료를 바탕으로 구성되며 객체라는 시각에서 접근하는 프로그래밍기법을 말한다.
객체란? 좁은의미에서 클래스의 인스턴스를 의미한다.
클래스란 ? 객체를 만들기 위한 틀 또는 설계도라고 할 수 있다.
객체지향 프로그래밍은 추상화, 캡슐화, 상속, 다형성 이 있다.
객체의 구성
속성의 값을 나타내는 데이터
데이터를 변경하거나 조작할 수 있는 메서드
시계라는 객체를 만들어보자!!!
1.
시계
데이터 : 시, 분, 초, 월, 일, 년, 요일, 오전후
알람 시,분,초
메소드 : 현재시각을 보여준다, 현재시각을 설정한다, 알람을 설정한다, 알람을 울린다
2.
시계 - class MyClock {
데이터 : int hour, min, sec;
메소드 : void setTime(int h, int m, int s){
hour = h;
min = m;
sec = s;
return;
}
String getTime() {
return hour+"시“+min+"분”+sec+"초“;
}
클래스 정의하기
[접근 제어자] class 클래스 이름
{
멤버변수(필드);
생성자; // 메소드의 한 종류
멤버 메서드
}
생성자
new 연산자를 이용해 객체를 생성할 때 호출된다.
반환형이 없다.(매우 중요!!)
클래스 이름과 메소드 이름이 같다.
String s = new String("동양“);
이것이 생성자 이다.
class ClassExam { private String memberVar; // 맴버변수 public ClassExam() { System.out.println("객체를 생성할때 가장 먼저 호출되는것이 생성자이다."); System.out.println("그러므로 초기화 용도로 많이 사용된다."); System.out.println("여기서는 memberVar 값을 \"맴버변수\" 로 초기화 한다"); memberVar = "맴버변수"; } public void method() {} } class ClassTest { public static void main(String args[]) { ClassExam ce = new ClassExam(); } } |
접근제어자
public, private, protected, 접근제어자 안쓴 것(default) 4가지가 있다.
class A
{
int i;
void method()
{
i=3; // 같은 클래스 내에서 읽던지 쓰던지 하는 것이 access 된다. 지금은 default 접근자로써 접근한 것이다.
}
}
class B
{
void static void main(String a[])
{
A a = new A();
System.out.println(a.i); // 같은 패키지에 있기 때문에 access가 된다.
}
다른 패키지에 있는 클래스 C가 a.i를 access 하기 위해서는 class A가 public 접근자를 써야한다.
만약 private int i; 로 선언되면 자기 클래스 내에서만 사용 가능하다.
* public 과 private는 확실히 알아둬라
맴버 메서드
클래스 내부의 멤버 변수가 무엇이고 어떻게 사용되는지 몰라도 멤버 메서드를 사용하여 원하는 동작이나 결과를 얻을 수 있다.(은닉화, 캡슐화)
맴버변수는 private로 선언하여 은닉화와 캡슐화를 하고, 맴버메소드는 맴버 변수를 이용하여 반환한다.
왜 맴버변수를 private로 접근제어자를 넣느냐면 아래 이유와 같다.
class a { // 시계
int h,m,s;
void setHour(int x){
if(x>=0 && x<=24)
{
h=x;
}else{ System.out.println("입력다시하세요“);}
}
}
class O {
A a = new A();
a.h=1500; // 이런식으로 시계 범위를 벗어나는 값을 임의로 넣을수 있기 때문에 private로 맴버변수를 선언한 것이다.
setHour(1500); // 메소드를 통하여 안전한 데이터를 입력받도록 한다. 이 경우 입력 다시하라고 메시지가 나타난다.
}
패키지
소스관리에 편리하다.
Date 클래스는 특정 시점을 나타내기 위한 클래스.
import java.util.Date; public class Date0 { public static void main(String args[]){ System.out.println(new java.util.Date()); // 이미 java.util안에 있는 패키지 임포트했으므로 Date 클래스만 써줘도 된다. System.out.println(new Date().toString()); // 지금 만든 객체의 toString() 메소드를 실행해라 System.out.println(new Date().getTime()); // 1970년 1월 1일부터 흐른 시간 } } |
import java.util.*; class DateExam { public static void main(String args[]) { Date date = new Date(); long start = date.getTime(); // 지금 현재의 시간을 start 변수에 기록 try { Thread.sleep(1000); // 1000ms를 쉰다음 } catch (InterruptedException e) {} date = new Date(); // 새로운 객체만들어 date에 메모리 주소 기억 long stop = date.getTime(); // 지금 현재의 시간을 stop 변수에 기록 System.out.println(stop-start); // stop - start를 하였더니 얼마나 시간지났는지 알수 있음 } } |
java.util.Date를 이용한 게임
import java.util.*; import java.io.*; class DateGame { public static void main(String args[]) { Date date = new Date(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); long start=0, stop=0; start = date.getTime(); try { br.readLine(); date = new Date(); stop = date.getTime(); } catch (Exception o) {} System.out.println((stop-start)); } } |
이 프로그램을 객체지향적인 프로그래밍으로 바꿔보자.
import java.util.*; import java.io.*; class Game { public static void main(String args[]) { DateGame dg = new DateGame(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try { br.readLine(); System.out.println(dg.stop()+"초"); } catch (IOException o) {} } } class DateGame { private long start, stop; public DateGame() { start = new Date().getTime(); } public float stop() { stop = new Date().getTime(); return (float)(stop-start)/1000.0f; } } |
클래스 연습 1
책의 제목과 저자 정보를 저장하고 출력하는 자바프로그램을 만들어보자.
[첫번째방법]
클래스 이름: Book
제목, 저자 필드
메소드는 제목과 저자를 설정하는 메소드(setData),
제목과 저자를 출력하는 메소드(getData)
클래스 이름:Bookshelf
main메소드에서 두개의 Book객체를 생성하고 제목과 저자
를 설정한 후(setData이용), 제목과 저자를 출력(getData이
용)하세요.
class Book { private String subject; private String author; void setData(String s, String a) { subject = s; author = a; } void getData() { System.out.println("책제목 : "+ subject); System.out.println("저자 : " + author); System.out.println(); } } class Bookshelf { public static void main(String args[]) { Book faust = new Book(); Book java = new Book(); faust.setData("파우스트","괴테"); java.setData("자바","김교수"); faust.getData(); java.getData(); } } |
[두번째방법]
첫번째 방법에서 setData 대신에 생성자를 만들어 이용해 보아라.
import java.io.*; class Book { private String subject; private String author; Book() {} Book(String s, String a) { subject = s; author = a; } void setData(String s, String a) { subject = s; author = a; return; } void printData() { System.out.println("책제목 : "+ subject); System.out.println("저자 : " + author); System.out.println(); return; } String getData() { return "책제목 : "+ subject +", 저자 :" + author; } } class Bookshelf { public static void main(String args[]) { Book faust = new Book(); Book java = new Book(); Book wlan = new Book("무선랜","김태성"); // 생성자로 데이터 입력한경우 Book linux = new Book("서버구축","이재설"); faust.setData("파우스트","괴테"); // setData() 메소드를 이용해 데이터를 입력한 경우 java.setData("자바","김교수"); faust.printData(); // 반환값이 없는 메소드 호출 java.printData(); System.out.println("==================================="); System.out.println(wlan.getData()); // 반환값이 String값인경우 System.out.println(linux.getData()); } } |
특강
/* * * 선택정렬 : 전체중 가장 작은수를 선택 * 그 수와 첫번째 수와 자리 교환(반복) * * 한 단계를 수행하고 어떻게 하면 일반적으로 사용할 수 있게 하는가!!! * */ class SelectionSort { public static void main(String[] args) { int num[] = {3,24,1,55,17,43,5}; System.out.println("정렬전"); for(int i=0;i<num.length;i++) { System.out.print(num[i]+" "); } System.out.println(); int min=0, temp=0, start=0; // 가장 작은 값의 인덱스 System.out.println("\n정렬후"); for(start=0;start<num.length-1;start++) { min=start; for(int i=start+1;i<num.length;i++) { if(num[min] > num[i]) { min = i; } } temp=num[start]; num[start]=num[min]; num[min]=temp; for(int i=0;i<num.length;i++) // 첫단계에서 끝단계까지 정렬상태 출력 { System.out.print(num[i]+" "); } System.out.println(); } } } |
'IT > JAVA' 카테고리의 다른 글
[자바기초] 중간고사: 문제 해결 능력 기르기 (0) | 2021.03.22 |
---|---|
[자바기초] 객체 설계하기 연습문제 (0) | 2021.03.21 |
자바 7강 - 객체 배열, 러시안 루울렛, 상속, 서브 클래스 (0) | 2018.11.27 |
자바 5강 - switch, for, 배열 (0) | 2018.11.27 |
자바4강 - if문, while문, 비교연산자 (0) | 2018.11.11 |
자바3강 - 기초문법 (0) | 2018.11.10 |
자바 2강 - 접근제한자, 데이터형 (0) | 2018.11.10 |
자바 1강 - '안녕하세요?' 출력하기 (0) | 2018.11.10 |