관리 메뉴

거니의 velog

230718 자바 강의 본문

대덕인재개발원_Java

230718 자바 강의

Unlimited00 2023. 7. 18. 16:33

상수 이름에만 snake case를 사용하고, 나머지는 camel case를 사용한다.

 

<클래스의 두 용도>

(1) 라이브러리 클래스 : 객체 생성 및 메소드 제공 역할

(2) 실행 클래스 : main() 메소드 제공 역할


[Product.java]

package ddit.chap06.sec02;

public class Product {
	
	private static int pid; // 제품번호
	private static String pName = "마커펜"; // 제품명
	
	Product() { // 생성자 메서드. 멤버 필드 초기화.
		pid++;
		pName = "마커펜";
	}
	
	public static void showProduct() {
		System.out.println("제품번호 : " + (++pid));
		System.out.println("제품명 : " + pName);
	}
	
	public Product(int pid, String pName) {
		this.pid = pid;
		this.pName = pName;
	}

	public int getPid() {
		return pid;
	}

	public void setPid(int pid) {
		this.pid = pid;
	}

	public String getpName() {
		return pName;
	}

	public void setpName(String pName) {
		this.pName = pName;
	}

	@Override
	public String toString() {
		return "Product [pid=" + pid + ", pName=" + pName + "]";
	}
	
}

[StaticExample.java]

package ddit.chap06.sec02;

public class StaticExample {

	public static void main(String[] args) {
		
//		Product p1 = new Product();
//		System.out.println(p1); // ddit.chap06.sec02.Product@23ceabc1
//		p1.showProduct();
//		
//		Product p2 = new Product();
//		System.out.println(p2); // ddit.chap06.sec02.Product@5d5eef3d
//		p2.showProduct();
//		
//		Product p3 = new Product();
//		System.out.println(p3); // ddit.chap06.sec02.Product@56f4468b
//		p3.showProduct();
		
		// 인스턴스 생성시 힙 메모리에 새로운 객체가 생성되어 초기화가 일어나므로 각각의 객체 주소값이 다르다. 그래서 +1만 되는 것.
		
		// Product 클래스에서 생성자 메서드에 int pid 변수에 static을 선언하면
		// method 메모리의 literal pool에 0으로 한번만 초기화되어 고정되고
		// 모든 객체가 공통적으로 이 변수를 참조하기 때문에 값이 증가하는 것.
		
		Product.showProduct(); // 생성자 메서드에서 할 일을 static 메서드에서 할 수 있게 만들어 줌.
		Product.showProduct();
		Product.showProduct();
		
	}

}

콘솔 결과


[Point.java]

package ddit.chap06.sec02;

// DTO : Data Transfer Object
// VO : Value Object, 읽기 전용.
public class Point {
	
	// 캡슐화, private에 의해 구현되어 짐.
	private int x;
	private int y;
	
	Point() {} // 기본 생성자. 매개변수가 없는 메서드.
	
	// this, Super = JVM에서 제공하는 참조형 변수. 
	// 주소 저장할 때 this는 자기 자신 클래스의 주소 저장.
	// 보통 생성자 메서드에서 많이 사용.
	// 생성자 메서드의 매개 변수로 전달되는 지역 변수와 멤버 변수의 이름이 같을 때 자기 자신 클레스의 멤버 변수를 지칭하기 위함.
	// Super : 자식 클래스에서 부모 클래스의 변수를 호출할 때 부모 클래스의 주소를 저장.
	// this(), Super()
	
	Point(int x, int y) {
		this.x = x;
		this.y = y;
	}
	
	public int getX() {
		return x;
	}

	public void setX(int x) {
		this.x = x;
	}

	public int getY() {
		return y;
	}

	public void setY(int y) {
		this.y = y;
	}

	// 애너테이션 : 실행이 되어지는 주석문.
	// @Override : 재정의하다.
	@Override
	public String toString() { // 객체 내용을 문자열로 반환해주는 메서드
//		return getClass().getName() + "@" + Integer.toHexString(hashCode());
//		return getClass().getName() + "@" + hashCode();
		return "Point [x=" + x + ", y=" + y + "]";
	}

}

[Rectangle.java]

package ddit.chap06.sec02;

/*
	문제 4 – 정수형 원점의 좌표(x,y)와 
	               실수 타입의 가로와 세로를 입력받아 사각형을 만드는 클래스를 설계하고, 
	               사각형의 면적을 계산하는 메서드를 포함시키시오.
*/

public class Rectangle {
	
	private Point p1; // 현재 클래스(Rectangle)에 다른 클래스(Point)가  하나의 변수로 사용되는 관계를 포함 관계라고 한다.
	private double width;
	private double height;
	
	Rectangle() {}
	
	Rectangle(Point p1, double width, double height) {
		this.p1 = p1;
		this.width = width;
		this.height = height;
	}

	public Point getP1() {
		return p1;
	}

	public void setP1(Point p1) {
		this.p1 = p1;
	}

	public double getWidth() {
		return width;
	}

	public void setWidth(double width) {
		this.width = width;
	}

	public double getHeight() {
		return height;
	}

	public void setHeight(double height) {
		this.height = height;
	}
	
	public void getArea() {
		
		double area = width * height;
		System.out.println(p1 + " 위치에 존재하는 사각형의 넓이는 " + area + " m2 입니다.");
		
	}
	
}

