개발 공부한 것들/SeSSAC 웹 풀스텍 과정 회고록

[SeSSAC] 웹 풀스택 영등포 5기 과정_Java(Class)

geograp 2023. 11. 25. 17:46

자바 강국이라고 불리는 한국에서 개발자로서 취업을 하고자 한다면,,

자바를 빼놓을 수 없죠!

 

드디어 자바를 배우게 되었습니다.

기초적인 문법을 배웠고, 아직 기초적인 문법을 진행 중이지만 수업 포인트 위주로 정리하겠습니다.

 

그럼 start!


 

0.클래스와 객체, 인스턴스

 

  • 클래스:

클래스는 사용자가 정의하는 자료형이자, 객체를 만들기 위한 하나의 "틀"이라고 저는 기억에 저장이 되었습니다.

 

  • 객체:

클래스로 부터 생성된 무언가(?)

 

  • 인스턴스:

객체가 메모리 할당이 되어 저장된 것(new 사용)

 


 

1. 메소드의 접근 제어자(Access Modifier)

 

자바에서는 클래스를 저장하는 묶음을 패키지(package)라고 하는데요,

이 패키지와 클래스의 저장 구조를 통해 외부에서 클래스의 접근을 보호할 수 있습니다.

 

자바 접근 제어자 범위 표

 

 


 

2. Static

 

정적변수는 클래스가 선되는 순간에 Method Area라는 어떤 영역에 메모리 할당을 받습니다.

하여 정적변수가 불필요한 상황에서도 프로그램이 종료가 될 때까지 가비지 컬렉터로도 회수가 되지 않습니다.

(non-static 변수는 메모리 중 heap에 할당이 됩니다.)

 

그럼에도, static을 사용하는 이유는, 중복되는 변수 및 메소드의 선언을 줄일 수 있어

잘 사용한다면 가독성도 좋아지고, 전체적인 메모리 효율성도 증대되기 때문입니다.

 

public class Constants {
    public static final double PI = 3.14159;
    public static final int MAX_VALUE = 100;

    public static void main(String[] args) {
        System.out.println("The value of PI: " + Constants.PI);
        System.out.println("Maximum allowed value: " + Constants.MAX_VALUE);
    }
}

 

static이라는 변수 두개를 만들면, 이 정적변수는 객체가 아닌 클래스에 종속되기 때문에

[ 클래스명 + dot 연산자 +  static 변수명 ] 으로 바로 접근이 가능하며, 

해당 값이 바뀐다면 바뀐 값을 전체적으로 공유할 수 있습니다.

 


 

3. final

 

static은 전역적으로 공용하는 변수 느낌이라면, 이번엔 변수의 값 변경을 금지하는 필드가 있습니다.

final은 값 변경을 막고 오로지 읽기만 허용합니다.

 

그래서 static + final 을 같이 선언하게 된다면, 

메모리 할당을 하여 공용적으로 쓸 수 있으나 값을 변경할 순 없습니다.

최초의 한 번 초기화된 값 이후로 값을 바꿀 수 없죠!

 


 

4. 메소드 오버라이딩와 메소드 오버로딩

 

이 개념은 저도,,,, 둘의 개념은 알겠는데, 이름이 너무 헷갈렸던 개념입니다.

 

*메소드 오버라이딩

: 상위 클래스에서 이미 정의된 메소드를 하위 클래스에서 동일한 시그니처로 다시 정의하는 것

class Animal {
    void makeSound() {
        System.out.println("동물 소리");
    }
}

class Dog extends Animal {
    // 메소드 오버라이딩
    @Override
    void makeSound() {
        System.out.println("왈왈!");
    }
}

class Cat extends Animal {
    // 메소드 오버라이딩
    @Override
    void makeSound() {
        System.out.println("야옹~");
    }
}

public class AnimalTest {
    public static void main(String[] args) {
        Animal dog = new Dog();
        Animal cat = new Cat();

        dog.makeSound(); // 왈왈! 출력
        cat.makeSound(); // 야옹~ 출력
    }
}

 

 

* 메소드 오버로딩

동일한 메소드 이름을 가진 여러 메소드를 정의하는 것

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }

    public String concatenate(String str1, String str2) {
        return str1 + str2;
    }

    public static void main(String[] args) {
        Calculator calculator = new Calculator();
        
        int sumInt = calculator.add(3, 4);
        System.out.println("Sum of integers: " + sumInt);

        double sumDouble = calculator.add(2.5, 3.7);
        System.out.println("Sum of doubles: " + sumDouble);

        String result = calculator.concatenate("Hello, ", "World!");
        System.out.println("Concatenated String: " + result);
    }
}