네이버 클라우드 활동 [o]
3주 5일차 강의 [o]
네이버 클라우드 사수 도움 요청 업무 [o]
팀장님 지시 업무 [o]
중간/일일 업무 보고 작성 [o]
정기 팀/동기 스터디 모임 참석 및 성실도 [o]
객체 간의 협력은 객체들이 서로 상호작용하여 작업을 수행하는 것을 의미합니다.
이는 객체 지향 프로그래밍에서 중요한 개념으로, 객체들이 메시지를 주고받아 작업을 수행하고 데이터를 공유합니다.
public class Car {
private String model;
public Car(String model) {
this.model = model;
}
public void start() {
System.out.println(model + " is starting.");
}
}
public class Driver {
public void drive(Car car) {
car.start();
}
}
public class Main {
public static void main(String[] args) {
Car myCar = new Car("Toyota");
Driver driver = new Driver();
driver.drive(myCar);
}
}
static
은 클래스 레벨에 속하며 인스턴스화하지 않고 사용할 수 있는 멤버를 나타냅니다.
변수의 유효범위는 해당 변수가 접근 가능한 범위를 말하며,
지역 변수는 선언된 블록 내에서만 유효하고 전역 변수는 프로그램 전체에서 유효합니다.
public class Example {
private static int staticVar = 10;
private int instanceVar = 20;
public void printVars() {
System.out.println("Static variable: " + staticVar);
System.out.println("Instance variable: " + instanceVar);
}
public static void main(String[] args) {
Example ex = new Example();
ex.printVars();
}
}
객체의 상속은 부모 클래스의 특성을 자식 클래스가 물려받아 사용하는 것을 말합니다.
이를 통해 코드 재사용성을 높이고 계층 구조를 형성할 수 있습니다.
public class Animal {
public void eat() {
System.out.println("Animal is eating.");
}
}
public class Dog extends Animal {
public void bark() {
System.out.println("Dog is barking.");
}
}
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.eat();
myDog.bark();
}
}
다형성은 같은 이름의 메서드가 다른 기능을 수행할 수 있는 능력을 말합니다.
이는 상속과 연관이 깊으며, 하나의 인터페이스를 여러 형태로 구현할 수 있도록 합니다.
public class Shape {
public void draw() {
System.out.println("Drawing a shape.");
}
}
public class Circle extends Shape {
@Override
public void draw() {
System.out.println("Drawing a circle.");
}
}
public class Square extends Shape {
@Override
public void draw() {
System.out.println("Drawing a square.");
}
}
public class Main {
public static void main(String[] args) {
Shape circle = new Circle();
Shape square = new Square();
circle.draw();
square.draw();
}
}
부족한 점 :
코드의 중복을 줄이고, 주석을 통해 설명하는것
스스로 시도해본 것들 :
도형과 학생 점수 관리에 대한 클래스를 구현하고 활용해보았습니다.
public class StudentScore {
private static int serialIndex;
private static int[] allScores;
private int myIndex;
private int score;
public static int getSerialIndex() {
return serialIndex;
}
public static void setSerialIndex(int serialIndex) {
StudentScore.serialIndex = serialIndex;
}
public static int[] getAllScores() {
return allScores;
}
public static void setAllScores(int[] allScores) {
StudentScore.allScores = allScores;
}
public int getMyIndex() {
return myIndex;
}
public void setMyIndex(int myIndex) {
this.myIndex = myIndex;
}
public int getScore() {
return allScores[myIndex];
}
public void setScore(int score) {
allScores[myIndex] = score;
}
StudentScore(int score) {
this.score = score;
myIndex = serialIndex;
addAllScore(score);
serialIndex++;
}
private static void addAllScore(int score) {
if (allScores == null) {
allScores = new int[]{score};
} else {
int[] newScores = Arrays.copyOf(allScores, allScores.length + 1);
newScores[newScores.length - 1] = score;
allScores = newScores;
}
}
}
public class Shape {
protected String color;
protected Shape(String color) {
this.color = color;
}
public double getArea() {
return 0.0;
}
protected void printInfo() {
System.out.println("도형의 색상: " + color);
System.out.println("도형의 면적: " + getArea());
}
}
public class Circle extends Shape {
private static final double PI = 3.14;
private double radius;
public Circle(String color, double radius) {
super(color);
this.radius = radius;
}
@Override
public double getArea() {
return PI * radius * radius;
}
public void printCircleInfo() {
System.out.println("도형의 색상: " + color);
System.out.println("도형의 면적: " + getArea());
System.out.println("원의 반지름: " + radius);
}
}
public class Rectangle extends Shape {
private double width;
private double height;
public Rectangle(String color, double width, double height) {
super(color);
this.width = width;
this.height = height;
}
@Override
public double getArea() {
return width * height;
}
public void printRectangleInfo() {
System.out.println("도형의 색상: " + color);
System.out.println("도형의 면적: " + getArea());
System.out.println("사각형의 가로 길이: " + width);
System.out.println("사각형의 세로 길이: " + height);
}
}
해결 내용 :
객체 지향 프로그래밍의 기본 개념을 실습하며 도형 클래스와 학생 점수 관리 클래스를 구현했다.
알게된 점 :
클래스 상속과 메서드 오버라이딩을 통해 다양한 도형을 처리하는 방법을 학습했다.
정적 변수와 메서드를 활용하여 학생 점수를 관리하는 방법을 실습을 통해 연습했다.
헷갈리거나 실수한 점 :
코드의 중복을 줄이고, 생성자에서의 static
변수 초기화를 효율적으로 처리하며,
private
메서드의 사용을 적절히 조정하는 등의 개선이 필요해보인다.
회고 : 객체 지향 프로그래밍의 기본 개념을 실습하며 클래스 상속과 메서드 오버라이딩을 학습했고,이번 학습을 통해 객체 지향 프로그래밍의 중요성과 코드 구조의 중요성을 더욱 깨닫게 되었다. 더 나은 코드를 작성하기 위해 노력하고자 한다.