오늘은 class에 대해서 배워보겠습니다.
목차 | |
1. | class |
2. | 예제 문제 |
3. | 느낀 점 |
1. class
package day07;
// class 선언 가능
public class Class01 {
// 멤버변수 선언 위치
public static void main(String[] args) {
/* 클래스의 구성요소 : 멤버 변수, 메서드, (생성자)
* 맴버 변수가 먼저, (생성자), 메서드가 뒤에 선언
* 클래스 - 설계도
* 객체 - 클래스에 의해 생성되는 제품
* 메서드 - 객체가 할 수 있는 기능
*
* 클래스의 구성요소
* - 멤버 변수 : 속성, 정보
* - 메서드 : 기능
*
* 프린터 클래스
* - 속성(멤버변수) : 크기, 색, 제품명, 제조사, 종류
* - 기능(메서드) : 인쇄, 복사, 팩스, 스캔
*
* 멤버변수 선언 위치
* - 클래스 생성 후 메서드 시작 전
* - 클래스 가장 위쪽
* -멤버변수는 쿨래스 안에서 사용 가능.(클래스에서 생성되는 모든 메서드에서 공통적으로 사용 가능)
*
* 객체 생성
* - 클래스명 객체명; // 선언만 값은 null
* - 객체명 = new 클래스명(); // 선언한 객체의 초기값을 생성자가 설정.
* - 클래스명 객체명 = new 클래스명();
*
* 메서드 사용법(클래스가 다른 메서드를 호출할 경우)
* 객체 선언 후 객체명.메서드명();
*
* - 같은 클래스안에서 메서드 호출 => 메서드명();
* - 다른 클래스안에서 메서드 호출 => 객체명.메서드명();
*
* 접근제한자(제어자)
* - public : 모두 사용 가능
* - protected : 나 + 패키지 + 자식클래스
* - (default) : 나 + 패키지
* - private : 나
*
* private < default < protected < public
*
* - 클래스에서 public 클래스명 : 파일명과 클래스명이 같을 때만 가능.
* - 하나의 java 파일 안에 여러 개의 클래스를 가지는 것 가능함.
* - 하지만 public class가 두 개는 불가능.
* - 멤버변수, 멤버 메서드는 public을 붙이는 건 문제가 없음.
* - 일반적으로 멤버변수는 private, 메서드는 public 선언한다.
* - private : 다른 클래스에서 접근 불가능.
* - private으로 선언된 멤버변수는 getter / setter라는 메서드를 만들어서 해당 변수에 접근 가능하도록 한다.
*/
// 외부 클래스를 사용하려면 클래스로 객체를 생성해야 사용가능.
// 클래스 객체명 = new 클래스명();
Point p = new Point(); // p라는 객체를 클래스로 선언
p.print();
// p.x = 1;
// p.y = 2;
p.setX(10);
p.setY(20);
p.print();
System.out.println(p.getX());
System.out.println(p.getY());
}
}
// class 선언 가능
※ class
: 같은 package에 있으면 class를 어디서든지 사용할 수 있다. (단, default는 접근제한자를 가지고 있기 때문에 다른 package에서 사용할 수 없다.) => 같은 package에 있는 class끼리는 이름이 달라야한다.
▣ 좌표(x,y) 출력하기
// (x,y) 좌표를 출력하는 클래스
// (1,1)
class Point {
// 멤버변수 위치 (모든 메서드에서 공통적으로 사용)
// 멤버변수는 초기값을 설정하지 않아도 자동 설정.
// int 0 / String null / boolean false
private int x;
private int y;
// 메서드 위치
public void print() {
System.out.println("(" + x + "," + y + ")");
}
◈ getter
// getter : 멤버변수의 값을 얻어오는 메서드
public int getX() {
// int x = 1;
// this : 멤버변수를 지칭하는 키워드
return this.x;
}
public int getY() {
return this.y;
}
◈ setter
// setter : 멤버변수의 값을 변경하는 메서드
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
▣ Car class 만들기
public class Class02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Car c = new Car();
c.setName("Sonata");
c.setColor("Black");
c.setYear("2024년식");
c.print();
c.power();
System.out.println(c.speedUp());
System.out.println(c.speedDown());
c.setSpeed(100);
System.out.println(c.getSpeed());
c.setSpeed(0);
System.out.println(c.getSpeed());
c.power();
}
}
class Car{ // 클래스명은 대문자로 시작
// 멤버변수는 private
// name, color, year, power, speed
// power() => 켜져있으면 꺼지고, 꺼져있으면 켜짐
// speedUP()
// speedDown()
// print() => name, color, year 출력
// getter / setter
private String name;
private String color;
private String year;
private boolean power;
private int speed;
// print
public void print() {
System.out.println(name + " / " + color + " / " + year);
}
// power on/off
public void power() {
if (this.power == false) {
this.power = true;
System.out.println("시동이 켜졌습니다.");
} else if (this.power == true) {
this.power = false;
System.out.println("시동이 꺼졌습니다.");
}
}
// speed Up
public int speedUp() {
speed += 10;
return speed;
}
// speed Down
public int speedDown() {
speed -= 10;
return speed;
}
// getter
public String getName() {
return this.name;
}
public String getColor() {
return this.color;
}
public String getYear() {
return this.year;
}
public boolean getPower() {
return this.power;
}
public int getSpeed() {
return this.speed;
}
// setter
public void setName(String name) {
this.name = name;
}
public void setColor(String color) {
this.color = color;
}
public void setYear(String year) {
this.year = year;
}
public void setPower(boolean power) {
this.power = power;
}
public void setSpeed(int speed) {
this.speed = speed;
}
}
※ getter & setter
: getter와 setter는 class에서 필수이기에 따로 한꺼번에 생성할 수 있다. (class 안에서 우클릭 - Source - Generate Getters and Setters)
◈ 생성자
// 생성자 위치
// 생성자 public 클래스명(){} => 컴파일을 할 때 자동 생성
// 생성자를 사용자가 직접 만들게 되면 기본 생성자는 만들지 않음.
public Car1() {
// 기본생성자
}
// 생성자는 여러 개 만들 수 있음. (생성자 오버로딩)
// 오버로딩 조건 : 매개변수의 개수가 달라야 함, 타입이 달라야 함.
public Car1(String name) {
this.name = name;
}
public Car1(String name, String color) {
this.name = name;
this.color = color;
}
public Car1(int door, String year) {
this.door = door;
this.year = year;
}
public Car1(String name, String color, int door, String year) {
// 생성자 호출
this(door, year);
// this(name, color);
this.name = name;
this.color = color;
// this.door = door;
// this.year = year;
}
☆ 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다.
2. 예제 문제
◎ 문제
▶ 1번
/* Tv 클래스 생성
* 멤버 변수 : brand, power, ch, vol
* 브랜드명을 받는 생성자 추가
*
* 메서드 :
* power() : power가 켜지면 "TV가 커졌습니다." 꺼지면 "TV가 꺼졌습니다."
*
* chUp() : 1씩 증가 20까지 있음. 20이 넘어가면 0번으로 순환
* chDown : 1씩 감소.. 순환구조
*
* volUp() : 1씩 증가 10까지 있고, 10이상은 10으로 고정
* volDown() : 1씩 감소 0이면 음소거라고 출력
*
* getter / setter
*/
▶ 2번
/* 두 정수가 주어졌을 때
* 두 정수 사이의 모든 합을 리턴하는 메서드
* ex) a = 3, b = 5 => 3 + 4 + 5
* ex) a = 5, b = 1 => 1 + 2 + 3 + 4 + 5
* ex) a = 3, b = 3 => 3
* static 메서드
* 같은 클래스에서는 그냥 호출 가능.
* 다른 클래스에서는 클래스명.메서드명()
*
* static 없이 메서드 작업
* 같은 클래스라도 객체를 생성하여 객체명.메서드명() 호출
*/
◎정답
▶ 1번
class Tv{
// 변수
private String brand; // final은 변경할 수 없는 값 (대문자) (ex : private final String BRAND) => setter가 없음
private boolean power;
private int ch;
private int vol;
// 생성자(브랜드)
public Tv(String brand) {
this.brand = brand;
}
// brand 출력
public void print() {
System.out.println("브랜드: " + brand);
}
// TV 전원 On / Off
public void power() {
if (this.power == false) {
this.power = true; // power = !power
System.out.println("TV가 켜졌습니다.");
}else if (this.power == true) {
this.power = false;
System.out.println("TV가 꺼졌습니다.");
}
}
// 채널 변겅
public void chUp() { // 채널 +
ch ++;
if (ch > 20) {
ch = 0;
}
System.out.println("현재 채널은 " + ch + "입니다.");
}
public void chDown() { // 채널 -
ch --;
if (ch < 0) {
ch = 20;
}
System.out.println("현재 채널은 " + ch + "입니다.");
}
// 음량 변경
public void volUp() { // 볼륨 +
vol ++;
if (vol > 10) {
vol = 10;
System.out.println("음량의 최대치입니다.");
} else {
System.out.println("현재 음량은 " + vol + "입니다.");
}
}
public void volDown() { // 볼륨 -
vol --;
if (vol < 0) {
vol = 0;
System.out.println("음소거입니다.");
} else {
System.out.println("현재 음량은 " + vol + "입니다.");
}
}
// getter & setter
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public boolean isPower() {
return power;
}
public void setPower(boolean power) {
this.power = power;
}
public int getCh() {
return ch;
}
public void setCh(int ch) {
this.ch = ch;
}
public int getVol() {
return vol;
}
public void setVol(int vol) {
this.vol = vol;
}
}
public class Class04 {
public static void main(String[] args) {
// 객체 생성
Tv tv = new Tv("LG");
tv.print();
tv.power();
tv.chUp();
tv.chDown();
tv.chDown();
tv.chUp();
tv.volDown();
tv.volUp();
tv.volUp();
tv.volDown();
tv.setVol(19);
tv.volUp();
tv.power();
}
}
※ 멤버변수(final)
: final은 변경할 수 없는 값, 멤버변수의 이름을 대문자로 표현함. (ex : private final String BRAND) 따라서 setter가 없음.
▶ 2번
public class Exam01 {
public static void main(String[] args) {
result q = new result();
q.print(3, 5);
q.print(5, 1);
q.print(3, 3);
}
}
class result {
// 멤버 변수
private int max; // 더 큰 값
private int min; // 더 작은 값
// private int answer; // 결과값 // 계산을 실행할수록 누적됨
// 숫자 비교 & 결과값
public int sum(int num1, int num2) {
if (num1 >= num2) {
this.max = num1;
this.min = num2;
} else if (num1 < num2) {
this.max = num2;
this.min = num1;
}
int answer = 0;
for (int i = min; i <= max; i++) {
answer += i;
}
return answer;
}
// 출력
public void print(int num1, int num2) {
if (num1 >= num2) {
this.max = num1;
this.min = num2;
} else if (num1 < num2) {
this.max = num2;
this.min = num1;
}
System.out.println("a = " + min + ", b = " + max);
System.out.print( "=> ");
for (int i = min; i < max; i++) {
System.out.print(i + " + ");
}
System.out.println(max + " = " + sum(num1, num2));
}
}
※ Math
Math.max(num1, num2), Math.min(num1, num2)를 활용하여 최댓값과 최솟값을 구할 수 있음
3. 느낀 점
오늘 문제를 풀면서 오류가 발생하였는데 오류가 발생하는 원인이 class안에 class가 있었기 때문이였는데 이 원인을 알아내느라 시간을 조금 허비하였다. 다음부터는 괄호를 주의깊게 신경 써야겠다는 생각을 하게되었다.
'Java' 카테고리의 다른 글
Java 설정 및 기초- AWS 풀스택 과정 45일차 (5) | 2024.09.25 |
---|---|
Java 기초(static) - AWS 풀스택 과정 8일차 (0) | 2024.07.24 |
Java 기초(객체 지향 언어) - AWS 풀스택 과정 6일차 (0) | 2024.07.22 |
Java 기초(String, Method) - AWS 풀스택 과정 5일차 (0) | 2024.07.19 |
Java 기초(배열) - AWS 풀스택 과정 4일차 (0) | 2024.07.18 |