객체지향프로그래밍(OOP, Object-Oriented Programing) : JAVA
객체
사람/동물/사물/주문/예약/감정 ... 지극히 개념적인 것.
1. 고유한 속성을 가지고 있어야한다.
2. 타인도 알 수 있는 것이어야한다.
3. 사전에 등록된 명사여야한다.
ex.
A : "우리 오늘 점심때 라면 먹을래?"
B : "응, 좋아!"
라면 <--- 객체(o)
오뚜기진라면 <--- 인스턴스 : instance
Primitive Type
정수형(4)
. byte ... 8 bit 정수(작은수) : 2의 8승 = 2x2x2x2x2x2x2x2=256 [-128~-1,0~127]
. 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) : 컴퓨터에서 정보를 표시하는 최소 단위(0, 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;
}
}
<br>
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);
*생성자 오버로딩 : 전달되는 매개변수의 타입이나 개수에 따라서 다양한 생성자를 사용할 수 있는 기능.
<br><br>
> 추상 클래스(Abstract Class)
<br>
(TYPE) (SUBTYPE)
구기종목 : 축구/야구/농구/배구/탁구
가전제품 : TV/냉장고/세탁기/전자렌지
모양 : 세모/네모/동그라미/마름모/별모양
색깔 : 빨강/노랑/파랑/초록
병 : 술병/물병/약병/꽃병
<br>
Class C extends A (o)
Class C extends A, B (X) // 자바에서는 다중상속이 안됨.
<br><br>
객체 --> Primitive Type --> Class(사용자/내장) --> Abstract Class(사용자/내장) --> Interface(사용자/내장)
<br>
> 인터페이스(Interface) : 객체들간에 발생할 수 있는 행위/동작/상태를 미리 정의해 놓은 것.
<br>
face <----> face
. talk()
. fight()
<br>
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);
}
<br>
Student s1 = new Student(); // 인스턴스 생성(o)
Human h1 = new Human(); // 인스턴스 생성(x)
Boy h1 = new Boy(); // 인스턴스 생성(o)
Human h1 = new boy(); // 인스턴스 생성(o)
<br>
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
------------
<br><br>
> 자바의 내장 인터페이스(built-in interface)
<br>
. Serializable
<br>
. Cloneable
<br>
. Readable
<br>
. Appendable
<br>
. Closeable
<br>
. AutoCloseable
<br>
. Observable
<br>
. Iterable
<br>
. Comparable
<br>
. Runnable
<br>
Callable
<br>
Repeatable
<br><br>
> 자바의 4대 핵심 기능 :
<br>
(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)
<br>
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 list = new ArrayList();
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
list.add(s5);
list = { s1, s2, s3, s4, s5 }
ArrayList list = new ArrayList();
ArrayList 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));
<br><br>
------
<br><br>
회원 관리 = { 회원1, 회원2, 회원3, 회원4, 회원5, ... } <-- 데이터 집합 : 엔티티(Entity)
<br>
회원 관리 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)
);
설계툴을 이용하면 테이블을 더 쉽게 만들 수 있다.
(1) https://www.erwin.com (네카라쿠배당토직야)
(2) https://www.erdcloud.com
(3) https://www.aquerytool.com , https://aquerytool.com