2024.05.17(금) 슈퍼코딩 부트캠프 백엔드/Spring 네이버 인턴 Day 5 일일보고

usnim·2024년 5월 18일
0

super_coding

목록 보기
15/35

📋 TO-DO LIST

네이버 클라우드 활동 [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과 변수 유효범위

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 메서드의 사용을 적절히 조정하는 등의 개선이 필요해보인다.

회고 : 객체 지향 프로그래밍의 기본 개념을 실습하며 클래스 상속과 메서드 오버라이딩을 학습했고,이번 학습을 통해 객체 지향 프로그래밍의 중요성과 코드 구조의 중요성을 더욱 깨닫게 되었다. 더 나은 코드를 작성하기 위해 노력하고자 한다.

profile
🤦‍♂️

0개의 댓글