물리적으로 존재하거나 개념적인 것 중에서 다른 것과 식별 가능한 것 - 물리적 : 자동차, 자전거, 책, 사람 등 - 개념적 : 학과, 강의, 주문 등
속성과 동작으로 구성 (각각 필드와 메소드라 부름) - 속성 : 이름, 나이 등 - 동작 : 웃다, 걷다 등
현실 세계의 객체를 소프트웨어 객체로 설계하는 것을 객체 모델링이라고 함
객체의 상호작용
객체들 사이의 상호작용 수단은 메소드이고, 객체가 다른 객체의 기능을 이용할 때 메소드를 호출함
//메소드 호출 형태
메소드(매개값1, 매개값2..)
메소드 이름과 함께 전달하고자 하는 데이터를 괄호 안에 기술하는데, 이러한 데이터를 매개값이라 함 (메소드가 실행할 때 필요한 값)
리턴값은 메소드 실행의 결과이며, 호출한 곳에서 변수로 대입받아 사용
int result = add(10, 20);
객체 간의 관계
객체는 단독으로 존재할 수 있지만 대부분 다른 객체와 관계를 맺고 있음
다른 객체의 필드를 읽고 변경하거나 메소드를 호출하는 사용 관계 부모의 특징을 물려 받는 상속 관계 완성품과 부품의 관계인 집합 관계
객체 지향 프로그래밍의 특징
캡슐화 - 객체의 필드, 메소드를 하나로 묶고 실제 구현 내용을 외부에 감추는 것 - 외부 객체는 객체 내부의 구조를 알지 못하며 객체가 노출해서 제공하는 필드와 메소드만 이용할 수 있음 - 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 하기 위해 사용 - 캡슐화된 멤버를 노출시킨 것인지 숨길 것인지 결정하기 위해 접근 제한자 사용
상속 - 부모 객체가 자기가 가지고 있는 필드와 메소드를 자식 객체가 사용할 수 있도록 하는 것 - 자식 객체에서 중복 코딩을 하지 않아도 되므로 코드의 재사용성을 높여줌 - 부모 객체의 필드와 메소드를 수정하면 자식 객체까지 수정되므로 유지 보수 시간 최소화
다형성 - 사용 방법은 동일하지만 실행 결과가 다양하게 나오는 성질 - 자동차의 부품을 교환하면 성능이 다르게 나오듯이 프로그램을 구성하는 객체를 바꾸면 프로그램 성능이 다르게 나올 수 있음 - 다형성을 구현하기 위해서는 자동 타입 변환과 재정의 기술이 필요한데, 이 기술은 상속과 인터페이스 구현을 통해 얻어짐