★ 클래스
- 일련의 코드
- 같은 목적을 가진 일련의 코드
- 기록
- 데이터 구조 지우기
- 구조
- 클래스 객체 이름 = 객체 생성 연산자 constructor()
- 수업: 붕어빵 양식, 설계도, 사람, 강아지
- 대상: 붕어빵, 제품, 홍길동, 포메라니안
- 멤버 액세스 연산자(.)
- p1.x = 100;
- p1.y = 200;
- 수업을 설명하다
- 클래스 클래스 이름 {
- 반원들에게 설명하다
- 공개 정수;
- 공공 int b;
- 전)
Class Size {
public String name;
public int width;
public int height;
★ 수업 예시
ex1) 이름과 나이 입력 및 출력
- 소스 코드
User u1 = new User();
u1.name = "홍길동";
u1.hello();
User u2 = new User();
u2.name = "아무개";
u2.age = 25;
u2.hello()
class User{
//멤버 선언
//1. 변수
//2. 메소드
public String name;
public int age;
public void hello() {
System.out.printf("안녕하세요. 저는 %s입니다. 그리고 제 나이는 %d살입니다. \n", name, age);
★ Java 클래스 파일(소스 파일) 생성 규칙
- 1. 파일명(*.java)과 공개 클래스명이 동일해야 합니다.
- 2. 하나의 파일에 여러 클래스를 정의할 수 있습니다.
- 그러나 이러한 클래스 중 하나의 클래스만 public 키워드를 가질 수 있습니다.
- 3. 파일에서 하나의 클래스만 선언하십시오.
★ 액세스 지정자(컨트롤러), 액세스 수정자
- 클래스 멤버 변수에 붙여서 사용합니다.
- 클래스 멤버 메서드에 붙여서 사용합니다.
- 클래스 자체에 연결하여 사용하십시오.
- 회원의 공개 범위를 통제하는 역할 > 외부에 대한 공개 여부를 통제하는 역할
- (**)를 경계로 공개할지 여부는 어디에서 결정합니까? > 클래스가 경계선 역할을 함
- 액세스 식별자 유형
- 공공의
- 사적인
- 보호
- 기본
- 일반적으로 클래스에서 변수를 선언할 때 많은 개인 변수 선언이 이루어집니다.
- 게터: 읽기
- 세터: 쓰기
- 전)
public class Book {
private String title;
public String getTitle() {
return title;
}
public void setTitle() {
this.title = title;
★ 클래스 예제 1
- 요구 사항: 책 수업을 디자인하십시오.
- 상태
- 책 개체의 정보
- 제목, 가격, 저자, 발행인, 출판 연도, ISBN, 페이지 수
- 모든 멤버 변수에는 액세스 식별자가 비공개로 설정되어 있습니다.
- 멤버 액세스를 위한 setter 및 getter를 정의합니다.
- 제목: 읽기/쓰기, 최대 50자(한글, 영문, 숫자, 공백)
- 가격: 읽기/쓰기, 0 ~ 1,000,000원
- 작성자: 읽기/쓰기, 제한 없음
- 페이지 수: 읽기/쓰기, 1~무제한
- 출판사 : 그냥 쓰세요
- 출시 연도: 읽기 전용(2019)
- ISBN: 읽기/쓰기
- Book 개체의 모든 정보를 문자열로 반환하는 메서드를 구현합니다.
- 문자열 정보()
- 개체를 사용하여 클래스가 잘 설계되었는지 확인하십시오.
- 책 개체 만들기
- 멤버 값 + 출력 값 삽입
- 검증 테스트
- 소스 코드
package com.test.question;
public class Q0092 {
public static void main(String() args) {
Q0092_Book b1 = new Q0092_Book();
b1.setTitle("자바의 정석");
b1.setPrice(45000);
b1.setAuthor("남궁성");
b1.setPublisher("도우출판");
b1.setIsbn("8994492038");
b1.setPage(1022);
System.out.println(b1.info());
}
}
package com.test.question;
import java.util.Arrays;
public class Q0092_Book {
private String title;
private int price;
private String author;
private String publisher;
private String pubYear = "2019";
private String isbn;
private int page;
//get이 읽기 set이 쓰기
public String getTitle() {
return title;
}
public void setTitle(String title) {
if(title.length()>50) {
return;
}
for(int i=0; i<title.length(); i++) {
char search = title.charAt(i);
if((search<'가'||search>'힣')&&(search<'A'||search>'Z')&&(search<'a'||search>'z')&&(search<'0'||search>'9')&&(search != ' ')) {
return;
}
}
this.title = title;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
if(price>=0 && price<=1000000) {
this.price = price;
}else {
return;
}
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getPubYear() {
return pubYear;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
public int getPage() {
return page;
}
public void setPage(int page) {
if(page >= 1) {
this.page = page; }
return;
}
public String info() {
String () result = new String (7);
String result2 = "";
result(0) = "제목 : " + this.title;
result(1) = "가격 : " + Integer.toString(this.price) + "원";
result(2) = "저자 : " + this.author;
result(3) = "출판사 : " + this.publisher;
result(4) = "발행년도 : " + this.pubYear+"년";
result(5) = "ISBN : " + this.isbn;
result(6) = "페이지 : " + Integer.toString(this.page)+"장";
for(int i=0; i<result.length; i++) {
result2 += result(i)+"\r\n";
}
return result2;
}
}
- 실행 결과

★ 수업 예시 2
- 요구 사항: 노트 클래스를 설계합니다.
- 상태:
- 객체 정보 관찰
- 사이즈, 표지색상, 페이지수, 소유자명, 가격
- 모든 멤버 변수에는 액세스 식별자가 비공개로 설정되어 있습니다.
- 멤버 액세스를 위한 setter 및 getter를 정의합니다.
- 크기: 쓰기 전용, A3, A4, A5, B3, B4, B5
- 표지 색상: 쓰기 전용, 검정, 흰색, 노란색, 파란색
- 페이지 수: 쓰기 전용, 10~200페이지 이내
- (+) 10~50(얇음), 51~100(보통), 101~200(두꺼움)
- 소유자 이름: 한글 2~5자 이내로만 작성합니다. 필수 값
- 가격 : setter, getter가 구현되지 않았습니다. 나중에 info() 메서드에서 사용하기 위해 다음을 사용합니다.
- (+) 기본노트 : A5 + 화이트 + 10장 = 가격(500원)
- (+) 사이즈 변경: A3(+400원), A4(+200원), B3(+500원), B4(+300원), B5(+100원)
- (+) 컬러체인지 : 블랙(+100원), 옐로우(+200원), 블루(+200원)
- (+) 페이지 번호 변경: x 페이지당 10원 추가
- Note 개체 정보의 유효성을 검사하는 메서드를 구현합니다.
- 문자열 정보()
- 노트가 잘 디자인되었는지 확인하기 위해 개체를 사용해 보십시오.
- 노트 객체 생성 → 값 삽입 + 값 출력 등
- 소스 코드
package com.test.question;
public class Q0093 {
public static void main(String() args) {
Q0093_Note note = new Q0093_Note();
note.setSize("B4");
note.setColor("노란색");
note.setPage(25);
note.setOwner("홍길동");
System.out.println(note.info());
Q0093_Note note2 = new Q0093_Note();
note2.setSize("A4");
note2.setColor("검정색");
note2.setPage(100);
System.out.println(note2.info());
Q0093_Note note3 = new Q0093_Note();
note3.setSize("A4");
note3.setColor("검정색");
note3.setPage(100);
note3.setOwner("김대환");
System.out.println(note3.info());
}
}
package com.test.question;
public class Q0093_Note {
private String size;
private String color;
private int page;
private String owner;
private int price;
int sum = 0;
//*****************사이즈
public String getSize() {
return size;
}
public void setSize(String size) {
if(size.equals("A3")||size.equals("A4")||size.equals("A5")
||size.equals("B3")||size.equals("B4")||size.equals("B5")) {
this.size = size;
}else {
System.out.println("사이즈를 잘 못 입력하셨습니다.");
}
}
//*****************색상
public void setColor(String color) {
if(color.equals("검정색")||color.equals("흰색")||color.equals("노란색")||color.equals("파란색")) {
this.color = color;
}else {
System.out.println("색상을 잘 못 입력하셨습니다.");
}
}
//*****************페이지
public void setPage(int page) {
if(page>=10&&page<200) {
this.page = page;
}else {
System.out.println("페이지를 잘 못 입력하셨습니다.");
}
}
//*****************소유자이름
public void setOwner(String owner) {
if(owner.length()>=2&&owner.length()<5) {
for(int i=0; i<owner.length(); i++) {
char search = owner.charAt(i);
if(search>='가'&&search<='힣') {
sum++;
}
}
if(sum==owner.length()) {
this.owner = owner;
}else {
System.out.println("이름을 잘 못 입력하셨습니다.");
}
}else {
System.out.println("이름을 잘 못 입력하셨습니다.");
}
}
public String info() {
this.price = 500;
if(this.size.equals("A3")) {
price += 400;
}else if(this.size.equals("A4")) {
price += 200;
}else if(this.size.equals("B3")) {
price += 500;
}else if(this.size.equals("B4")) {
price += 300;
}else if(this.size.equals("B5")) {
price += 100;
}
if(this.color.equals("검정색")) {
price += 100;
}else if(this.color.equals("노란색")) {
price += 200;
}else if(this.color.equals("파란색")) {
price += 200;
}
if(this.page>10) {
price += (this.page-10)*10;
}
String tempPage = "";
if(this.page >=10 && this.page <=50) {
tempPage += "얇은";
}else if(this.page >50 && this.page <=100) {
tempPage += "보통";
}else if(this.page >100 && this.page <=200) {
tempPage += "두꺼운";
}
String result = "";
result += "■■■■■■ 노트 정보 ■■■■■■\n";
if(this.owner != null) {
result += String.format("소유자 : %s\n", this.owner);
result += String.format("특성 : %s %s %s노트 \n", this.color, tempPage, this.size);
result += String.format("가격 : %,d원\n", this.price);
} else {
result += "주인 없는 노트\n";
}
result += "■■■■■■■■■■■■■■■■■■■■■■\n";
return result;
}
}
- 실행 결과
