JAVA STEP 24.

★ 클래스

  • 일련의 코드
  • 같은 목적을 가진 일련의 코드
  • 기록
  • 데이터 구조 지우기
  • 구조
    • 클래스 객체 이름 = 객체 생성 연산자 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;
		
	}
	
	
}
  • 실행 결과


예제 1의 실행 결과

★ 수업 예시 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;
	}
	
	
	
}
  • 실행 결과


예제 2의 실행 결과