OPP(객체지향 프로그래밍) ?
부품에 해당하는 객체를 먼저 만들고, 객체를 조립해 프로그램을 완성하는 기법
완성품 객체를 모델링하고, 집합관계에 있는 부품 객체와 사용 관계에 있는 객체를 하나씩 설계 한 후 조립
객체
ⓐ 속성 (=field)
ⓑ 동작 (=method)
객체모델링(Object Modeling) : 현실세계의 객체를 소프트웨어 객체로 설계하는 것
객체가 다른 객체의 기능을 이용하는 것 = method 호출
객체에 도트연산자(.)을 붙이고 메소드를 메소드 이름을 기술
리턴값 = 객체.메소드(매개값1, 매개값2, ....)
객체간의 관계
대부분의 객체는 다른 객체와 관계를 맺고 있다.
ⓐ 집합관계 : 객체는 하나는 부품, 하나는 완성품에 해당
ⓑ 상속관계 : 부모객체를 기반으로 자식객체를 생성
ⓒ 사용관계 : 객체간의 상호작용(객체가 메소드를 호출)
객체지향 프로그래밍의 특징
1. 캡슐화
: 객체의 필드, 메소드를 하나로 묶고, 실제 구현 내용을 감추는 것
외부객체는 객체내부의 구조를 알지 못하며, 객체가 노출해서 제공하는 필드와 메소드만 이용 가능
외부의 잘못된 사용으로 객체가 손상되지 않게 하기 위해 사용 => 접근 제한자 사용
2. 상속
: 상위객체가 가지고 있는 필드와 메소드를 하위 객체가 사용할 수 있도록 해줌
상위객체를 재사용 해서 하위 객체를 쉽고 빨리 설계
반복된 코드의 중복을 줄여줌
상위개체의 수정 > 모든 하위 객체들의 수정 >> 유지보수 시간을 최소화
3. 다형성
: 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질
객체와 클래스
클래스(설계도) ⊃ 필드&메소드
클래스로 만들어진 객체 = 인스턴스
클래스 선언
사용하고자 하는 객체를 구상했다면 그 객체의 대표이름을 하나 결정하고 이것을 클래스 이름으로 한다.
| |
자동차 Car
클래스 이름을 정했다면 "Car.java"로 소스 파일을 생성
소스 파일을 생성했다면 소스파일을 열고 클래스를 선언해준다.
public class Car{
}
public class 는 클래스를 선언할 때 사용
일반적으로는 소스 파일당 하나의 클래스를 선언, 하지만 두 개 이상의 클래스 선언도 가능함
public class Car{
}
class Person {
}
두개 이상의 클래스가 선언된 소스파일을 컴파일 하면 바이트 코드 파일은 클래스를 선언한 개수만큼 생김
위 코드를 컴파일하면 Car.class, Person.class 두 가지가 생성됨
파일 이름과 동일한 이름의 클래스에만 public 접근 제한자 사용 가능
객체 생성과 클래스 변수
컴파일을 하면 설계도 만들어진 상태.
클래스로부터 객체를 생성하려면 new 연산자를 사용
new 클래스();
new 뒤에는 클래스(); 형식의 생성자가 옴
new 연산자로 생성된 객체는 힙 영역에 생성되고, 객체의 주소를 리턴함
클래스의 구성멤버
ⓐ 필드 : 객체의 데이터가 저장되는 곳 int fieldName;
생성자와 메소드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 종료됨
!= 변수(생성자와 메소드 내에서만 사용되고 생성자와 메소드가 실행 종료되면 자동 소멸)
public class Car{
//필드
String company = "kia";
String color = "black";
int MaxSpeed = 350;
}
ⓑ 생성자 : 객체 생성 시 초기화 역할 담당 ClassName() {.... }
new 연산자로 호출되는 { }블록
* 생성자 오버로딩(OverLoading)
: 매개 변수를 달리하는 같은 이름의 생성자를 여러개 선언 하는 것
* 주의할 점은 매개 변수의 타입, 개수, 선언된 순서가 똑같을 경우,
매개변수 이름만 바꾸는 것은 생성자 오버로딩이 아님
* this()
생성자 오버로딩이 많아질 경우 생성자 간의 중복된 코드가 발생할 수 있다.
생성자에서 다른 생성자를 호출할 때에는 this() 코드를 사용함
this() 는 자신의 다른 생성자를 호출하는 코드로 반드시 생성자의 첫 줄에서만 허용된다.
'STUDY > JAVA' 카테고리의 다른 글
JAVA - 정적멤버와 static & 싱글톤(singleton) (0) | 2022.04.18 |
---|---|
JAVA - 메소드 (0) | 2022.04.18 |
JAVA - 열거타입 (0) | 2022.04.13 |
JAVA - 향상된 for문 (0) | 2022.04.13 |
JAVA - 다차원 배열 (0) | 2022.04.13 |