객체지향 프로그래밍

율랑이·2021년 12월 22일
0

DB

목록 보기
1/1
post-thumbnail

객체 ?

  • 사람, 동물, 사물, 주문, ... 지극히 개념적인것 !

. 고유한 속성
. 타인도 알 수 있는 것
. 사전에 등록된 명사

A : "우리 오늘 점심 때 라면 먹을래?"
B : "응, 좋아!"

      라면   <--- 객체(o)

"오뚜기진라면" <--- 인스턴스:instance

* Primitive Type

정수형(4)
. byte ... 8 bit 정수(작은수) : 2의 8승= 2x2x2x2x2x2x2x2=256 [-128~-1,0~127] <-- [-(2^n)/2~-1, 0, +(2^n)/2-1]
. short ... 16 bit 정수(큰수)
. int ... 32 bit 정수(더큰수)
. long ... 64 bit 정수(엄청큰수)
실수형(2)
. float ... 32 bit 실수
. double ... 64 bit 실수
문자형(1)
. char ... 16 bit 유니코드
불린형(1)
. boolean ... true / false

비트(bit) : 컴퓨터에서 정보를 표시하는 최소 단위(o, 1)

( 1 bit) : 2의 1승 = 2가지
0
1

(2 bit) : 2의 2승 = 4가지
00
01
10
11

(3 bit) : 2의 3승 = 8가지
000
010
100
110
001
011
101
111


  • 속성 + 기능까지 포함된 객체는 어떻게 표현하죠? ---> class

(1) 사용자 정의 클래스(user-defined class) --- Student
(2) 내장 클래스(built-in class)---ArrayList / String / Integer / Double / Random / Date / Calendar etc

학생 : 이름/나이/소속 + 출석하다()/공부하다()/시험보다()

  --------------  -------------------------------
      (속성)                  (기능)

public class Student // 클래스 이름
{
private String name; // 속성:Property:멤버필드
private int age;

  public Student()                            // 생성자 1
  {
  
  }
  
  public Student(String name, int age)        // 생성자 2
  {
     this.name = name;
     this.age  = age;
  }

  public String getName()                     // 기능:메소드:멤버함수
  {
     return this.name;
  }

  public void setName(String name)
  {
     this.name = name;
  }

  public String getName()
  {
     return this.name;
  }

  public void setAge(int age)
  {
     this.age = age;
  }

}

Student s1 = new Student();
s1.setName("Tom");             // private String name;
s1.name = "Tom";               // public String name;
s1.setAge(20);


Student s1 = new Student("Tom", 20);

  • 생성자 오버로딩 : 전달되는 매개변수의 타입이나 개수에 따라서 다양한 생성자를 사용할 수 있는 기능.

* 추상 클래스(Abstract Class)

(TYPE) (SUBTYPE)
구기종목 : 축구/야구/농구/배구/탁구
가전제품 : TV/냉장고/세탁기/전자렌지
모양 : 세모/네모/동그라미/마름모/별모양
색깔 : 빨강/노랑/파랑/초록
병 : 술병/물병/약병/꽃병

class C extends A (o)
class C extends A, B (x) // 자바에서는 다중상속이 안됨!

객체 --> Primitive Type --> Class(사용자/내장)--> Abstract Class(사용자/내장)--> Interface(사용자/내장)

* 인터페이스(interface) : 객체들간에 발생할 수 있는 행위/동작/상태를 미리 정의해 놓은 것.

  face <----> face 
       . talk()
       . fight()
       
public interface Human 
{
     void talk();
     void fight();
}    

void talk()   // 선언부(head)
{
   ...       // 구현부(body)
}


public class Boy implements Human 
{
     @Override // 재정의
     public void talk()
     {
           System.out.println("Boy is talking...");
     }

     @Override
     public void fight()
     {
           System.out.println("Boy is fighting...");
     }
}

public interface ITV 
{
     void on();
     void off();
     void switchChannel(int channel);
}


Student s1 = new Student();  // 인스턴스 생성(o)
Human   h1 = new Human();    // 인스턴스 생성(x)
Boy     h1 = new Boy();      // 인스턴스 생성(o)
Human   h1 = new boy();      // 인스턴스 생성(o)

ex) List list = new ArrayList();

                       / built-in    / built-in           / built-in
(1) Primitive Type ---(2) Class ---  (3) Abstract Class ---(4) Interface    <<< Data Type 
                       \ user-def    \ user-def           \ user-def                   

