
Java라는 객체 지향 언어를 공부하게 되면서, 코드를 짜도 객체 지향적으로 코드를 작성했는 지에 대한 고민을 하게됐다.
어떻게 하면 객체 지향 언어를 통해서 코드를 객체 지향적으로 설계할 수 있을까?
객체 지향 언어
객체 지향 언어란 객체를 생성하고 조작하며 객체 사이의 관계를 맺음으로 다수의 객체가 함께 실행될 수 있게 하는 언어이다. 대표적인 예시로는 C++, Java가 존재한다.
객체란?
객체를 지향하는 언어를 공부하기 전에 객체 (Object) 라는 개념을 선행해서 학습을 하는 것이 좋다고 생각한다.
객체란 우리가 일상 생활에서 쉽게 접할 수 있는 모든 물건이 객체가 될 수 있다. 단순한 사물뿐만 아니라 생명체와 같은 모든 것들을 의미한다.
일상 생활에서 어떠한 물건을 봤을 때, 그 물건이 단 하나의 재료로만 이뤄져 있는 것을 보는 것은 쉽지 않을 것이다.
연필을 봐도, 연필이 쓰여질 수 있도록 하는 흑연, 연필을 쉽게 쓰게하고 오래 쓸 수 있도록 만들어 주는 나무, 잘못 썼다면 지울 수 있도록하는 지우개로 이루어져 있다. 이러한 방법을 통해서 객체를 확인하고 이해하기 쉬워진다.
객체지향언어
소프트웨어를 객체 지향 방식으로 설계한 후 객체 지향의 특성(클래스, 객체, 상속, 추상화 등)을 잘 구현하는 데 사용되는 컴퓨터 프로그래밍 언어이다.
특징
객체 지향 언어인 Java의 특징은 캡슐화, 상속, 다형성, 추상화같은 특징을 갖고있다.
캡슐화는 데이터의 구조, 값, 상태를 하나의 캡슐로 만드는 것이다. 이를 통해 외부에서 관측했을 때, 값을 확인할 수 없다. 물론 이와 같은 구조는 객체를 올바르게 선언했을때 효과가 있다.
상속은 상위 클래스,즉 부모 클래스의 모든 특징과 속성을 하위 클래스, 자식 클래스가 모두 이어받는 특징이다. 자식클래스도 부모 클래스의 속성을 지니게된다.
다형성은 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있는 특징이다.
예를 들자면, 한 사람은 어떤 학교의 학생일 수도있고 어느 동아리의 멤버일 수도 있다는 점이 다형성에 해당된다.
추상화는 객체의 공통적인 속성이나 기능을 추출하여 정의하는 것이다.
나의 생각
그렇다면 객체 지향적으로 프로그래밍을 한다는 것(OOP)은 어떤 사물이나 현상을 분석하여 객체로 만들고, 중복되는 내용이나 공통점들이 발생하면 부모 클래스로 선언해서 자식 클래스로 상속을 통해서 구현을 진행하는 것이다. 또한, 발생할 수 있는 상황이나 예외처리에 대해서 오랜시간 고민하여 테스트 코드를 작성하고 개발을 해야 할 것같다는 생각이 들었다.
마치면서
이번에 우아한 테크코스의 프리코스를 마무리가 됐는데, 진행하는 동안 Java에 대해서 너무 급하게 학습하고 적용하느라 어설픈 부분들이 많다고 생각한다. 하지만 1주차의 나와 지금의 나의 실력 차이는 비교하기 힘들 정도로 많이 발전하게되었다.
단순히 객체를 분리하는 것 뿐만이 아니라 계층과 책임을 나눠 하나의 객체에서는 하나의 역할만 할 수 있도록 설계해야 할 것이며, 의존성을 주입하고 객체의 상태를 관리하기 위해서 코드를 작성해야 할 것이다.
다음 포스팅에서는 디자인 패턴에 대해서 알아 볼 예정이다. 아직 잘 아는 부분이 없어 포스팅 전까지 책과 구글링을 통해서 학습을 진행하고 기록할 예정이다.
'Lang' 카테고리의 다른 글
[Java] Stream 사용법 (0) | 2023.10.30 |
---|---|
[Java] equals가 안돼요... 어떻게 해야하나요? (1) | 2023.10.25 |

