객체 지향 프로그래밍(OOP : Object-Oriented Programming) : 객체를 하나씩 조립해서 완성된 프로그램을 만드는 기법
상속(Inheritance) : 상위 클래스의 모든걸 하위 클래스가 모두 이어 받는것. 부모가 자식에게 유전자를 물려주듯이 부모의 특징을
자식에게 모두 물려준다.
캡슐화(Encapsulation) : 데이터와 코드의 형태로 외부로 부터 알 수 없게 하고, 데이터의 구조와 역할, 기능을 하나의 캡슐형태로
만드는 방법입니다.
다형성(Polymorphism) : 상속과 연관이 있는 개념으로 한 객체가 다른 여러형태(객체)로 재구성 되는 것을 말합니다.
자바의 오버로드(Overload)또는 오버라이드(Override)가 다형성의 대표적인 예라고 할 수 있고,
이것을 구현하는 걸 오버로딩(Overloading)과 오버라이딩(Overriding) 이라고 합니다.
추상화(abstraction) : 추상화는 객체의 공통적인 속성과 기능을 추출하여 정의하는것 입니다.
실제로 존재하는 객체들을 프로그램으로 만들기 위해 공통적인 특성을 파악해서 필요없는 특성을 제거하는 과정을 가르킵니다.
개발속도가 느림
실행속도가 느림
코딩난이도 상승
ex)
-회원가입-
속성
String id; //아이디
String password; //패스워드
String name; //이름
String birth; // 생년월일
String gender; //성별
String email; //이메일
String phone; // 휴대전화
동작(method)
로그인하기
회원가입하기
탈퇴하기
회원정보수정하기
-게시판-
속성
String title; //제목
String content; //내용
String writer; //작성자
String wrtier; //작성일
int cnt; //조회
int good; //좋아요
기능
게시판 글쓰기 기능
게시판 글수정 기능
게시판 글삭제 기능
게시판 목록리스트 보여주기 기능
게시판 상세내용 보여주기 기능
집합관계 (포함관계) - 객체는 하나의 부품이고, 하나는 완성품에 해당, 예를 들어 자동차는 엔진,타이어, 핸들 등으로 구성되므로 자동차와 이 부품들은 집합 관계라고 볼 수 있다.
사용관계 - 객체 간의 상호작용을 말합니다.
객체는 다른 객체의 메소드를 호출하여 사용하므로 사람과 자동차는 사용관계라고 볼 수 있습니다.
사람은 자동차를 사용할 때 달린다, 멈춘다 등의 메소드를 호출하는 것입니다.
상속관계 - 상위(부모) 객체를 기반으로 하위(자식) 객체를 생성하는 관계를 말함.
extends로 확장해서 부모 객체에 없는 내용을 만들어서 사용가능.
자바에서 설계도가 바로 클래스(class), 클래스에는 객체를 생성하기 위한 필드와 메소드가 정의되어 있다.
클래스로부터 만들어진 객체를 해당 클래스의 인스턴스(instance)라고 한다.
클래스로부터 객체를 만드는 과정을 인스턴스화 라고 한다.
하나의 클래스로부터 여러 개의 인스턴스를 만들 수 있는데, 이것은 동일한 설계도로 부터 여러 대의 자동차를 만드는것과 동일합니다.
public class 클래스이름{
}
ex)
package ch06;
public class Car { // Car 클래스 선언
}
// Car클래스의 객체 생성
new Car();
public class Tire{
// 대표 클래스 말고 public을 붙이면 오류가 발생함
// The public type Tire must be defined in its own file
// 공용 유형 타이어는 자체 파일에 정의되어야 합니다
}
class Excel{
}
객체 생성
new 클래스();
new는 클래스로부터 객체를 생성시키는 연산자. new 연산자 뒤에는 생성자가 오는데, 생성자는 클래스() 형태를 가지고 있다.
new 연산자로 생성된 객체는 메모리 힙(heap) 영역에 생성된다.
클래스 변수;
변수 = new 클래스();
아래와 같이 클래스 변수 선언과 동시에 객체 생성도 가능.
클래스 변수 = new 클래스();
정리하자면 main 부분에 클래스가 모여서 완성되는걸 생각하면됨.
아래 예제를 통해 확인.
ex)
파일명 Student.java
package ch06;
//클래스 선언
public class Student {
}
파일명 StudentExample.java
package ch06;
// main 메소드가 있는 클래스에서 객체 생성
public class StudentExample {
public static void main(String[] args) {
Student s1 = new Student();
System.out.println("s1 변수가 Student 객체를 참조합니다.");
Student s2 = new Student();
System.out.println("s2 변수가 또 다른 Student 객체를 참조합니다.");
}
}
파일명 Car
public class Car { //Car클래스 선언
// 속성
// 차량의 색상
String color;
// 속도 계기판
int speed;
// 기능
// 달린다.
void run() {}
// 멈춘다.
void stop() {}
}
파일명 CarExample
public class CarExample {
public static void main(String[] args) {
// int a = 10;
Car c1 = new Car(); //new - 객체 생성, Car클래스의 객체를 생성한 후 C1 참조 변수에 저장
Car c2 = new Car(); //new - 객체 생성, Car클래스의 객체를 생성한 후 C2 참조 변수에 저장
}
}
public class ClassName{
//필드(Field) : 객체의 데이터가 저장되는 곳
선언 형태는 변수(variable)와 비슷하지만, 필드를 변수라고 부르지는 않는다.
변수는 생성자와 메소드 내에서만 사용되고 생성자와 메소드가 실행 종료되면 자동 소멸된다.
(전역변수라고 생각) -> 필드는 생성자와 메소드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 존재한다.
int fieldname;
//생성자(Constructor) : 객체 생성 시 (필드를) 초기화하는 역할 담당 , 또는 필드를 초기화하거나 메소드를 호출해서 객체를 사용할 준비를 한다.
생성자는 new 연산자로 호출되는 특별한 중활호 {} 블록이다.
생성자는 메소드와 비슷하게 생겼지만, 클래스 이름으로 되어 있고(생성자는 클래스 이름으로 해줘야함) 리턴 타입이 없다.
ClassName() { ... }
//메소드(method) : 객체의 동작에 해당하는 실행 블록 *메인메소드는 여러개 만들면 안됨!! 하나만 만들어서 클래스를 불러와서 사용해야함.
void - 메소드의 리턴 타입 // void 메소드는 return 값이 없다. -> void 타입은 아무것도 반환하지 않는다는 말이기 때문에 뭔가를 반환할 필요 없음!
void 타입을 사용하지 않을 경우 반드시 return 값을 반환해야함.
void methodName() { ... }
}
public class ReturnvoidTest {
public String returnMethod(String paramValue) { //String return 메소드
String returnValue = paramValue; // 값 넣어서 보내주면 returnValue에 넣어 초기화
return returnValue; // 값 반환
}
public void voidMethod() { //void 메소드
System.out.println("no return"); //void 메소드는 return 값이 없음
}
public static void main(String[] args) {
ReturnvoidTest rvt = new ReturnvoidTest(); // 객체화
System.out.println(rvt.returnMethod("call")); //returnMethod 호출
rvt.voidMethod(); //voidMethod 호출
}
}
The constructor Car1() is undefined 오류 메시지
생성자 Car1()은 정의되지 않았습니다. -> 생성자가 없을때 나타나는 오류메시지
끝.