[TIL | 2024-08-24] 메서드, 프로그램의 기능적 분할, 객체 지향 프로그래밍
서론
오늘은 자바의 기본적인 내용인 메서드와 객체지향 프로그래밍에 대해서 공부를 하였고 프로그램의 기능적 분할이라는 개념을 배웠다.
본론
메서드
메서드란 특정한 기능을 수행하는 코드를 하나로 묶어 재사용이 가능하도록 만든 코드 블럭을 의미한다. 메서드를 사용하게 된다면 중복코드를 줄일 수 있고 코드를 재사용할 수 있도록 해주며 유지보수와 가독성이 높아진다는 장점을 가지고 있다.
프로그램의 기능적 분할
프로그램의 기능적 분할이란 복잡한 프로그램을 작은 부분들로 나누는것을 의미한다. 이렇게 작은 부분으로 나누면 프로그램을 이해하고 관리하기가 쉬워진다.
예를 들어, 피자를 한 판 시켰다고 생각해보자. 피자를 통째로 먹으려면 힘들겠지만 작은 조각으노 나누어 먹게된다면 각 조각은 먹기 쉬워질것이다. 프로그램도 마찬가지로 프로그램을 한 덩어리로 보는것이 아니라 작은 부분들로 나누게 된다면 관리하기가 쉬워지고 전체적인 유지보수가 쉬워질 것이다.
즉, 복잡한 프로그램을 작은 부분들로 나누어 각각의 부분들이 독립적으로 작업할 수 있으며, 필요할 때만 수정하거나 개선하여 프로그램의 구조를 명확하고 코드의 재사용성과 가독성을 높일 수 있다.
객체지향 프로그래밍(OOP) 개념 정리
클래스
현실 세계에서 자동차를 만들려면 자동차의 설계도가 필요하듯이 객체지향 프로그래밍에서도 객체를 생성하려면 설계도에 해당하는 클래스가 필요하다. 클래스는 객체를 생성하기 위한 '틀'이나 '설계도'도로 클래스는 객체가 가져야할 속성과 기능을 정의하고 있다.
예를 들어, 자동차를 만든다고 가정해보자. 자동차를 만들기 위해서는 자동차의 모양과 기능이 정리된 설계도가 필요하고 이 설계도를 바탕으로 자동차를 만들 수 있다. 마찬 가지로 자바의 클래스는 사용자가 정의한 어떠한 속성과 기능을 바탕으로 특정한 기능을 가진 무언가를 만들 수 있도록 도와준다.
이처럼 사용자가 정의한 클래스 내부에는 다양한 속성과 기능들이 작성될 수 있다. 자바에서는 클래스 내부에 작성된 속성을 멤버 변수 또는 필드라고 표현하며 클래스 내부에 작성된 기능을 멤버 메서드라고 표현한다. 또한 클래스를 통해 만들어진 실체를 객체 또는 인스턴스 라고 표현하고 클래스로 부터 객체를 만드는 과정을 인스턴스화라고 부른다.
객체
쉽게 설명하여 객체는 현실 세계의 사물이나 개념을 속성과 기능으로 추상화하여 컴퓨터로 옮겨온것을 말한다.
먼저, 객체의 사전적인 의미는 물리적으로 존재하거나 개념적으로 존재하는 모든 것을 객체라고 말한다. 물리적으로 존재하는 객체는 우리가 실제로 눈으로 볼 수 있거나 만질 수 있는 것을 말한다. 예를 들어 자동차, 노트북, 책상, 의자 등은 그 자체로 존재하며 공간을 차지하고 우리가 식별할 수 있다.
그렇다면 개념적으로 존재하는 객체란 우리가 실제로 눈으로 보거나 만질 수는 없지만, 개념적으로 존재하는 것을 말한다 예를 들어, 주문, 강의, 수학 공식 등은 물리적 실체는 없지만 개념적으로 존재하며 우리가 식별이 가능하다.
객체지향 프로그래밍에서 의미하는 객체는 현실 세계의 객체를 추상화하여 컴퓨터로 옮겨온 것을 말한다. 조금 더 쉽게 설명하여 현실 세계의 존재하는 사물이나 개념들을 프로그램안에서 쉽게 사용할 수 있는 형태로 변환한 것을 말한다.
현실 세계의 물건과 개념은 매우 복잡하며, 이를 프로그램 안에서 표현하기에는 한계가 있다. 그래서 컴퓨터로 옮겨오는 과정에서 현실 세계의 물건과 개념을 속성과 기능으로 나누어 표현한다. 속성은 객체가 가지고 있는 정보나 특징을 의미하고, 기능은 객체가 수행할 수 있는 작업이나 동작을 의미한다. 이렇게 속성과 기능으로 나누어 표현함으로써 복잡한 개념을 프로그램 안에서 쉽게 다룰 수 있게 된다. 이 과정을 객체지향 프로그래밍 에서는 추상화라고 표현한다.
이제 객체는 클래스라는 개념과 연관되게 된다. 현실 세계에서 객체를 만들때 특정 과정을 거쳐야합니다. 예를 들어 자동차를 만들때 설계도를 통하여 실제 자동차를 만드는듯이 객체지향 프로그래밍에서 객체를 만들때 객체의 설계도인 클래스가 필요하며 이 클래스를 바탕으로 실제 객체가 만들어진다.
객체와 인스턴스는 동일한 의미로 사용하지만 이 둘의 차이점은 주로 인스턴스는 객체보다 좀 더 관계에 초점을 맞춘 단어이다. 예를 들어 `Student1` 은 `Student`의 객체이다. 라고 말하는 대신 `Student1` 은 `Student`의 인스턴스이다라고 특정 클래스와 관계를 명확하게할때 인스턴스 용어를 사용한다.
캡슐화
캡슐화는 데이터를 외부로부터 보호하고 클래스 내부에서만 접근할 수 있는 기법을 말한다. 캡슐화는 접근 지정자를 사용하여 구현한다.
접근 지정자:
-
- public: 모든 클래스에서 접근 가능.
- protected: 같은 패키지 또는 상속 관계에서 접근 가능.
- default: 같은 패키지 내에서 접근 가능.
- private: 해당 클래스 내부에서만 접근 가능.
상속
상위 클래스의 속성과 메서드를 하위 클래스가 물려받아 재사용하는 기능이다.
- 상속(Inheritance)
- 상위 클래스(부모 클래스)의 속성과 메서드를 하위 클래스가 물려받아 재사용하는 기능.
- 오버라이딩(Overriding): 상위 클래스의 메서드를 하위 클래스에서 재정의.
- 다중 상속: 자바에서는 인터페이스를 통해 다중 상속과 유사한 기능 구현 가능.
- 추상화(Abstraction)
- 불필요한 세부 사항을 숨기고, 중요한 개념이나 기능만 노출하는 기법.
- 다형성(Polymorphism)
- 하나의 객체가 여러 형태를 가질 수 있는 기능.
- 오버라이딩과 관련이 깊으며, 런타임 시 다형성을 구현.
- 생성자(Constructor)
- 객체가 생성될 때 호출되어 멤버 필드를 초기화하는 메서드.
- 클래스 이름과 동일하며 반환형이 없음.
- 오버로딩 가능: 동일한 이름으로 여러 생성자 정의 가능.
- 디폴트 생성자: 매개변수가 없는 생성자이며, 다른 생성자가 없을 때 컴파일러가 자동 생성.
- toString() 메서드
- 객체를 문자열로 표현할 때 자동 호출되는 메서드로, 객체의 정보를 문자열로 반환.
- this 레퍼런스
- 클래스 내에서 객체 자신을 가리키는 레퍼런스.
- 매개변수와 멤버 필드를 구분하거나, 객체 자신을 반환할 때 사용.
결론
이번 공부를 통하여 자바의 기본적인 메서드와 객체지향 프로그래밍의 개념을 이해할 수 있었다.. 학습한 내용이나 배운 내용을 그날 바로 바로 정리해야겠다라는 생각이 들었다.. 빠르게 진도를 나가다보니 바로 정리하지 않으면 엄청 밀리게된다...