[중첩 클래스 및 상속, 다형성, 추상화, 인터페이스 ] 클래스 기초 1
자바1. 클래스 기초 1
클래스란?
-> 학교에 최동수, 김순호등 많은 학생들이 있음
- 이때, 공통으로 묶을 수 있는 것은 학생이고, 이것을 클래스라고 함
-> 한마디로 일반화된 속성과 메소드로 객체를 기술한 것을 클래스라고 함
2) 클래스의 기본 구성
형식)
[접근제한자] [ 지정예약어 ] CLASS (예약어) CLASS이름(사용자 명칭)
extends클래스 implements인터페이스 { //상속관계도
멤버필드 멤버메소드 생성자 중첩클래스} //4가지가 올 수 있음
* 클래스 밖에 쓰일 수 있는 것은 package, import,(한 글자 입력 받을 때, throws IOException) 또 다른 클래스
접근제한자 , 지정예약어 생략가능
import
클래스 안에 필드 : 멤버 필드
car : 맴버 메소드
2) 클래스의 기본 구성 (4가지)
포함 멤버
[1] Field
데이터 저장 공간 (멤버변수 - 클래스 안에 있는 멤버)
참고) 메소드 안에서 선언한 변수는 지역 변수라고 함
[2] Method
특정 행위의 기술 영역(멤버메소드)
[3] Construct
객체 생성 및 초기화를 시켜주는 생성자 메소드
[4] Nested Class
중첩클래스
3) 객체(Objext)
객체란?(쓸 수 있는 상태)
-> 정수, 실수 또는 문자 등과 같이 단순한 데이터나 자동차, 비행기 등과 같은 복잡한 사물뿐만 아니라
기업에의 공헌도, 이성간의 사랑 등의 추상적 개념에 이르기까지,
인간이 하나의 개념으로 파악하는 모든 것들을 일컫는 것으로 일반적으로 인간에게 인지되는 개념적인 한 단위를 의미함
-1) 객체는 항상 클래스로부터 생성됨
즉, 클래스는 객체를 생성하는 형판 (template)
-2) 클래스는 두 개의 구성요소 (member)인 자료구조(필드)와 연산 (메소드)을 가짐
-3) 클래스로부터 생성된 객체를 instance(인스턴스)라 함
즉, 객체 =instance
-4) 정보처리의 주체는 클래스가 아니라 객체임
-5) 객체지향 프로그래밍의 시작은 클래스의 생성임
3) 객체(Object)
프로그래밍에서의 객체란?
사애와 행위의 집합체이다.. 즉 속성(필드, 데이터)와 메소드(함수, 행위)의 집합체임
속성(필드)
객체의 정적 특성으로 객체가 가지고 있는 정보를 보관하는 기억장소로 사용되는 데이터 영역
메소드 (기능)
객체의 동적 특성으로서 객체의 데이터를 엑세스하거나 또는 객체가 가지고 있는 속성을 변경하는 일을 함
int a[] ; a=new int[5]; int a [] = new int[5];
4) 클래스와 객체
객체지향 프로그램은 3단계로 진행됨
-> 자동차 객체를 예를 들어 설명하면 추상화 작업은 프로그램에 적합하게 자동차 객체를 설계 하는 것임
new 연산자가 힙 영역에 메모리 할당 할당 후
되돌려 주는 주소는 참조 변수에 저장됨
car01 참조 변수 시제자료->힙 Car ( ); - > 생성자
참조 변수와 객체 -> 힙에 저장
닷(.) 멤버 참조 연산자로 필드에 접근
5) 클래스 사용법
객체 생성
사람으로썬 같으나 속성은 다 다르다.
6) 생성자
생성자 정의
생성자 : 클래스로부터 객체가 생성될 때 초기화 과정을 기술하는 특수한 메소드
-클래스명과 동일한 메소드
-결과형 리턴값이 없음
-객체 생성 시 반드시 하나의 생성자 호출
-생성자를 없으면 자동으로 default생성자가 생김 ->JVM(자바 가상 기계) 이 만든다
-생성자 오버로딩 할 수 있음
-멤버 필드 값 초기화를 위해 만든 메소드
-객체를 생성할 때만 사용이 가능
객체 생성하기
class Person{
String name;
int age;
}
public class Exam_01{
public static void main(String [] args){
Person p1 = new Person();
p1.name="태연";
p1.age=25;
}
}
생상자의 오버로딩
7) this, this메소드
* 객체를 선언한 후, 객체 자신을 의미
*this 뒤에 참조연산자(.)를 붙여 멤버 접근 가능
*this(매개변수)를 하면 객체가 가지고 있는 생성자 호출
*this() 사용시 반드시 생성자의 첫 번째 줄에 써야 함
8) 객체의 사용
객체참조변수는 해당 객체의 멤버변수와 메소드를 사용할 수 있음
사용법
객체참조변수.메소드이름();
객체참조변수.멤버변수이름;
9) 객체로 변환하기
기존에 만들었던 방 관리 프로그램을 클래스로 변환하여 만들어보자
package ch06;
import java.io.IOException;
import java.util.Scanner;
class Room{
boolean room[];
Scanner sc;
int roomsu;
Room(){
sc = new Scanner(System.in);
System.out.print("방의 갯수를 입력:");
roomsu = sc.nextInt();
room = new boolean[roomsu];
}
Room(int roomsu){
room = new boolean[roomsu];
//배열은 맨처음 선언해주면 boolean의 초기값은 false로 만들어진다.
sc = new Scanner(System.in);
this.roomsu = roomsu;
}
public void input() {
int roomNumber;
do {
System.out.print("입실하실 방의 번호:");
roomNumber = sc.nextInt();
}while(roomNumber<1 || roomNumber>roomsu);
//if (roomNumber<1 || roomNumber>roomsu) input();
if(room[roomNumber-1]) {
System.out.println(roomNumber+"호실은 사용중입니다");
}else {
System.out.println(roomNumber+"호실에 입실하셨습니다");
room[roomNumber-1] = true;
}
}
public void output() {
int roomNumber;
do {
System.out.print("퇴실하실 방의 번호:");
roomNumber = sc.nextInt();
}while(roomNumber<1 || roomNumber>roomsu);
//if (roomNumber<1 || roomNumber>roomsu) input();
if(!room[roomNumber-1]) {
System.out.println(roomNumber+"호실은 빈 방입니다");
}else {
System.out.println(roomNumber+"호실에 퇴실하셨습니다");
room[roomNumber-1] = false;
}
}
public void view() {
for(int i =0 ; i<roomsu; ++i) {
if(room[i]) {
System.out.println(i+1+"호실은 사용중입니다");
}else {
System.out.println(i+1+"호실은 빈방입니다");
}
}
}
public void exit() {
System.out.print("프로그램을 종료합니다");
System.exit(0); //프로그램을 영구히 종료합니다.
}
}
public class Exam_01 {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
Room room = new Room();
while(true) {
System.out.print("1.입실 2.퇴실 3.방보기 4.종료:");
int select = System.in.read()-48; // 1,\r, \n //0에 대한 아스키코드값 48
sc.nextLine(); //엔터키가 들어올때까지 입력을 받겠다.
switch(select) {
case 1:
room.input(); break;
case 2:
room.output(); break;
case 3:
room.view(); break;
case 4:
room.exit(); break;
default :
System.out.println("잘못 입력하셨습니다");
}
}
}
}
10) 클래스 배열
클래스 배열 만들기
클래스를 배열로 만들 때는 먼저 배열을 만들어 준 후, 각각의 배열마다 객체를 선언해 줘야 함
11) 클래스 배열 문제 풀이
성적관리 프로그램을 클래스로 바꾸어 만들어 보자
package ch06;
import java.util.Scanner;
class SungJuk{
String name;
int kor,eng,mat;
int tot,rank;
public void sumTot() {
tot = kor+ eng+mat;
}
public void disp() {
System.out.print(name+"\t");
System.out.print(kor+"\t");
System.out.print(eng+"\t");
System.out.print(mat+"\t");
System.out.print(tot+"\t");
System.out.print(rank+"\t");
}
}
public class Exam_02 {
public static void main(String[]args) {
System.out.print("인원수를 입력:");
Scanner sc = new Scanner(System.in);
int inwon = sc.nextInt();
SungJuk sj[] = new SungJuk[inwon];
for (int i=0 ; i<inwon ; i++) {
sj[i] = new SungJuk();
System.out.print("이름을 입력:");
sj[i].name = sc.next();
System.out.print("국어점수를 입력:");
sj[i].kor = sc.nextInt();
System.out.print("영어점수를 입력:");
sj[i].eng = sc.nextInt();
System.out.print("수학점수를 입력:");
sj[i].mat = sc.nextInt();
sj[i].sumTot();
sj[i].rank=1;
}
for(int i =0 ; i<inwon ; i++) {
for (int j=0 ; j<inwon ; j++) {
if (sj[i].tot <sj[j].tot)sj[i].rank++;
}
}
System.out.print("이름\t국어\t영어\t수학\t총점\t순위\n");
for(int i=0 ; i<inwon ; i++) {
sj[i].disp();
}
}
}
'자바' 카테고리의 다른 글
| [중첩클래스 및 상속, 다형성, 추상화, 인터페이스] 중첩클래스의 개요 및 종류 (0) | 2018.09.17 |
|---|---|
| [중첩클래스 및 상속, 다형성, 추상화, 인터페이스] 클래스기초2 (0) | 2018.09.12 |
| [배열과 메소드] 메소드의 개요 (0) | 2018.09.10 |
| [배열과 메소드]배열의 개요 (0) | 2018.09.10 |
| 반복문 (0) | 2018.09.10 |