본문 바로가기

Java

[Java] 객체지향(1) 정리

 

객체지향 프로그래밍(OOP)

객체지향 프로그래밍은 실제 사물의 상태와 행동을 분석하고, 실제 세계를 모델링하기 위해 추상화를 사용하는 프로그래밍이다.

상태(데이터)와 행동(기능)으로 구분할 수 있으면 객체가 될 수 있다.

  • 객체지향언어는 상호작용하는 객체들로 이루어진 언어로 코드의 재사용성이 높고 유지보수가 용이하다는 장점이 있다.
  • 제어나와 메서드를 이용한 정보은닉화, 캡슐화를 통해 신뢰성 있는 프로그래밍이 가능하고, 코드의 중복을 줄여줌으로써 프로그램 오작동을 문제를 방지할 수 있다.
  • 고객의 니즈를 파악해 객체를 설계 및 생성해야 한다. (서비스 중심의 설계 > 데이터 중심의 설계)

객체 생성

  1. 공통된 데이터 구조(변수)와 기능(메서드)를 추출
  2. 객체 생성을 위한 설계도인 클래스를 생성
  3. 클래스 정의 후 클래스를 통해 객체를 생성
  • 클래스는 데이터(변수)와 기능(메서드)의 결합으로 구성되어있다.
  • 클래스는 객체를 생성하는데 사용될 뿐, 객체 그 자체는 아님.
  • 객체가 생성될 때마다 새로운 메모리가 할당 (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