[Java]객체지향 프로그래밍 I : 클래스와 객체

  • 객체 지향적 코드는 비 객체지향적 코드보다 덜 복잡하고, 유지보수가 편리하다는 장점이 있다.

객체 지향 코드

  • OOP (Object Oriented Programming)
  • 객체를 생성한 뒤, 객체의 변수에 데이터를 정의하는 방식이다.
class Time{
   int hour;
   int minute;
   int second;
}

Time t= new Time(); // 객체 생성
t.hour=12;
t.minuate=34;
t.second=56;

비객체지향적인 코드

  • OOP (Object Oriented Programming)
  • 객체를 생성하지 않고 변수를 정의하는 방식이다.
class Time{
   int hour;
   int minute;
   int second;
}

int hour=12;
int minuate=34;
int second=56;
Note

객체지향 VS 절차지향

  • 절차지향은 데이터 중심, 객체지향은 기능 중심
  • 절차지향의 반대는 객체지향이 아니고 객체지향의 반대는 절차지향이 아님

클래스란?

  • 클래스란 데이터와 함수의 결합과 같다.
  • 데이터와 관련 있는 메소드를 묶어서 정의해둔 것이다.
  • 클래스는 객체를 생성하는데 사용한다.
  • 클래스는 사용자 정의 타입이기 때문에 원하는 타입을 직접 만들 수 있다.

클래스가 필요한 이유는?

  • 객체를 생성하기 위해서 클래스가 필요하다.
Tip
  • 만약 하나의 소스파일에 public 클래스가 있다면 파일명은 public클래스가 된다.
    • public클래스가 없다면 모든 클래스를 소스파일명으로 사용할 수 있다.

객체란?

  • 객체란 실제로 존재하는 사물 또는 개념이다.
  • 객체의 용도는 객체가 가지고 있는 기능과 속성에 따라 달라진다.

객체의 구성요소는?

  • [객체 = 속성 + 기능]으로 이루어져 있다.
  • 속성은 변수이고, 기능은 메서드이다.

객체가 필요한 이유는?

  • 객체를 사용하기 위해 필요하다.
  • 객체를 사용한다는 것은 객체가 가진 속성(변수)와 기능(메소드)를 사용하는 것이다.

객체의 생성 단계는?

  • 변수선언 : 클래스의 객체를 참조하기 위한 참조변수를 선언한다.
    • 객체를 tv에 비유한다면 참조변수는 리모콘과 같다.
    • 고로 클래스의 생성하기 위해선 객참조변수라는 리모콘을 먼저 선언해야 한다.
    • TV t;
    • 객체를 사용하기 위해서는 t라는 참조변수(리모콘)이 반드시 필요하다.
  • 객체 생성 : 클래스의 객체를 생성한다.
    • new Tv();
    • new 연산자는 객체를 만들고 생성된 객체의 주소를 반환한다.
  • 변수와 객체 연결 : 객체의 주소를 참조변수에 저장(연결)한다.
    • 대입연산자(=)가 참조변수와 객체를 연결하는 기능을 한다.
    • t = new Tv();
    • new연산자가 반환한 클래스의 주소를 참조변수에 대입한다.
    • 이로 인해 생성된 객체가 별도의 저장공간을 갖게 되는 것이다.
Tip
  • 여러개의 객체가 하나의 주소를 가리킬 수도 있다.
    • t1=t2라면 t1객체와 t2객체가 가리키는 주소값이 같다.
  • 하지만, 하나의 객체가 여러개의 주소값을 가리킬 수는 없다. 객체배열

객체의 사용 방법은?

  • 객체의 변수를 사용하는 방법과 객체의 메소드를 사용(호출)하는 방법으로 나누어진다.
  • 변수사용 : tv.channel=7;
  • 메소드 사용 : tv.channelUp();

객체 배열

  • 객체의 배열은 참조변수 배열과 같다.
  • 여러개의 객체를 생성해서 배열에 각 요소의 주소값을 저장하기 위해 사용한다.
    • 객체 배열의 각 요소들은 서로 다른 주소값을 같는다.
  • 변수는 하나의 데이터를 저장할 수 있는 공간이고, 배열은 같은 종류의 여러 데이터를 하로 저장할 수 있는 공간이다.
// 방법 (1)
Tv tv1, tv2, tv3;

// 방법 (2)
Tv[] tvArr = new Tv[3];

인스턴스란?

  • 특정 클래스로부터 생성된 객체를 특정 클래스의 인스턴스라고 한다.
  • 객체와 인스턴스는 같은 개념이라고 볼 수 있으나, 객체가 좀 더 일반적인 용어이다.
  • 인스턴스화란 클래스라는 설계도를 인스턴스(객체)라는 제품으로 생성하는 과정이라고 볼 수 있다.

변수와 메서드

RETURN

  • 실행 중인 메서드를 종료하고 호출한 곳으로 되돌아간다.
  • 메서드가 작업을 마쳤을때 return;써줘야함
    • 메서드 반환타입이 void일 경우 return;생략가능
    • 반환타입이 void가 아니면 생략 불가임

반환값

  • 메서드 반환타입이 void가 아닐 경우 return해주는 값을 반환값이라고 함
  • 타입은 메서드 타입과 일치해야함
    • 메서드 타입은 클래스타입과 일치해야함
    • char,byte,short등은 int로 자동 형변환됨
  • (예제) 반환값 : return result;에서 result가 반환값임
int add(int x,int y)
{
    int result = x+y;
    return result; 
}

매개변수

  • 매개변수가 3개 이상이면 ‘배열'이나 ‘클래스'로 넘겨주는게 더 편함!
public FoodListCard(FoodHouseVO vo) { // 매개변수 = 클래스
  posterLa.setOpaque(true);
  posterLa.setBackground(Color.black);
  la1=new JLabel(vo.getTitle());
}

생성자

  • 생성자는 호출시에 반드시 new 생성자()를 주어야 함

클래스에서 구현을 위해 생성자 사용하는 경우

  • 데이터베이스 : 오라클 연결
  • 네트워크 : 셋팅 => IP, PORT => 핸드폰(개통)
  • 웹 : 쿠키에서 값을 읽기 => 자동로그인

변수의 초기화

cv , iv란?

  • iv : 인스턴스변수
  • cv : 클래스변수 = 공유변수
public class test {

	int iv; // 인스턴스 변수
	static int cv; // 클래스 변수
	
	void method() {
		int lv; // 지역 변수
	}
}

![https://img1.daumcdn.net/thumb/R720x0.q80/?scode=mtistory2&fname=http%3A%2F%2Fcfile28.uf.tistory.com%2Fimage%2F21226F42578D2F8137324A]

cv,iv초기화 방법

  1. 자동 초기화 : 0값으로
  2. 간단 초기화 : 대입연산자(=)사용
  3. 복잡한 초기화 : { } , static{ } , 생성자
    • static{ }은 cv초기화
    • 생성자는 iv초기화
    • { }도 iv초기화지만 거의 사용되지 않음