2021/01/24 - [Programming Language/Java] - [Java] 객체지향언어(1) | 클래스와 객체, 인스턴스, 객체 배열
[Java] 객체지향언어(1) | 클래스와 객체, 인스턴스, 객체 배열
http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788994492032&orderClick=LEa&Kc= Java의 정석 - 교보문고 자바의 기초부터 객제지향개념을 넘어 실전활용까지 수록한『Jav..
i-am-seongni.tistory.com
2021/01/25 - [Programming Language/Java] - [Java] 객체지향언어(2) | 변수와 메서드, 생성자
[Java] 객체지향언어(2) | 변수와 메서드, 생성자
http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788994492032&orderClick=LEa&Kc= Java의 정석 - 교보문고 자바의 기초부터 객제지향개념을 넘어 실전활용까지 수록한『Jav..
i-am-seongni.tistory.com
클래스(class) 예제
1. 다음 객체에 대한 설명에 맞는 클래스를 만들고 값을 출력하시오.
<출력결과>
나이 : 30
이름 : James
결혼여부 : true
자녀 수 : 3
public class Hello {
public static void main(String[] args) {
Person James = new Person(30, "James", true, 3); // James 인스턴스 생성
James.print(); // 출력
}
}
class Person{ // person의 속성(멤버변수) 나이, 이름, 결혼 여부, 자녀 수
int age;
String name;
boolean marriage;
int child;
Person(int age, String name, boolean marriage, int child){ // 생성자
this.age = age; // 인스턴스 변수 생성
this.name = name;
this.marriage = marriage;
this.child = child;
}
void print() { // 멤버 변수를 출력하는 메서드
System.out.println("나이 : " + this.age);
System.out.println("이름 : " + this.name);
System.out.println("결혼여부 : " + this.marriage);
System.out.println("자녀 수 : " + this.child);
}
}
메인(여기서는 Hello)에서 James 인스턴스를 생성해주고, Person 클래스에 생성해둔 print 메서드를 이용해서 James를 출력한다.
Person 클래스에는 나이(정수), 이름(문자열), 결혼여부(true or false), 자녀 수(정수)로 멤버변수를 만들었다.
생성자를 만들어서 인스턴스 변수를 생성했다.
print 메서드를 만들어서 출력 예시에 맞게 출력되도록 했다.
2. Grade 클래스를 작성하시오. 3과목의 점수를 입력받아 Grade 객체를 생성하고 성적 평균을 출력하는 main()과 실행예시는 다음과 같다.
package iamseongni.hello.eclipse;
import java.util.*;
public class Hello {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("수학, 과학, 영어 순으로 3개의 정수 입력 >> ");
int math = sc.nextInt();
int science = sc.nextInt();
int english = sc.nextInt();
Grade me = new Grade(math, science, english);
System.out.println("평균은 " + me.average()); // average()는 평균을 계산해 리턴
sc.close();
}
static class Grade{ // private 필드 생성
private int math;
private int science;
private int english;
Grade(int math, int science, int english){ // 생성자
this.math = math;
this.science = science;
this.english = english;
}
int average() { // 평균 계산하는 메서드
double avg = (math + science + english) / 3;
return (int)avg;
}
}
}
계속 "엔클로징 인스턴스가 없습니다"라는 오류가 떠서 많이 헤맸는데, static class로 만들어주면 해결되는 문제였다.
문제가 요구하는 대로 private 필드를 생성했고, 생성자를 만들어서 인스턴스 변수를 만들었다.
평균을 계산하는 average 메서드를 만들었는데, int형으로 생성해서 계산 결과를 리턴하도록 했다.
각 과목의 성적에 따라서 평균 값이 소수점이 나올 수 있으므로, double로 avg 변수를 생성했다.
return 할 때에는 정수형으로 형변환을 해야한다.
3. 다음 멤버를 가지고 직사각형을 표현하는 Rectangle 클래스를 작성하시오.
- int 타입의 x, y, width, height 필드 : 사각형을 구성하는 점과 크기 정보
- x, y, width, height 값을 매개변수로 받아 필드를 초기화하는 생성자
- int square() : 사각형 넓이 리턴
- void show() : 사각형의 좌표와 넓이를 화면에 출력
- boolean contatins(Rectangle r) : 매개변수로 받은 r이 현 사각형 안에 있으면 true 리턴
- main() 메소드의 코드와 실행 결과는 다음과 같다
package iamseongni.hello.eclipse;
import java.util.*;
public class Hello {
public static void main(String[] args) {
Rectangle r = new Rectangle(2, 2, 8, 7);
Rectangle s = new Rectangle(5, 5, 6, 6);
Rectangle t = new Rectangle(1, 1, 10, 10);
r.show();
System.out.println("s의 면적은 " + s.square());
if(t.contains(r)) System.out.println("t는 r을 포함합니다.");
if(t.contains(s)) System.out.println("t는 s를 포함합니다.");
}
static class Rectangle{
int x, y, width, height;
Rectangle(int x, int y, int width, int height){
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
int square() {
return (width * height);
}
void show() {
System.out.printf("(%d, %d)에서 크기가 %d*%d인 사각형\n", x, y, width, height);
}
boolean contains(Rectangle r) {
if((width+x) > (r.width+r.x) && (height+y) > (r.height+r.y)) {
if(x<r.x && y<r.y) {
return true;
}
return false;
}
return false;
}
}
}
이번에도 "엔클로징 인스턴스가 없습니다"라는 오류가 떠서, static class로 생성해주었다.
똑같이 클래스 생성하고, 생성자를 생성했다.
넓이를 구하는 square 메서드를 만들었는데 계산값을 리턴하기 위해서 int로 만들었다.
출력 예시 첫번째 줄을 출력하기 위해 show라는 void 메서드를 생성했다.
r이 현 사각형 내부에 있는지 확인하는 contains 메서드를 완성하는 게 어려웠는데,
좌표를 고려하고 넓이도 고려하기 위해서 if문의 조건을 어떻게 해야 할지 고민을 많이 했다.
몇 번의 수정 끝에 완성했다.
'Programming Language > Java' 카테고리의 다른 글
[Java] 상속 | 클래스 상속, 오버라이딩, 오버로딩 (0) | 2021.02.23 |
---|---|
[Java] 객체지향언어(3) | 제어자(modifier), 접근 제어자(access modifier) (0) | 2021.01.31 |
[Java] 객체지향언어(2) | 변수와 메서드, 생성자 (1) | 2021.01.25 |
[Java] 객체지향언어(1) | 클래스와 객체, 인스턴스, 객체 배열 (0) | 2021.01.24 |
[Java] 배열(2) | String 배열, 다차원 배열 (1) | 2021.01.24 |