본문 바로가기
Challenge

5주차 과제: 클래스

by Daisy :) 2020. 12. 19.
반응형

클래스의 정의 → 객체를 정의해 놓은 것(클래스는 속성과 기능으로 정의되어 있습니다.) 

클래스의 용도 → 객체를 생성하는데 사용

 

1. 클래스 정의 하는 방법

클래스 작성 규칙

 1) 하나 이상의 문자로 이루어져야 합니다.

 2) 첫 번째 글자에는 숫자가 올 수 없습니다.

 3) $,_ 외에는 특수문자 사용불가 ($port (o), c@r(x))

 4) 자바 명령어, 키워드는 사용할 수 없습니다.(while, for, int 등 사용불가)

 5) 이름은 대소문자를 구분합니다.(보통, 첫번째 글자는 대문자로 작성)

 

보통 클래스의 이름은 대문자로 시작되도록 약속되어있으며, 클래스이름.java파일로 생성이 됩니다.

public class Fruit{
}

여기서는 Fruit라는 클래스를 등록하고, {}안에 클래스 소속인 메서드나 변수를 담아주게됩니다.

public class Fruit { // public class의 이름은 파일명과 동일하고 대문자로 시작합니다. 

	public static void main(String[] args) {
		
	}
}

class Apple{ //public class는 한개 파일에 하나만 사용이 가능합니다. 
	String color;
	int sugarContent;
	int count;
}

 

저는 우선 Fruit라는 public class를 생성하였고, 이 클래스명은 파일명과 동일하며 대문자로 시작합니다. 

그리고 fruit class 범위 밖에 Apple class를 생성합니다. 

 

2. 객체 만드는 방법 (new 키워드 이해하기)

클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화(instantiate)라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스터스(instance)라고 합니다. 

 

클래스 -----------인스턴스화-------------> 인스턴스(객체)

 

public class Fruit { // public class의 이름은 파일명과 동일하고 대문자로 시작합니다. 

	public static void main(String[] args) {
		
		Apple greenApple = new Apple();
		
		Apple redApple = new Apple();

	}
}

class Apple{ //public class는 한개 파일에 하나만 사용이 가능합니다. 
	String color;
	int sugarContent;
	int count;
}

Apple class를 이용해서 greenApple, redApple이라는 변수에 Apple객체를 담았습니다. 

 

Apple greenApple = new Apple(); 

Apple -> 타입, greenApple -> 변수 , new Apple() -> new라는 키워드로 Apple객체를 생성

 

3. 메소드 정의하는 방법

메서드는 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것 입니다. 

모든 메서드는 기능수행을 하며, 프로그램이 어떻게 동작할 지를 정의하는 것을 메서드라고 합니다. 

 

반환타입 메서드명(){
	// 기능부
} 

메서드의 가장 기본이 되는 형태는 위의 모양 입니다. 

public class Fruit { // public class의 이름은 파일명과 동일하고 대문자로 시작합니다. 

	public static void main(String[] args) {
		
		Apple greenApple = new Apple();
		
		greenApple.color="풋사과";
		greenApple.sugarContent = 10;
		greenApple.count = 4;
		
		greenApple.print(); 

		Apple redApple = new Apple();
		
		redApple.print();

	}
}

class Apple{ //public class는 한개 파일에 하나만 사용이 가능합니다. 
	String color;
	int sugarContent;
	int count;
	
	void print() {
		System.out.println("이 사과의 종류는 " + this.color + "이고 당도는 "+ this.sugarContent +"이며," + this.count + "개가 있습니다.");
	}
	
}

print 메서드에 출력이 되는 코드는 작성하였고, 위의 코드는 실행해보면 아래와 같이 출력이 됩니다. 

이 사과의 종류는 풋사과이고 당도는 10이며,4개가 있습니다.
이 사과의 종류는 null이고 당도는 0이며,0개가 있습니다.

 

greenApple은 값을 초기화 하였기 때문에 사과의 종류와 당도, 갯수가 출력되고 redApple은 값을 초기화 하지않았기때문에 String 기본값인 null과 int 기본값인 0으로 출력되었습니다. 

 

 

4. 생성자 정의하는 방법

위와 같이 코드를 짜게되면 객체의 속성값이 변경이 쉬워지게 됩니다.

이러한 현상을 막기위해서 변수의 접근제어자를 private로 명시하고, Apple생성자의 파라미터를 정의하여 객체생성시 초기화 해줍니다. 

package chllenge5;

public class Fruit {  

	public static void main(String[] args) {
		
		Apple greenApple = new Apple("풋사과", 3, 5);
		
		greenApple.print(); 

		Apple redApple = new Apple("빨간사과" , 50,-6);
		
		redApple.print();

	}
}

class Apple{ 
	private String color;
	private int sugarContent;
	private int count;
	
	public Apple(String color, int sugarContent, int count) {
		this.color = color;
		this.sugarContent = sugarContent;
		this.count = count;
		
		if(count < 0) { this.count = 0; }
		
		if(sugarContent > 30) {
			this.sugarContent = 30;
		}else if(sugarContent <0){
			this.sugarContent = 0;
		}
		
	}
	
	void print() {
		System.out.println("이 사과의 종류는 " + this.color + "이고 당도는 "+ this.sugarContent +"이며," + this.count + "개가 있습니다.");
	}
	
}

 

또한, 생성자를 통해 오입력되는 데이터에 대한 보정작업을 하였고, 위의 코드는 실행해보면 아래와 같이 출력이 됩니다.

이 사과의 종류는 풋사과이고 당도는 3이며,5개가 있습니다.
이 사과의 종류는 빨간사과이고 당도는 30이며,0개가 있습니다.

 

5. this 키워드 이해하기

greenApple.print()의 출력 결과와 redApple.print()의 출력결과가 다르게 나오는 것으로 this가 의미하는 바는 Apple이라는 class자체가 아니라, Apple클래스의 인스터스 즉, 메모리에 올라가있는 객체인것을 알 수 있습니다. 

 

 

 

 

 

 

Reference

자바의 정석 저자 남궁 성.       

생활코딩                  

반응형

'Challenge' 카테고리의 다른 글

7주차 과제: 패키지  (0) 2021.01.02
6주차 과제: 상속  (0) 2020.12.26
4주차 과제: 제어문  (0) 2020.12.03
3주차 과제: 연산자  (0) 2020.11.25
2주차 과제: 자바 데이터 타입, 변수 그리고 배열  (0) 2020.11.21

댓글