객체지향 프로그래밍이란?
부품에 해당하는 객체를 먼저 만들고, 객체들을 하나씩 조립해 완성된 프로그램을 만드는 기법
객체란 ?
물리적으로 존재하거나 개념적인 것 중에 다른 것과 식별 가능한 것 ex) 자동차, 자전거, 책
객체 : 속성 + 동작
객체모델링이란 ?
객체의 속성과 동작을 추려내서 필드와 메서드로 정의하는 과정
객체의 상호작용
객체들 사이의 상호작용 수단은 "메서드"이다. 객체가 다르 객체의 기능을 이용할 때 메서드를 호출한다.
메서드와 함께 전달하고자 하는 데이터를 괄호 안에 기술하는데 이 데이터는 매개변수!
객체 간의 관계
1. 집합 관계
완성품과 부품의 관계
ex) 자동차, 부품들의 관계
2. 사용 관계
다른 객체의 필드를 읽고 변경하거나 메서드를 호출하는 관계
ex ) 사람이 자동차에게 달린다, 멈춘다 -> 사람과 자동차는 사용 관계
3. 상속 관계
부모와 자식 관계
ex) 자동차가 기계의 필드와 메서드를 물려받을 때 기계와 자동차의 관계
객체지향 프로그래밍의 특징
1. 캡슐화
객체의 필드와 메서드를 하나로 묶고 실제 구현 내용을 외부에 감추는 것
외부 객체에서 객체 네부의 구조를 알지 못하게 하여 보호한다.
보호하는 이유는 외부에서의 잘못된 사용으로 인해 객체가 손상되지 않도록 하는 것
캡슐화된 멤버를 노출시킬 것인지 결정하기 위해 접근 제한자를 사용
2. 상속
부모 객체가 가지고 있는 필드와 메서드를 자식 객체에 물려주어 자식 객체가 사용하도록 하는 것
코드의 재사용성을 높이고, 유지 보수 기간을 최소화 시킨다.
3. 다형성
사용 방법은 동일하지만 실행 결과가 다양하게 나오는 성질
자동차의 부품을 교환하면 성능이 다르게 나오듯 객체를 바꾸면 성능이 다르게 나옴
상속과 인터페이스 구현을 통한 자동 타입 변환과 재정의 기술이 필요함
객체와 클래스
클래스를 사용해 객체를 생성
클래스로부터 객체를 만드는 과정 : 인스턴스화
클래스 선언
주의할 점: 소스 파일명과 동일한 클래스만 공개 클래스로 선언 가능 !
클래스 변수 = new 클래스(); // 객체 선언 방식
같은 클래스에서 여러 객체를 생성하면 각 객체의 고유한 주소를 참조한다.
클래스의 구성 멤버
구성 멤버 : 생성자, 필드, 메서드
필드 : 객체의 데이터를 저장
생성자 : new 연산자로 객체를 생성할 때 초기화 역할을 담당.
메서드 : 객체가 수행할 동작
생성자 선언과 호출
클래스 변수 = new 클래스(); // 클래스() 부분에서 생성자 호출이 이루어 진 것
객체를 초기화하기 위해 생성자를 아래와 같이 직접 선언할 수 있다.
public Book() {
// TODO Auto-generated constructor stub
}
public Book(String name, int price) {
// TODO Auto-generated constructor stub
this.name = name;
this.price = price;
}
Book[] books = new Book[3];
books[0] = new Book("Java", 30000);
books[1]= new Book("jsp", 20000);
books[2] = new Book("oracle", 15000);
생성자 오버로딩
매개변수의 타입과 이름을 다르게 하여 같은 이름의 생성자를 만드는 것
가변길이 매개변수
메서드를 호출할 때는 매개변수의 개수에 맞게 매개값을 제공해야 하지만, 메서드가 가변길이 매개변수를 가지고 있다면 아래와 같이 선언한다.
int sum(int ... values) {
return price;
}
메서드 생성시 void값이 아니면 return값은 필수 존재 !
'자바' 카테고리의 다른 글
Eclipse - spring 설정(sts, pom.xml_ lombok, sevlet, 톰캣 추가) (0) | 2023.11.07 |
---|---|
[JAVA] 검색 기능 강화 시킨 컬렉션 TreeSet, TreeMap (0) | 2023.09.21 |
[JAVA] 컬렉션 자료구조 (Map, Hashtable, properties) (0) | 2023.09.21 |
[JAVA] 컬렉션 자료구조 (List, Set) (0) | 2023.09.21 |
[JAVA] 제네릭 (0) | 2023.09.20 |