728x90
★ 클래스(Class)
- 코드의 집합
- 같은 목적을 가지는 코드의 집합
- 데이터 집합
- 데이터 구조 명확
- 구조
- 클래스 객체명 = 객체생성연산자 생성자()
- 클래스는 : 붕어빵 틀, 설계도, 사람, 강아지
- 객체 : 붕어빵, 제품, 홍길동, 포메라이언
- 멤버 접근 연산자 (.)
- p1.x = 100;
- p1.y = 200;
- 클래스 선언하기
- class 클래스명 {
- 클래스 멤버 선언하기
- public int a;
- public int b;
- ex)
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);
★ 자바 클래스 파일(소스 파일)을 만드는 규칙
- 1. 파일(*.java)의 이름과 public 클래스의 이름이 반드시 동일해야 한다.
- 2. 1개의 파일안에 여러개의 클래스를 정의할 수 있다.
- 단, 이 클래스들 중 public 키워드는 딱 1개의 클래스만 가질 수 있다.
- 3. 1개의 파일안에 1개 클래스만 선언한다.
★ 접근 지정자(제어자), Access Modifier
- 클래스 멤버 변수에 붙여서 사용한다.
- 클래스 멤버 메소드에 붙여서 사용한다.
- 클래스 자체에 붙여서 사용한다.
- 멤버의 노출 수위를 조절하는 역할 > 외부에 공개 유무 조절하는 역할
- 어디를 경계(**)로 공개할지 말지를 결정하는지 ? > 클래스가 경계선 역할
- 접근 지정자 종류
- public
- private
- protected
- default
- 보통, 클래스에서 변수 선언을 할때, private 변수 선언을 많이 하는데, 이때 해당 변수에 대한 getter, setter을 해줘야함.
- getter : 읽기
- setter : 쓰기
- ex)
public class Book {
private String title;
public String getTitle() {
return title;
}
public void setTitle() {
this.title = title;
★ 클래스 예제 1
- 요구사항 : Book 클래스를 설계하시오.
- 조건
- Book 객체의 정보
- 제목, 가격, 저자, 출판사, 발행년도, ISBN, 페이지수
- 모든 멤버 변수의 접근 지정자는 private으로 한다.
- 멤버 접근을 위한 Setter와 Getter를 정의한다.
- 제목 : 읽기/쓰기, 최대 50자 이내(한글, 영어, 숫자, 공백)
- 가격 : 읽기/쓰기, 0 ~ 1000000원
- 저자 : 읽기/쓰기, 제한 없음
- 페이지수 : 읽기/쓰기, 1~무제한
- 출판사 : 쓰기 전용
- 발행년도 : 읽기 전용(2019년)
- ISBN : 읽기/쓰기
- Book 객체의 모든 정보를 문자열로 반환하는 메소드를 구현한다.
- String info()
- 클래스가 잘 설계되었는지 객체를 가지고 사용해본다.
- 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
- 요구사항 : Note 클래스를 설계하시오.
- 조건:
- Note 객체의 정보
- 크기, 표지 색상, 페이지수, 소유자이름, 가격
- 모든 멤버 변수의 접근 지정자는 private으로 한다.
- 멤버 접근을 위한 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 객체의 정보를 확인하기 위한 메소드를 구현한다.
- String info()
- Note가 잘 설계되었는지 객체를 가지고 사용해본다.
- 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;
}
}
- 실행결과
728x90
'자바' 카테고리의 다른 글
JAVA STEP 26. 클래스&생성자 예제 (0) | 2023.02.17 |
---|---|
JAVA STEP 25. CLASS&Constuctor (0) | 2023.02.17 |
JAVA STEP 23. String 예제 모음 (0) | 2023.02.15 |
JAVA STEP 22. String 문자열 (0) | 2023.02.15 |
JAVA STEP 21. Array 예제 모음 (0) | 2023.02.14 |