클래스와 객체1

이유빈
이유빈 |
클래스와 객체1

객체지향 프로그래밍

  • 객체를 사용하는 프로그래밍 방식
  • 실세계와 비슷하게 소프트웨어를 작성하자는 방법론
  • 객체들은 객체 나름대로의 고유한 기능을 수행하며 다른 객체들과 상호작용
  • 객체들은 메시지를 통하여 상호작용함
  • 데이터와 함수를 하나로 묶어서 생각하는 방법
  • 객체지향 언어는 캡슐화, 상속, 다형성, 추상화로 정의됨

객체

  • 객체는 상태와 동작을 가지고 있음
  • 객체의 상태(state)는 객체의 속성임
  • 객체의 동작(behavior)은 객체가 취할 수 있는 동작임

절차지향 프로그래밍

  • 절차 지향 프로그래밍은 프로지서(procedure)에 기반을 둠
  • “절차”라는 용어는 “procedure”를 번역한 것이며, 프로시저는 함수 또는 서브 루틴을 뜻함
  • 절차지향 프로그래밍 → 함수들의 집합으로 이루어짐
  • 문제점
    • 서로 관련있는 함수와 데이터가 분리됨
    • 예) 원의 반지름을 나타내는 radius와 이 데이터를 사용하는 함수 getCircleArea()가 분리됨

객체지향이 나오게 된 동기

  • 컴퓨터 소프트웨어를 하드웨어처럼 원하는 함수를 조립해 만들수 없을까?
  • 코드와 데이터를 묶을 수 있는 방법이 없을까?

캡슐화

  • 데이터와 함수(객체) 또는 데이터와 알고리즘으로 묶는 것을 캡슐화라고 함
  • 캡슐화의 목적
    • 서로 관련된 데이터와 알고리즘을 하나로 묶는 것
    • 객체를 캡슐로 싸서 객체의 내부를 보호하는 것 즉, 객체의 실제 구현 내용을 외부에 감추는 것
  • 소프트웨어 캡슐
    • 클래스 = 캡슐화 = 메소드+변수
  • 공개인터페이스 = 공개 매서드

정보은닉

  • 객체의 외부에서는 객체의 내부 데이터를 볼 수 없게 한다는 것
  • 객체 안의 데이터와 알고리즘은 외부에서 변경하지 못하게 막고, 공개된 인터페이스를 통해서만 객체에 접근하도록 하는 개념

상속

  • 이미 작성된 클래스(부모 클래스)를 이어받아 새로운 클래스(자식 클래스)를 생성하는 것
  • 자식 클래스는 부모 클래스의 속성과 동작을 물려 받음

다형성

  • 동일한 이름의 동작이라고 하여도 객체의 실제 타입에 따라서 동작의 내용이 달라질 수 있음

추상화

  • 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 만드는 기법

클래스

  • 객체에 대한 설계도
  • 특정한 종류의 객체들을 찍어내는 형틀 또는 청사진이라고도 할 수 있다.
  • 클래스로부터 만들어지는 각각의 객체를 그 클래스의 인스턴스라고 함
  • 하나의 클래스로 여러개의 인스턴스를 찍어내지만, 인스턴스마다 속성의 값은 다름(다형성)
public class 클래스이름 {
	자료형 필드1;
	...
	반환형 메소드1() {...}
	...
}

객체생성

  1. 참조 변수를 선언

     Circle obj;
    
  2. new 연산자를 사용하여서 객체를 생성하고 객체의 참조값을 참조 변수에 저장

     obj = new Circle();
    
  3. 객체의 필드와 메소드를 사용

참조변수

  • 참조 변수는 객체를 참조할 때 사용되는 변수로서 여기에는 객체의 참조값이 저장됨
  • 참조값은 일반적으로 객체의 주소임

메소드 오버로딩

  • 같은 이름의 메소드가 여러 개 존재하는 것. “중복정의”라고도 함.
  • 메소드의 반환형만 다르다고 중복정의할 수는 없음. 반드시 메소드 매개변수가 달라야함.

      int add(int x, int y) {...}
      double add(int x, int y) {...} //불가능
    

생성자

  • 객체가 생성될 때 객체를 초기화하는 특수한 메소드
  • 기본 생성자
    • 매개 변수가 없는 생성자
    • 개발자가 생성자를 하나도 정의하지 않으면 자바 컴파일러는 기본 생성자를 자동으로 만듦
    • 다른 생성자가 존재할 때는 기본 생성자가 추가되지 않음

this 참조 변수

  • 현재 객체 자신을 가리키는 참조 변수
  • 컴파일러에서 자동으로 생성함
  • 생성자에서 매개 변수 이름과 필드 이름이 동일한 경우에 혼동을 막기 위해 사용

접근제어

  • 클래스의 멤버에 접근하는 것을 제어하는 것
  • private - 클래스 안에서만 접근 가능
  • public - 누구나 접근 가능
  • protected - 자식 클래스만 접근 가능
  • 접근 지정자가 없는 경우
    • default라고 불리며 동일한 패키지 안에서만 접근 가능

접근자와 설정자

  • 필드값을 반환하는 접근자(getters), 필드값을 성정하는 설정자(setters)
  • 이러한 메소드는 대개 get이나 set이 메소드 이름 앞에 붙여짐
  • 예) getBalance(), setBalance()
  • 사용하는 이유
    • 접근자와 설정자를 사용해야만 나중에 클래스를 업그레이드할 때 편함
    • 접근자에게 매개 변수를 통하여 잘못된 값이 넘어오는 경우, 이를 사전에 차단할 수 있음
    • 필요할 때마다 필드값을 동적으로 계산하여 반환할 수 있음
    • 접근자만을 제공하면 자동적으로 읽기만 가능한 필드를 만들 수 있음
이유빈

이유빈

국민대학교 소프트웨어융합대학 소프트웨어학부 이유빈입니다. 링크 아이콘을 클릭해 Github 페이지로 이동할 수 있습니다.

댓글

comments powered by Disqus