* 객체와 클래스
- 클래스(Class)
- 객체지향 프로그램의 중심이 된다
- 자바의 설계도
- 인스턴스 : 클래스로부터 만들어진 객체
- 객체지향 프로그래밍 단계 : 클래스 설계 -> 설계된 클래스소 사용할 객체 생성 -> 객체 이용
<참고자료>참고자료>
- 낱개의 자료 -> 같은 자료형 다수 표현 (배열) -> 다수의 자료형 다수를 표현 (구조체) -> 클래스 (구조체 + 메서드(함수) : OOP(객체지향 프로그래밍))
- 문법 다수(많다) -> 점진적 학습법(피드백:복습)
- 객체(object) : 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중 자신의 속성을 가지며 식별 가능한것 => 속성(필드 + 동작(메소드)로 구성)
- 기업위주 ->
- 구조적/절차적 프로그래밍 : 함수(기능) + 데이터(자료)
- 플로우 차트(순서도) + DFD(자료 흐름도) - 기존
- 소프트웨어 위기론 : 기존 프로그램 -> 재사용 : 상속성
- 자료 중심의 프로그래밍 + 꼼꼼한 설계(UML) : 객체(자료)지향 프로그래밍
- 자료 + 기능(종속) => 클래스 (자료(속성) + 기능(함수:메서드))
- 객체/클래스 뭐가 더큰지 대답 => 7교시 강의 마지막 보기
- A Car has a Wheel. (has A관계) : 집합관계, 복합관계(차량의 바퀴,엔진 같이 조금더 중요한 관계)
- 클래스 선언 : 객체 구상 후 클래스 이름 결정
1.’클래스 이름.java’로 소스 파일 생성
- ex)
public class 클래스이름 { }
2.클래스로부터 객체 생성
- new 클래스();
- 참조변수로 힙 영역에 객체 생성
- 객체 생성 후 객체 번지가 리턴된다
- ex)
클래스 변수; 변수 = new 클래스(); 클래스 변수 = new 클래스();
3.클래스의 두 용도
- 라이브러리(API)클래스 : 객체 생성 및 메소드 제공 역할
-
4.클래스 멤버
- 필드(Field) : 객체의 데이터가 저장되는곳
- 생성자(Constructor) : 객체 생성시 초기화 역할 담당 =>클래스 이름이랑 똑같이 써줘야한다
- 메소드(Method) : 객체의 동작에 해당하는 실행 블록
4-1.필드 선언
4-2.필드 사용
* 생성자
- 생성자(constructor) : 클래스로부터 new 연산자로 객체를 생성할 때 호출되어 객체의 초기화 담당
- 기본 생성자(default constructor) : 인자가 없는 생성자
- 생성자 선언
- ex)
클래스(매개변수선언, ...){ // 객체의 초기화 코드 }
- 매개 변수 선언은 생략할 수도 있고 여러개 선언할 수도 있다
- ex)
public class Car { // 생성자 Car(String model, String color, int maxSpeed){...} }
- 클래스에 생성자가 명시적으로 선언되었을 경우 반드시선언된 생성자 호출하여 객체 생성
- ex)
Car myCar = new Car("그랜저","검정",300);
-
생성자의 필드 초기화
-
생성자 오버로딩
- this()코드
* 총합 예제
-
EX)
package com.javateam.jse; // import java.lang.*; // 묵시적 선언이 가능하다 : java.lang(기본 패키지) public class JavaEx37 { // 존재 하지만 코드에는 안나온다 => 투명인간 //public class JavaEx37 extends object{ // 묵시적 상속 : 모든 클래스의 조장 클래스는 object 클래스 // 클래스 작성시 "extends object" 라는 표기를 한 것으로 간주된다 String id; String name; StringBuilder address; int age; JavaEx37(){ //기본 생성자 : 인자가 없는 생성자 // 기본생성자는 기본 생성자 단독으로 존재할 경우 묵시적 정의가 가능하지만 // 다른생성자(오버로딩된 생성자)가 등장할 경우 사용시 명시적으로 정의 해야한다 System.out.println("기본 생성자"); } JavaEx37(String name){ // (인자가)오버로딩(over-loading)된 생성자 System.out.println("오버로딩된 생성자"); this.name = name; } // 오버로딩(over-load-ing) // 메서드(생성자) 오버로딩 : 다형성 // 인자부(매개변수부,인수부)에 변수(인자)의 자료형/갯수/순서에 변화를 주어 // 같은 이름의 함수(메서드)를 다양하게 정의하는 방법 JavaEx37(StringBuilder address){ // 자료형을 바꿔주는 오버로딩 System.out.println("오버로딩된 생성자"); this.address = address; } JavaEx37(StringBuilder address, String name){ // 순서를 바꿔 오버로딩 System.out.println("오버로딩된 생성자"); this.name = name; this.address = address; } JavaEx37(String id, StringBuilder address){ // 자료형의 갯수가 다른 오버로딩 System.out.println("오버로딩된 생성자"); this.id = id; this.address = address; } public static void main(String[] args) { JavaEx37 obj = new JavaEx37(); // 생성자 JavaEx37 obj2 = new JavaEx37("java"); JavaEx37 obj3 = new JavaEx37(new StringBuilder("금천구 가산")); JavaEx37 obj4 = new JavaEx37("goodee",new StringBuilder("금천구 가산")); JavaEx37 obj5 = new JavaEx37(new StringBuilder("금천구 가산"),"java"); obj = new JavaEx37("java"); obj = new JavaEx37(new StringBuilder("금천구 가산")); obj = new JavaEx37("goodee",new StringBuilder("금천구 가산")); obj = new JavaEx37(new StringBuilder("금천구 가산"),"java"); System.out.println(obj.name); System.out.println(obj2.name); System.out.println(obj.address); System.out.println(obj); // 객체의 고유값 출력 } }
-
메서드(Method)
- 메소드 선언부
- 리턴 타입
- 매개 변수 선언
- 매개변수의 개수를 모를 경우
- 매개변수의 개수를 모를 경우
- 리턴문
- void
- 메소듷 호출
- 객체 내부에서 호출
- 객체 내부에서 호출
-
정적 멤버 사용
- 싱글톤(singleton) : 전체 프로그램에서 단 하나의 객체만 만들도록 포장하는 코딩 기법
- 디자인(설계) 패턴
-
싱글톤 작성 방법
- 패키지와 접근 제한자