Java라는 객체 지향 언어를 공부하게 되면서, 코드를 짜도 객체 지향적으로 코드를 작성했는 지에 대한 고민을 하게됐다.
어떻게 하면 객체 지향 언어를 통해서 코드를 객체 지향적으로 설계할 수 있을까?
객체 지향 언어
객체 지향 언어란 객체를 생성하고 조작하며 객체 사이의 관계를 맺음으로 다수의 객체가 함께 실행될 수 있게 하는 언어이다. 대표적인 예시로는 C++, Java가 존재한다.
객체란?
객체를 지향하는 언어를 공부하기 전에 객체 (Object) 라는 개념을 선행해서 학습을 하는 것이 좋다고 생각한다.
객체란 우리가 일상 생활에서 쉽게 접할 수 있는 모든 물건이 객체가 될 수 있다. 단순한 사물뿐만 아니라 생명체와 같은 모든 것들을 의미한다.
일상 생활에서 어떠한 물건을 봤을 때, 그 물건이 단 하나의 재료로만 이뤄져 있는 것을 보는 것은 쉽지 않을 것이다.
연필을 봐도, 연필이 쓰여질 수 있도록 하는 흑연, 연필을 쉽게 쓰게하고 오래 쓸 수 있도록 만들어 주는 나무, 잘못 썼다면 지울 수 있도록하는 지우개로 이루어져 있다. 이러한 방법을 통해서 객체를 확인하고 이해하기 쉬워진다.
객체지향언어
소프트웨어를 객체 지향 방식으로 설계한 후 객체 지향의 특성(클래스, 객체, 상속, 추상화 등)을 잘 구현하는 데 사용되는 컴퓨터 프로그래밍 언어이다.
특징
객체 지향 언어인 Java의 특징은 캡슐화, 상속, 다형성, 추상화같은 특징을 갖고있다.
캡슐화는 데이터의 구조, 값, 상태를 하나의 캡슐로 만드는 것이다. 이를 통해 외부에서 관측했을 때, 값을 확인할 수 없다. 물론 이와 같은 구조는 객체를 올바르게 선언했을때 효과가 있다.
상속은 상위 클래스,즉 부모 클래스의 모든 특징과 속성을 하위 클래스, 자식 클래스가 모두 이어받는 특징이다. 자식클래스도 부모 클래스의 속성을 지니게된다.
다형성은 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있는 특징이다.
예를 들자면, 한 사람은 어떤 학교의 학생일 수도있고 어느 동아리의 멤버일 수도 있다는 점이 다형성에 해당된다.
추상화는 객체의 공통적인 속성이나 기능을 추출하여 정의하는 것이다.
나의 생각
그렇다면 객체 지향적으로 프로그래밍을 한다는 것(OOP)은 어떤 사물이나 현상을 분석하여 객체로 만들고, 중복되는 내용이나 공통점들이 발생하면 부모 클래스로 선언해서 자식 클래스로 상속을 통해서 구현을 진행하는 것이다. 또한, 발생할 수 있는 상황이나 예외처리에 대해서 오랜시간 고민하여 테스트 코드를 작성하고 개발을 해야 할 것같다는 생각이 들었다.
마치면서
이번에 우아한 테크코스의 프리코스를 마무리가 됐는데, 진행하는 동안 Java에 대해서 너무 급하게 학습하고 적용하느라 어설픈 부분들이 많다고 생각한다. 하지만 1주차의 나와 지금의 나의 실력 차이는 비교하기 힘들 정도로 많이 발전하게되었다.
단순히 객체를 분리하는 것 뿐만이 아니라 계층과 책임을 나눠 하나의 객체에서는 하나의 역할만 할 수 있도록 설계해야 할 것이며, 의존성을 주입하고 객체의 상태를 관리하기 위해서 코드를 작성해야 할 것이다.
다음 포스팅에서는 디자인 패턴에 대해서 알아 볼 예정이다. 아직 잘 아는 부분이 없어 포스팅 전까지 책과 구글링을 통해서 학습을 진행하고 기록할 예정이다.
'Lang' 카테고리의 다른 글
[Java] Stream 사용법 (0) | 2023.10.30 |
---|---|
[Java] equals가 안돼요... 어떻게 해야하나요? (1) | 2023.10.25 |