자바

JAVA STEP 24. CLASS

2023. 2. 16. 18:13
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;
		
	}
	
	
}
  • 실행결과

 

예제 1 실행결과

 

★ 클래스 예제 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;
	}
	
	
	
}
  • 실행결과

예제 2 실행결과

 

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
'자바' 카테고리의 다른 글
  • JAVA STEP 26. 클래스&생성자 예제
  • JAVA STEP 25. CLASS&Constuctor
  • JAVA STEP 23. String 예제 모음
  • JAVA STEP 22. String 문자열
IT의 큰손
IT의 큰손
IT계의 큰손이 되고 싶은 개린이의 Log 일지
Developer Story HouseIT계의 큰손이 되고 싶은 개린이의 Log 일지
IT의 큰손
Developer Story House
IT의 큰손
전체
오늘
어제
  • 분류 전체보기 (457)
    • 정보처리기사 필기 (18)
    • 정보처리기사 실기 (12)
    • 정보처리기사 통합 QUIZ (12)
    • 빅데이터 (11)
    • 안드로이드 (11)
    • 웹페이지 (108)
    • 자바 (49)
    • SQLD (3)
    • 백준 알고리즘 (76)
    • 데이터베이스 (41)
    • 깃허브 (2)
    • Library (14)
    • Server (31)
    • 크롤링&스크래핑 (3)
    • Spring (23)
    • Vue.js (13)
    • React (27)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Developer Stroy House

인기 글

태그

  • 정보보안전문가
  • it
  • 웹페이지
  • 자바
  • 개발자
  • 앱개발자
  • html
  • jquery
  • jsp
  • 웹개발자
  • IT개발자
  • java
  • IT자격증
  • JavaScript
  • React
  • DBA
  • 코딩테스트
  • 정보처리기사필기
  • ajax
  • DB
  • 정보처리기사
  • 알고리즘
  • 웹개발
  • 개발블로그
  • 백엔드
  • 프론트엔드
  • css
  • 백준
  • 데이터베이스
  • IT자격증공부

최근 댓글

최근 글

Designed By hELLO
IT의 큰손
JAVA STEP 24. CLASS
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.