디폴트 생성자에 의해 구동되는 인스턴스 c1과 두번째 생성자에 의해 구동되는 인스턴스 c2를 갖는 프로그램을 작성해야 해요
<뼈대 코드>
public class TestCircle {
public static void main(String[] args) {
// TODO Auto-generated method stub
private double radius;
private String color;
public TestCircle() {
radius = 1.0; color = "red";
}
public TestCircle(double r) {
radius = r; color = "red";
}
public double getRadius() {
return radius;
}
public double getArea() {
return radius*radius*Math.PI;
}
}
1. 디폴트 생성자는 어떻게 만드나요,,? 저 코드에 디폴트 생성자가 이미 존재하나요?
2. 이 코드를 실행하려면 어떻게 해야 되죠? 저 상태로 실행 시켜보니 public static void main(String[] args) { 여기서 오류가 나던데..,
sehongpark님의 답변
## Q1: 디폴트 생성자는 어떻게 만드나요,,?
클래스 내부에 생성자가 없는 경우 내부적으로 디폴트 생성자가 만들어 집니다.
## Q2: 저 코드에 디폴트 생성자가 이미 존재하나요?
아니요, 생성자를 추가하였기 때문에 디폴트 생성자는 존재하지 않습니다.
## Q3: 이 코드를 실행하려면 어떻게 해야 되죠?
필드와 메소드의 위치를 잘 잡아주시면 됩니다.
```
public class TestCircle {
public static void main(String[] args) {
Circle c1 = new Circle();
CIrcle c2 = new Circle(4);
System.out.println(c1.getArea());
System.out.println(c2.getArea());
}
}
class Circle {
private double radius;
private String color;
public Circle() {
radius = 1.0; color = "red";
}
public Circle(double r) {
radius = r; color = "red";
}
public double getRadius() {
return radius;
}
public double getArea() {
return radius*radius*Math.PI;
}
}
```
pms5076님의 답변
앗 감사합니다!!!
근데 올려주신 코드 고대로 복붙했는데 오류가 발생해용,,
- new Circle(4);
- TestCircle() {
- TestCircle(double r) {
이 세부분에서요!
sehongpark님의 답변
생성자 이름을 바꾸었습니다. 다시 한번 확인해보셔요.
pms5076님의 답변
잘됩니당 감사해요 ~~!!~
sehongpark님의 답변
## 도움이 되었다니 다행입니다
클래스를 정의하고 객체를 만드는 방법에 대해서 반드시 개념적으로 그리고 실증적으로 연습을 해주세요.
## 추천 강의 링크
1. 클래스와 객체 (https://cloudstudying.kr/lectures/195)
2. 객체의 생성과 사용 (https://cloudstudying.kr/lectures/196)
3. 생성자와 클래스 타입 (https://cloudstudying.kr/lectures/197)
pms5076님의 답변
네 감사합니당 지금 강의 들어볼게요!!
pms5076님의 답변
하나만 더 여쭤볼게요,,ㅠ
저 위에 코드를
반경에 관해 double형, 색상과 관련하여 String형의 2개 인수를 갖는 Circle 인스턴스 생성에 관한 세 번째 생성자를 포함시키는 방식으로 클래스 Circle을 수정시키라는데,,
public Circle (double r, String c) {
이렇게하고 다음에 뭘 적어야 되는거에욤,,?
radius = r; color = "red"; 는 아닌거 같은데...
sehongpark님의 답변
생성자의 기본적인 역할은 필드 값의 초기화쥬?
그렇다면 입력된 값을 가지고 초기화를 해야겠쥬?
```
public Circle (double radius, String color) {
this.radius = radius;
this.color = color;
}
```
쉽쥬?
pms5076님의 답변
엇 그러네요ㅎㅎㅎㅎ
- Q2. 현재 인스턴스 색상 검색을 위해 변수 color에 관한 getter를 추가시킴.
이건 그냥
public String getColor() {
return color;
이렇게 하면 될까요? (질문이 많아서 죄송해요ㅇ0ㅇ 총 일곱개 문제를 저 코드에 추가 하면서 해야되서,..)
sehongpark님의 답변
네 맞아요
pms5076님의 답변
- 다음 메서드 테스트를 위해 TestCircle을 다시 작성하라.
Circle c4 = new Circle(); // Circle의 인스턴스 생성
c4.setRadius(5.0); // radius의 변경
System.out.println("radius is: " + c4.getRadius()); // getter를 통한 radius 인쇄
c4.setColor(......); // color의 변경
System.out.println("color is: " + c4.getColor()); // getter를 통한 color 인쇄
// setRadius()가 void를 반환하기 때문에 다음 문장이 행해질 수 없음(인쇄 불가능).
System.out.println(c4.setRadius(4.0));
이게 무슨 말인지 모르겠는데,, 뭐부터 시작해야 될까요?
지금 현재 코드는
public class TestCircle2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Circle c1 = new Circle();
Circle c2 = new Circle(4);
System.out.println(c1.getArea());
System.out.println(c2.getArea());
}
}
class Circle {
private double radius;
private String color;
public Circle() {
radius = 1.0; color = "red";
}
public Circle(double r) {
radius = r; color = "red";
}
public Circle(double radius, String color) {
this.radius = radius;
this.color = color;
}
public String getColor() {
return color;
}
public double getRadius() {
return radius;
}
public void setRadius(double newRadius) {
radius = newRadius;
}
public void setColor(String newColor) {
color = newColor;
}
public double getArea() {
return radius*radius*Math.PI;
}
}
여기까지 해둔 상태입니당..
sehongpark님의 답변
메인 메소드 내용을 새롭게 정의해주세요
pms5076님의 답변
package javaReportChapter1;
public class TestCircle {
public static void main(String[] args) {
Circle c1 = new Circle();
Circle c2 = new Circle(4);
Circle c3 = new Circle(10, "Blue");
Circle c4 = new Circle();
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
c4.setRadius(100);
c4.setColor("Black");
System.out.println("radius is : " + c4.getRadius());
System.out.println("color is : " + c4.getColor());
System.out.println("toString : " + c4.toString());
System.out.println("getArea : " + c4.getArea());
}
}
public class Circle {
private double radius;
private String color;
// 기본 생성자
public Circle() {
this.radius = 1.0;
this.color = "red";
}
// 오버라이딩 생성자
public Circle(double radius) {
this.radius = radius;
color = "rad";
}
// 오버라이딩 생성자
public Circle(double radius, String color) {
this.radius = radius;
this.color = color;
}
// getter
public double getRadius() {
return radius;
}
public String getColor() {
return color;
}
// setter
public void setRadius(double radius) {
this.radius = radius;
}
public void setColor(String color) {
this.color = color;
}
public double getArea() {
return this.radius*this.radius*Math.PI;
}
// toString
@Override
public String toString() {
return "Circle [radius=" + radius + ", color=" + color + "]";
}
}
이 코드에서 public class Circle {
에 빨간밑줄이 그어지는데 이유가 뭔가요 ??
코드는 제대로 실행돼요!
pms5076님의 답변
```
package javaReportChapter1;
public class Employee {
public static void main(String[] args) {
// TODO Auto-generated method stub
private int id;
private String firstName;
private String lastName;
private int salary;
// 기본 생성자
public Employee() {}
// 오버라이드 생성자
public Employee(int id, String firstName, String lastName, int salary) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.salary = salary;
}
// getter Method
public int getId() {
return id;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public String getName() {
return firstName + " " + lastName;
}
public int getSalary() {
return salary;
}
// setter Method
public void setSalary(int salary) {
// this를 통해 멤버변수 salary 접근
this.salary = salary;
}
// 멤버변수 salary * 12 반환
public int getAnnualSalary() {
return this.salary*12;
}
// 멤버변수 salary * percent 반환
public int raiseSalary(int percent) {
return this.salary*percent;
}
// toString
@Override
public String toString() {
return "Employee [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", salary=" + salary
+ "]";
}
}
Employee employee = new Employee(1, "Hong", "Gil Dong", 1000);
System.out.println("ID : " + employee.getId());
System.out.println("FirstName : " + employee.getFirstName());
System.out.println("LastName : " + employee.getLastName());
System.out.println("Salary : " + employee.getSalary());
System.out.println("toString >> " + employee.toString());
employee.setSalary(2000);
System.out.println("setSalary >> " + employee.toString());
System.out.println("getAnnualSalary >> " + employee.getAnnualSalary());
System.out.println("raiseSalary >> " + employee.raiseSalary(10));
}
}
```
여기선 public static void main(String[] args) { 에서 오류나는데 이것도 알려주세요ㅠㅠ
sehongpark님의 답변
메인 메소드 위치가 잘못됐어요 ;;
pms5076님의 답변
네네???? 어떻게 바꿔야해요??ㅜㅜㅜㅠㅠㅠ 바꿔주세요
sehongpark님의 답변
이메일에 Slack 초대보냈어요 거기로 연락주세요