객체 지향 프로그래밍
(OOP, Object-Oriented Programming)
•
객체의 상태와 행동을 구체화하는 형태의 프로그래밍
•
객체 지향 프로그래밍에서는 모든 데이터를 객체(object)로
취급함 이러한 객체가 프로그램의 중심이 됨
객체란?
•
실생활에서 우리가 인식할 수 있는 사물 같은 것
•
속성(객체) + 기능(메서드)으로 이루어져있음
클래스?
•
정의 : 객체를 정의해 놓은 것
•
용도 : 객체를 생성하는데 사용
•
구성
◦
객체의 상태를 나타내는 필드(변수)
◦
객체의 행동을 나타내는 메소드
인스턴스
•
클래스를 사용하기 위해서는 해당 클래스 타입의 객체를 선언해야 함
→ ㄱ.
즉, 인스턴스란 메모리에 할당된 객체를 의미함.
•
자바에서는 하나의 클래스로부터 여러 개의 인스턴스(객체)를 생성 가능
생성된 인스턴스는 독립된 메모리 공간에 저장된 자신만의 필드를 가질 수 있음.
but 해당 클래스의 모든 메소드는 해당 클래스에서 생성된 모든 인스턴스가 공유됨
EX) 차로 예시를 들면
◦
필드(변수)
▪
car.modelName = “람보르기니”
▪
car.modelYear = 2016
▪
car.color = “주황색
▪
car.maxSpeed = 350
◦
메소드
▪
car.accelerate()
▪
car.brake()
◦
인스턴스
▪
내 차(myCar) : 설계도에 의해 생산된 차량
▪
친구 차(friendCar) : 설계도에 의해 생산된 또 다른 차량
⇒ 즉, 자동차 인스턴스는 모두 위와 같은 필드와 메소드를 가지게 될것,
하지만 각 인스턴스마다 가지고 있는 프로퍼티의 값은 전부 다름.
메소드
•
어떠한 특정 작업을 수행하기 위한 명령문의 집합
•
메소드 정의하는 문법
접근제어자 반환타입 메소드이름(매개변수목록) {
}
1.
접근 제어자 : 해당 메소드에 접근할 수 있는 범위를 명시
2.
반환 타입(return type) : 메소드가 모든 작업을 마치고 반환하는 데이터의 타입
3.
메소드 이름 : 메소드를 호출하기 위한 이름을 명시
4.
매개변수 목록 : 메소드 호출 시에 전달되는 인수의 값을 저장할 변수들을 명시
5.
구현부 : 메소드의 고유 기능을 수행하는 명령문의 집합
•
메소드 오버로딩을 사용함으로써 메소드에 사용되는 이름을 절약 가능
◦
자바에서는 하나의 클래스에 같은 이름의 메소드를 중복하여 정의할 수 없음
이때 메소드 오버로딩을 이용하면 같은이름의 메소드를 중복하여 정의 가능
◦
메소드오버로딩이란?
▪
매개변수의 개수나 타입을 다르게 하여 같은 이름의 또 다른 메소드를 작성하는 것이다.
if문
if(true or false){
조건 true 시 실행되는 영역
}
else if(){
if문의 조건이 아니면서 else if 문의 조건이 true일때 실행됨
}
else{
위의 조건들이 모두 false일때 실행됨
}
→ if 문과 else 절에 속한 문장이 하나일 경우 중괄호가 생략이 가능하다.
하나의 소스파일에 여러 클래스 작성
•
하나의 소스파일에는 하나의 클래스가 매칭이 되어야하는데, 기본적으로 public class가 매칭이되어 파일과 이름이 같아야 함. (대소문자까지)
•
public class가 없을 경우 소스코드와 아무 클래스 이름이 같기만하면됨.
•
하나의 소스파일에 둘 이상의 public class가 존재하면 안된다.
객체의 생성과 사용
객체의 생성
클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수를 선언
변수명 = new 클래스명(); //클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장
Tv t; //Tv클래스 타입의 참조변수 t를 선언
t = new Tv(); //Tv인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장
•
객체를 다루려면 참조변수가 필요하고, 대입연산자로 참조변수와 객체를 연결해주어야함!
객체의 사용
t.channel = 7; // Tv인스턴스의 멤버변수 channel의 값을 7로 한다
t.channelDown(); // Tv인스턴스 메서드 channlDown()을 호출한다.
System.out.println(”현재 채널은 “ + t.channel + “ 입니다”);
•
t.channel과 같이 참조 변수를 사용하고 사용해야 함!
•
t.channelDown()과 같이 메서드를 호출 할 경우, 메서드가 실행 됨!
•
객체와 참조변수의 타입이 같아야함