
About OOP
OOP (Object Oriented Programming) : 객체 지향 프로그래밍
Java 는 대표적인 OOP 언어이다.
간단하게 객체 지향 프로그래밍은 객체를 만들고, 이를 조립하는 방식의 프로그래밍이다.
1️⃣ 객체란?
객체 (Object) 란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중, 자신의 속성을 가지고 있고
다른 것과 구분 가능한 것을 말한다.
우리가 살고 있는 세상은 객체로 이루어져 있다.
자동차, 휴대폰, TV 와 같이 물리적으로 존재하는 객체,
이름, 강의, 날씨 등 추상적인 객체가 존재한다.
기본적으로 객체는 '속성' 과 '동작' 을 가진다.
한 예로 '자동차' 라는 객체가 있다면, 속성으로 이름, 가격, 색깔 등이 있을 것이다.
또한 동작으로 달린다, 멈춘다, 방향을 바꾼다 등의 동작을 가진다.
Java 에서는 이 속성을 필드 (field), 동작을 메소드 (method) 라고 정의한다.
즉, 객체는 필드와 메소드로 이루어져 있다.
2️⃣ 객체 지향 프로그래밍의 특징
객체 지향 프로그래밍의 특징으로는 크게 캡슐화, 상속, 다형성이 있다.
이는 Java 를 공부할 때 매우 중요한 개념이므로 꼭 학습하는 것이 좋다.
1. 캡슐화 (Encapsulation)
캡슐화란 객체의 필드와 메소드를 하나로 묶고, 실제 구현 내용을 감추는 것을 말한다.
외부 객체로부터 객체 내부를 보호하며, 객체에서 제공하는 필드와 메소드만 이용할 수 있다.
캡슐화를 하는 이유는 외부에서 객체를 잘못 사용하여 객체가 손상되는 것을 막기 위해서이다.
이는 접근 지정자인 public, private, protected 로 지정할 수 있다.
아래 그림이 캡슐화의 정의를 잘 보여준다.
즉, 선택적으로 객체의 필드와 메소드의 사용 범위를 정할 수 있다.

2. 상속 (Inheritance)
객체 지향 프로그래밍에는 상위 객체와 하위 객체가 있다.
상위 객체는 자신의 필드와 메소드를 하위 객체에 물려줄 수 있고, 이것을 '상속' 이라고 한다.
쉽게 말해 부모가 자식에게 재산을 물려주듯, 상위 객체로부터 하위 객체가 필드와 메소드를 받는 것이다.
하위 객체는 상위 객체로부터 특정 필드와 메소드를 물려받고, 추가적으로 필드와 메소드를 정의할 수 있다.
상속을 이용하면 상위 객체를 재사용하여 하위 객체를 쉽고 빠르게 설계할 수 있다.
또한 기능의 확장 또한 간편해진다.
만약 하위 객체에서 상속 받은 부분의 수정이 필요할 땐, 상위 객체에서만 수정해주면 된다.
이는 불필요한 코드의 재사용을 막고, 훨씬 효율적인 방법이 될 수 있다.

3. 다형성 (Polymorphism)
다형성은 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질이다.
Java 는 다형성을 위해 부모 클래스 또는 인터페이스의 타입 변환을 허용한다.
즉, 부모 타입에는 모든 자식 객체가 대입될 수 있고, 인터페이스 타입에는 모든 구현 객체가 대입된다.
다형성의 효과로는 객체의 부품화가 가능하다는 것이다.
예를 들어 케이크를 만들 때, 케이크 인터페이스 타입을 적용했다면,
이 인터페이스를 구현한 치즈 케이크, 초콜릿 케이크 등은 모두 대입이 가능하다.
3️⃣ 클래스와 객체
객체는 '클래스 (class)' 라는 설계도를 바탕으로 만들어진다.
자동차를 만들 땐 설계도에 따라, 케이크를 만들 땐 레시피를 따라 만드는것과 같다.
클래스에는 앞서 말한 '필드' 와 '메소드' 가 정의된다.
또한 클래스로부터 만들어진 객체를 해당 클래스의 '인스턴스'라고 부른다.
이렇게 클래스를 만들어 여러 객체를 생성할 수 있으며, 이는 매우 효율적이다.
같은 인스턴스 타입을 클래스 하나로 여러 개 만들 수 있기 때문이다.
따라서 객체 지향 프로그래밍에서는 클래스를 만들고 클래스를 통해 객체를 생성한다.
또한 객체들을 적절히 이용함으로써 프로그램이 완성된다.
클래스에 대한 자세한 내용은 다음에 다루도록 하겠다.