[ShapeExample.java]

package ddit.chap06.sec02;

public class ShapeExample {

	public static void main(String[] args) {
		
//		Point p1 = new Point(100, 200);
//		System.out.println("p1 : " + p1); // p1 : ddit.chap06.sec02.Point@23ceabc1. Object 클래스의 toString() 메서드가 실행.
//		System.out.println(p1.toString()); // Point [x=100, y=200]. toString() 메서드를 @Override 하여 재정의함.
		
		Rectangle rec1 = new Rectangle(new Point(100, 200), 25.5, 10.5);
		rec1.getArea();
		
	}

}

콘솔 결과


[Circle.java]

package ddit.chap06.sec03;

// Circle 클래스는 반지름, 원주율(상수 : 3.1415926), 원의 면적을 반환하는 메서드(getArea()).
public class Circle {
	
	private double radius;
	private final double PI = 3.1415926; // 상수명은 대문자로만 작성.
	
	Circle() {}
	
	Circle(double radius) {
		this.radius = radius;
	}
	
	public double getRadius() {
		return radius;
	}

	public void setRadius(double radius) {
		this.radius = radius;
	}

	public double getArea() {
		return radius * radius * PI;
	}

}

[Cylinder.java]

package ddit.chap06.sec03;

/*문제 5 - 다음에 구현된 Circle 클래스를 참고로 다음을 만족하는 Cylinder 클래스를 작성하시오.
· 원통을 나타내는 Cylinder 클래스는 Circle형의 원과 실수형의 높이를 필드로 선언
· 메소드 getVolume()은 원통의 부피를 반환
· Cylinder 클래스의 main() 메소드에서 반지름이 2.8, 높이가 5.6의 원통의 부피를 출력
· Circle 클래스는 반지름, 원주율(상수 : 3.1415926), 원의 면적을 반환하는 메서드.
*/
public class Cylinder {

	Circle c;
	double height;
	
	Cylinder() {}
	
	Cylinder(Circle c, double height) {
		this.c = c;
		this.height = height;
	}

	public Circle getC() {
		return c;
	}

	public void setC(Circle c) {
		this.c = c;
	}

	public double getHeight() {
		return height;
	}

	public void setHeight(double height) {
		this.height = height;
	}
	
	public void getVolume() {
		System.out.println("원기둥의 부피 : " + (c.getArea() * height));
	}
	
}

[CylinderEx.java]

package ddit.chap06.sec03;

//문제 6 - 위에서 구현한Cylinder를 다음 조건에 맞도록 기능을 추가하여 작성하시오.
//· 다음과 같은 객체 생성이 가능하도록 생성자를 구현
//. Cylinder cd = new Cylinder(new Circle(2.8), 5.6);

public class CylinderEx {

	public static void main(String[] args) {
		
		Cylinder cd = new Cylinder(new Circle(2.8), 5.6);
		cd.getVolume(); // 원기둥의 부피 : 137.92848151039996
		
	}

}

콘솔 결과


[Student.java]

package ddit.chap06.sec01;

//문제 7 – 위 1번에서 구현한 Student 클래스를 다음을 만족하도록 기능을 추가하여 작성하시오.
//· 필드를 모두 private로 하고, getter와 setter를 구현하고
//· Student 클래스의 main() 메소드에서 Student 객체를 생성하여 setter를 사용하여 학과와 학번 필드에 적당 한 값을 입력 후 출력

public class Student {
	private String major;
	private int studID;
	
	// 기본 생성자 생략. 인스턴스 생성시 컴파일러가 자동으로 넣어줌.
	Student() {}
	
	Student(String major, int studID) {
		this.major = major;
		this.studID = studID;
	}

	public String getMajor() {
		return major;
	}

	public void setMajor(String major) {
		this.major = major;
	}

	public int getStudID() {
		return studID;
	}

	public void setStudID(int studID) {
		this.studID = studID;
	}

	@Override
	public String toString() {
		return "Student [major=" + major + ", studID=" + studID + "]";
	}
}

[StudentExample.java]

package ddit.chap06.sec01;

/*문제 1 -다음을 만족하는 Student 클래스를 작성하시오.
* · String형의 학과와 정수형의 학번을 필드로 선언
* · Student 클래스의 main() 메소드에서 Student 객체를 생성하여 학과와 학번 필드에 적당한 값을 입력 후 출력
*/

public class StudentExample {

	public static void main(String[] args) {

		// Student 클래스의 main() 메소드에서 Student 객체를 생성하여 setter를 사용하여 학과와 학번 필드에 적당 한 값을 입력 후 출력
		Student std02 = new Student();
		std02.setMajor("경영학과");
		std02.setStudID(202301015);
		System.out.println("학과 : " + std02.getMajor());
		System.out.println("학번 : " + std02.getStudID());
		System.out.println(std02.toString()); // Student [major=컴퓨터공학과, studID=2008102009]
		
	}

}

콘솔 결과

 

'대덕인재개발원_Java' 카테고리의 다른 글

230720 자바 강의  (0) 2023.07.20
230719 자바 강의  (0) 2023.07.19
230717 자바 강의  (0) 2023.07.17
230714 자바 강의  (0) 2023.07.14
230713 자바 강의  (0) 2023.07.13