오늘은 Java의 객체지향 프로그래밍에 대한 핵심 개념과 원리를 공부했다. 객체지향 프로그래밍은 세상에 있는 물체(객체)를 기반으로 프로그램을 구성하는 방법론으로, 클클래스를 통해 객체를 정의하고 상태와 행위를 캡슐화하는 것이 핵심이다.
대부분의 개념이 C#과 유사하지만, final 키워드가 다소 낯설게 느껴졌다. 이는 C#의 sealed나 readonly 키워드와 유사한 역할을 하는 것 같다. 또한, Java에서 상수를 선언할 때는 static final을 사용하는데, 이는 C#의 const 키워드와 몇 가지 차이점이 있다.
값 할당 시점:
C#의 const는 컴파일 시점에 값이 할당되어야 합니다. 컴파일러는 const 변수를 해당 값으로 대체합니다.
Java의 final은 런타임에 값이 할당될 수 있습니다. final 변수는 선언 시점이나 생성자에서 초기화할 수 있습니다.
값 변경 가능성:
C#의 const는 한 번 할당된 값을 변경할 수 없습니다.
Java의 final도 한 번 할당된 값을 변경할 수 없지만, 객체 참조의 경우 객체 내부의 상태는 변경될 수 있습니다.
적용 대상:
C#의 const는 기본 데이터 타입(primitive types)과 string 타입에만 사용할 수 있습니다.
Java의 final은 기본 데이터 타입, 객체 참조, 클래스, 메서드 등 다양한 대상에 사용할 수 있습니다.
상수 표현식:
C#의 const는 컴파일 시점에 평가되는 상수 표현식(constant expressions)에 사용됩니다.
Java에서는 상수 표현식을 위해 static final 키워드를 함께 사용합니다.
또한, 상속 시 extends 키워드를 사용해야 하는 점과 인터페이스 사용 방법에서도 C#과 다른 점이 보여 주의 깊게 학습해야 할 것 같다.
오늘은 개인 과제, 강의 끝마다 제출하는 숙제 할 때를 제외하면 집중이 잘 안되었던 것같다. 코딩할 때를 제외하고는 집중력이 떨어지는 경향이 있어, 하루 종일 강의만 듣기보다는 오전과 오후로 계획을 나누어 다른 공부를 병행하는 것이 효과적일 것 같다. 오전에는 강의를 듣고, 오후에는 코딩 테스트 연습을, 저녁 이후에는 개인 과제를 진행하는 방식으로 스케줄을 조정해 볼 계획이다.