About OOP
OOP (Object Oriented Programming) : 객체 지향 프로그래밍
Java 는 대표적인 OOP 언어이다.
간단하게 객체 지향 프로그래밍은 객체를 만들고, 이를 조립하는 방식의 프로그래밍이다.
1️⃣ 객체란?
객체 (Object) 란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중, 자신의 속성을 가지고 있고
다른 것과 구분 가능한 것을 말한다.
우리가 살고 있는 세상은 객체로 이루어져 있다.
자동차, 휴대폰, TV 와 같이 물리적으로 존재하는 객체,
이름, 강의, 날씨 등 추상적인 객체가 존재한다.
기본적으로 객체는 '속성' 과 '동작' 을 가진다.
한 예로 '자동차' 라는 객체가 있다면, 속성으로 이름, 가격, 색깔 등이 있을 것이다.
또한 동작으로 달린다, 멈춘다, 방향을 바꾼다 등의 동작을 가진다.
Java 에서는 이 속성을 필드 (field), 동작을 메소드 (method) 라고 정의한다.
즉, 객체는 필드와 메소드로 이루어져 있다.
2️⃣ 객체 지향 프로그래밍의 특징
객체 지향 프로그래밍의 특징으로는 크게 캡슐화, 상속, 다형성이 있다.
이는 Java 를 공부할 때 매우 중요한 개념이므로 꼭 학습하는 것이 좋다.
1. 캡슐화 (Encapsulation)
캡슐화란 객체의 필드와 메소드를 하나로 묶고, 실제 구현 내용을 감추는 것을 말한다.
외부 객체로부터 객체 내부를 보호하며, 객체에서 제공하는 필드와 메소드만 이용할 수 있다.
캡슐화를 하는 이유는 외부에서 객체를 잘못 사용하여 객체가 손상되는 것을 막기 위해서이다.
이는 접근 지정자인 public, private, protected 로 지정할 수 있다.
아래 그림이 캡슐화의 정의를 잘 보여준다.
즉, 선택적으로 객체의 필드와 메소드의 사용 범위를 정할 수 있다.

2. 상속 (Inheritance)
객체 지향 프로그래밍에는 상위 객체와 하위 객체가 있다.
상위 객체는 자신의 필드와 메소드를 하위 객체에 물려줄 수 있고, 이것을 '상속' 이라고 한다.
쉽게 말해 부모가 자식에게 재산을 물려주듯, 상위 객체로부터 하위 객체가 필드와 메소드를 받는 것이다.
하위 객체는 상위 객체로부터 특정 필드와 메소드를 물려받고, 추가적으로 필드와 메소드를 정의할 수 있다.
상속을 이용하면 상위 객체를 재사용하여 하위 객체를 쉽고 빠르게 설계할 수 있다.
또한 기능의 확장 또한 간편해진다.
만약 하위 객체에서 상속 받은 부분의 수정이 필요할 땐, 상위 객체에서만 수정해주면 된다.
이는 불필요한 코드의 재사용을 막고, 훨씬 효율적인 방법이 될 수 있다.

3. 다형성 (Polymorphism)
다형성은 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질이다.
Java 는 다형성을 위해 부모 클래스 또는 인터페이스의 타입 변환을 허용한다.
즉, 부모 타입에는 모든 자식 객체가 대입될 수 있고, 인터페이스 타입에는 모든 구현 객체가 대입된다.
다형성의 효과로는 객체의 부품화가 가능하다는 것이다.
예를 들어 케이크를 만들 때, 케이크 인터페이스 타입을 적용했다면,
이 인터페이스를 구현한 치즈 케이크, 초콜릿 케이크 등은 모두 대입이 가능하다.
3️⃣ 클래스와 객체
객체는 '클래스 (class)' 라는 설계도를 바탕으로 만들어진다.
자동차를 만들 땐 설계도에 따라, 케이크를 만들 땐 레시피를 따라 만드는것과 같다.
클래스에는 앞서 말한 '필드' 와 '메소드' 가 정의된다.
또한 클래스로부터 만들어진 객체를 해당 클래스의 '인스턴스'라고 부른다.
이렇게 클래스를 만들어 여러 객체를 생성할 수 있으며, 이는 매우 효율적이다.
같은 인스턴스 타입을 클래스 하나로 여러 개 만들 수 있기 때문이다.
따라서 객체 지향 프로그래밍에서는 클래스를 만들고 클래스를 통해 객체를 생성한다.
또한 객체들을 적절히 이용함으로써 프로그램이 완성된다.
클래스에 대한 자세한 내용은 다음에 다루도록 하겠다.