자바의 내장 인터페이스(built-in interface)

. Serializable

. Cloneable

. Readable

. Appendable

. Closeable

. AutoCloseable

. Observable

. Iterable

. Comparable

. Runnable

Callable

Repeatable


자바의 4대 핵심 기능 :

(1) 캡슐화(encapsulation) : 속성과 기능을 클래스 내부에 집어넣는 행위
-- > en(make ) + capsule(우리가 배운 '클래스'?) + tion
(1.1)정보은닉(information hiding) : 속성의 한정자를 public -> private로 바꾸는 행위

(2) 상속(inheritance) : 클래스나 추상 클래스를 상속받는 행위

(3) 다형성(polymorphism) <--- poly(=many) + morph(=form)
(3.1) 서브타입 다형성(subtype polymorphism)
(3.2) 매개변수 다형성(parametric polymorphism)
(3.3) 오버라이딩, 오버로딩도 다형성의 개념
* Do the task in different ways.

(4) 직렬화(Serialization) : 네트워크에서 파일을 전송할 때, 데이터의 전송효율을 높이기 위해서 전송 데이터를 바이트 코드 형태로 바꾸는 행위.

     (1)                                    (2)
      ▩                                     ▩
      ▩        '   '    '   '               ▩
      ▩     '  '   '   '   '  '  '  '       ▩
      ▩    '  '  '  '  '  '  '  '  '  '     ▩
      ▩   '  '  '  '  '  '  '  '   '  '     ▩ 
    <--- '  '   '   '  '  '  '  '  '  '   <---  ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 
      ▩     '  '  '  '  '  '  '  '  '       ▩          (Serialization 직렬화)
      ▩   '  '  '  '  '  '  '  '  '         ▩
      ▩     '   '   '  '  '  '  '  ''       ▩
      ▩   '   '   '   '   '  '   '  '       ▩
      ▩     '  '  ' '   '  '  '   '         ▩
      ▩         '  '  '  '  '  '            ▩ 
     (1)                                    (2)

Student s1 = new Student();


Student s1 = new Student("Tomson", 28);
Student s2 = new Student("Jack",   25);
Student s3 = new Student("Bill",   24);
Student s4 = new Student("John",   26);
Student s5 = new Student("Steve",  28);

ArrayList<Student> list = new ArrayList<Student>();

list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
list.add(s5);

list = { s1, s2, s3, s4, s5 }

ArrayList<String> list = new ArrayList<String>();
ArrayList<String> list = new ArrayList<>();   // 타입 추론 인정됨.

list.add("A");
list.add("B");
list.add("C");
list.add("D");

String s = list.get(0);


ArrayList list = new ArrayList();  // 타입이 지정되지 않으면 기본값으로 Object 

list.add("A");
list.add("B");
list.add("C");
list.add("D");

String s = (String) list.get(o); // 형변환(type casting)이 필요함. 왜? 처음에 타입을 지정하지 않았어.


ArrayList list = new ArrayList();  // 타입이 지정되지 않으면 기본값으로 Object 
list.add("A");
list.add(1);
list.add(new Float(2.5));

회원 관리 = { 회원1, 회원2, 회원3, 회원4, 회원5, ... } <-- 데이터 집합 : 엔티티(Entity)

회원 관리               MEMBERINFO / MEMBERS / T_MEMBER / TBL_MEMBER 
------

회원 아이디 MB_ID VARCHAR2(20) NOT NULL...PK
회원 비밀번호 MB_PW VARCHAR2(20) NOT NULL,
회원 이름 MB_NAME VARCHAR2(20) NOT NULL,

회원 이메일             MB_EMAIL VARCHAR2(20) NOT NULL
-----------

CREATE TABLE T_MEMBER (
MB_ID VARCHAR2(20) NOT NULL,
MB_PW VARCHAR2(20) NOT NULL,
MB_NAME VARCHAR2(20) NOT NULL,
MB_EMAIL VARCHAR2(20) NOT NULL,
CONSTRAINT PK_MEMBER PRIMARY KEY (MB_ID)
);

CREATE TABLE T_...(

);


* 오라클에서 숫자는 number 타입으로 해결하자..

정수 : 999,999,999,999,999 ---> number(15,0)
소수 : 99,999,999,999,999.1 ---> number(15,1)


       

0개의 댓글