객체지향 프로그래밍은 시간과 비용에 대한 효율성을 더 좋게 만드는 프로그래밍 기법이다.
객체(Object) :
실제로 존재하는 것. 클래스가 제품 설계도라면 객체는 제품이라 할 수 있다. 클래스와 필드 포스팅에서 더 쓸 예정
데이터와 메소드를 묶은 것을 말한다. 객체의 외부에서 데이터에 직접 접근하지 못하게 하고 메소드를 통해서만 조작할 수 있다.
정보가 어떻게 구현되어 있는지 외부에 숨기고 대신 외부에서 사용할 수 있는 인터페이스를 제공한다. 중요한 데이터를 그대로 노출했다가 정보가 손상되거나 오용될 수 있고, 내부를 건드리게 되면 나중에 유지보수나 업데이트가 어려워지기 때문이다.
//추상화(Abstraction) :
대상에서 특징만 뽑아내는 것. 복잡한 세부사항을 숨기고 주요한 기능에 집중할 수 있게 해주는 개념이다.
한 클래스가 가지고 있는 특징들을 다른 클래스가 물려받는 것을 말한다. 부모 클래스의 기능들을 가지고 와서 기존 클래스와 구분되는 특징을 추가할 수 있다. => 재사용 + 유연성
하나의 클래스나 함수가 다양한 방식으로 동작하는 것을 말한다. 같은 이름의 메소드를 호출해도 상태에 따라 메소드를 선택하여 호출하는 기능
=> 메소드 오버라이딩(Overriding), 메소드 오버로드(Overload)
오버라이딩(Overriding) : 상속받은 자식 클래스가 부모 클래스에서 정의된 함수를 그대로 가지고 와(같은 이름 사용) 다른 행위를 하게 재정의한다. 이름이 같지만 오버라이딩 되어있다면 자식 클래스에 있는 것이 호출된다.
// 부모클래스의 메소드명과 같고 해당 메소드의 매개변수가 반드시 있어야 하며 리턴타입도 같아야 함. 기능 추가가 가능
// 부모 클래스의 메소드는 숨겨지고 자식 클래스의 메소드만 사용 가능
오버로드(Overload) : 같은 함수명을 사용하는데 데이터 타입, 매개변수의 갯수를 다르게 해서 어떤 인자를 몇 개 넘기느냐에 따라 동작을 다르게 하는 것을 말한다.