객체지향 프로그래밍(OOP)
객체지향 프로그래밍은 실제 사물의 상태와 행동을 분석하고, 실제 세계를 모델링하기 위해 추상화를 사용하는 프로그래밍이다.
상태(데이터)와 행동(기능)으로 구분할 수 있으면 객체가 될 수 있다.
- 객체지향언어는 상호작용하는 객체들로 이루어진 언어로 코드의 재사용성이 높고 유지보수가 용이하다는 장점이 있다.
- 제어나와 메서드를 이용한 정보은닉화, 캡슐화를 통해 신뢰성 있는 프로그래밍이 가능하고, 코드의 중복을 줄여줌으로써 프로그램 오작동을 문제를 방지할 수 있다.
- 고객의 니즈를 파악해 객체를 설계 및 생성해야 한다. (서비스 중심의 설계 > 데이터 중심의 설계)
객체 생성
- 공통된 데이터 구조(변수)와 기능(메서드)를 추출
- 객체 생성을 위한 설계도인 클래스를 생성
- 클래스 정의 후 클래스를 통해 객체를 생성
- 클래스는 데이터(변수)와 기능(메서드)의 결합으로 구성되어있다.
- 클래스는 객체를 생성하는데 사용될 뿐, 객체 그 자체는 아님.
- 객체가 생성될 때마다 새로운 메모리가 할당 (ex. 회원가입 버튼을 누를 때마다 회원 객체가 하나씩 생성)
- 인스턴스 변수를 통해 주소값을 찾아간다.
- 객체 간 관계 : ㅡ> 연관관계, ----> 의존관계
연관관계 의존관계
Class A ClassB public void A(B b)
B b;
객체 간에 전반적으로 사용할 것으로 예상되면 연관관계로 가져오고, 일부분만 사용될 것으로 예상되면 의존관계로 가져온다.
- 예제
결과 : 면적 : 25
- Rectangle클래스에 면적을 구하기 위한 가로(a) 세로(b) 면적(z) 변수를 선언
- 면적을 구하기 위한 메서드(기능)와 출력을 위한 출력 메서드 구현
- main()에서 new연산자를 통해 객체를 생성하여 주소값을 참조변수 r에 대입
- 참조변수 r이 참조하고 있는 Rectangle 인스턴스의 메서드 호출 ( 참조변수.메서드 )
객체 배열
객체 역시 배열을 사용하여 다루는 것이 가능하다. 많은 수의 객체를 다루어야 할 경우 객체 배열을 사용할 수 있다.
- 예제
- 배열은 같은 타입의 데이터를 하나로 묶었다면 객체 배열은 참조 변수들을 하나로 묶었다고 생각하면 된다.
- 객체 배열도 같은 타입의 객체들만 저장할 수 있지만 다형성을 이용하면 다른 타입의 객체도 다룰 수 있다.
생성자 (Constructor)
- 생성자의 이름은 클랙스의 이름과 같아야 한다.
- 멤버 변수를 초기화하는 역할을 수행
- 새로운 객체가 생성이 되면 자동으로 호출된다.
- 생성자는 리턴값이 없다.
- 매개변수(parameter)로 여러 개가 들어올 수 있다.
- 예제
- 같은 이름의 생성자를 매개변수(parameter)의 수와 데이터타입을 다르게 하여 여러 개 만들 수 있다. (오버로딩)
- 생성자를 정의하지 않을 경우 객체 생성 시 컴파일러가 디폴트 생성자를 자동으로 생성해 준다.
- 매개변수(parameter)를 가진 생성자만 정의할 경우 컴파일러는 디폴트 생성자를 생성해주지 않는다. (주의사항)
- 되도록 디폴트생성자를 만드는 습관을 가지도록 한다. (안정적인 소프트웨어)
- 객체를 생성할 때 가장 먼저 생성자에 주목해야 한다. (생성자 자동호출, 초기화)
- API의 경우 생성자가 가이드라인의 역할을 한다.
'Java' 카테고리의 다른 글
[Java] 객체지향(3) 상속 정리 (0) | 2020.07.15 |
---|---|
[Java] 객체지향(2) 연습 정리 (0) | 2020.07.11 |
[Java] 배열의 정렬(sort) 정리 (0) | 2020.07.11 |
[Java] 배열(Array) 정리 (0) | 2020.07.10 |
[Java] Call by Value , Call by Reference 정리 (0) | 2020.07.10 |