1. 객체지향 프로그래밍 (OOP : )
현실세계 -----------------> 가상세계
: 학생 관리 : 학생관리 프로그램 개발
: 학생객체 추출 ===========> 가상세계에서 100% 그대로 표현
( 속성 : 이름, 학번 ) 클래스(객체)
변수(속성)
메소드(동작)
: 객체, 주체
subject -------------> object
(주체) (객체)
100가지 객체중에서 학생관리에 필요한 객체를 추출하는 과정
: 추상화작업
: 학생객체 ( 속성, 동작 )
2. 클래스
: *.java로 생성
: 클래스명은 반드시 대문자로 작성
: 의미있는 명사형으로 지정한다.
: 용도
====> 데이터 저장
: 클래스 구성요소
- 변수
- 메소드
- 생성자
예) 학생객체 --------------------> Student.java
: 문법
public class 클래스명 {
//변수
//메소드
//생성자
}
public class Student {
}
- 클래스 종류 1
1) 재사용 가능한 클래스
: Student.java
2) 재사용 가능한 클래스를 핸들링하는 클래스
: Student 클래스를 메모리에 올리는 작업 및 데이터 설정, 얻기 등....
: 특별한 메소드를 가져야 된다. ( main )
====> starting point
====> 스스로 메모리에 로드(load) 가능하다.
public static void main(String[] args){} //main이 있으면 재사용 못한당!
: StudentTest.java
- 클래스 종류 2
1) 개발자가 만든 클래스
2) 시스템이 만들어준 클래스 ( API라고 한다. )
: API 문서 제공 ( html 제공 )
: http://java.sum.com 참조
: 패키지 형태로 제공
: 소스파일 ( src.zip )과 클래스파일 제공 ( JDK 설치하면 자동으로 제공 )
3. 변수
: 블럭단위로 생존한다.
: 종류 3가지 ( 변수의 lifeTime 서로 다르다.)
- 로컬변수
: 메소드 안에 선언
: 메소드안에서 사용가능하다.
: 메소드가 호출될 때 생성된다.
: 메소드가 끝날 때 제거된다. ( } )
: 저장위치는 stack에 저장된다.
- 인스턴스 변수
: 메소드 밖에 선언
: 객체 생성할 때 생성된다. ( new 이용 )
객체 소멸할 때 제거된다. ( heap에 저장된 클래스를 더이상 참조못할 때)
- 클래스 변수
:
: 용도
=====> 데이터 저장
* 데이터 종류
1) 기본 데이터 ( 8가지 ) : Primitive Data Type ( PDT )
- 수치데이터
: 정수 byte (1byte)
short (2byte)
현실세계 -----------------> 가상세계
: 학생 관리 : 학생관리 프로그램 개발
: 학생객체 추출 ===========> 가상세계에서 100% 그대로 표현
( 속성 : 이름, 학번 ) 클래스(객체)
변수(속성)
메소드(동작)
: 객체, 주체
subject -------------> object
(주체) (객체)
100가지 객체중에서 학생관리에 필요한 객체를 추출하는 과정
: 추상화작업
: 학생객체 ( 속성, 동작 )
2. 클래스
: *.java로 생성
: 클래스명은 반드시 대문자로 작성
: 의미있는 명사형으로 지정한다.
: 용도
====> 데이터 저장
: 클래스 구성요소
- 변수
- 메소드
- 생성자
예) 학생객체 --------------------> Student.java
: 문법
public class 클래스명 {
//변수
//메소드
//생성자
}
public class Student {
}
- 클래스 종류 1
1) 재사용 가능한 클래스
: Student.java
2) 재사용 가능한 클래스를 핸들링하는 클래스
: Student 클래스를 메모리에 올리는 작업 및 데이터 설정, 얻기 등....
: 특별한 메소드를 가져야 된다. ( main )
====> starting point
====> 스스로 메모리에 로드(load) 가능하다.
public static void main(String[] args){} //main이 있으면 재사용 못한당!
: StudentTest.java
- 클래스 종류 2
1) 개발자가 만든 클래스
2) 시스템이 만들어준 클래스 ( API라고 한다. )
: API 문서 제공 ( html 제공 )
: http://java.sum.com 참조
: 패키지 형태로 제공
: 소스파일 ( src.zip )과 클래스파일 제공 ( JDK 설치하면 자동으로 제공 )
3. 변수
: 블럭단위로 생존한다.
: 종류 3가지 ( 변수의 lifeTime 서로 다르다.)
- 로컬변수
: 메소드 안에 선언
: 메소드안에서 사용가능하다.
: 메소드가 호출될 때 생성된다.
: 메소드가 끝날 때 제거된다. ( } )
: 저장위치는 stack에 저장된다.
- 인스턴스 변수
: 메소드 밖에 선언
: 객체 생성할 때 생성된다. ( new 이용 )
객체 소멸할 때 제거된다. ( heap에 저장된 클래스를 더이상 참조못할 때)
- 클래스 변수
:
: 용도
=====> 데이터 저장
* 데이터 종류
1) 기본 데이터 ( 8가지 ) : Primitive Data Type ( PDT )
- 수치데이터
: 정수 byte (1byte)
short (2byte)
int (4byte) : 기본값
long (8byte)
==> 1 , 123
: 실수
float (4byte)
double (8byte) : 기본값
==> 1.34F, 2.45
- 문자데이터
: char (2byte)
==> 하나의 문자
==> 'A' , 'C', '가'
- 논리데이터
: boolean
==> 참/거짓
==> true/false ( 0/1 안돼 )
======> 저장되는 값은 실제값이 저장된다.
int num = 123;
float xx = 2.34f;
long (8byte)
==> 1 , 123
: 실수
float (4byte)
double (8byte) : 기본값
==> 1.34F, 2.45
- 문자데이터
: char (2byte)
==> 하나의 문자
==> 'A' , 'C', '가'
- 논리데이터
: boolean
==> 참/거짓
==> true/false ( 0/1 안돼 )
======> 저장되는 값은 실제값이 저장된다.
int num = 123;
float xx = 2.34f;
2) 참조데이터 ( Reference Data Type : RDT )
: 8개를 제외한 나머지는 모두 참조 데이터이다.
( 클래스, 인터페이스, 배열 )
=======> 저장되는 값은 진짜 데이터가 저장되는 주소값이 저장된다.
String name = "홍길동";
name에는 "홍길동"이 저장된 주소값이 저장되어 있음.
: 문법
1) 변수 선언
데이터타입 변수명;
======> 변수명은 소문자, 의미있는 명사형
예 ) Student.java
String name; // 홍길동 (String 은 클래스, 문자열 저장할 때 사용)
=======> name ?
: 변수
: 문자열 변수
: String 변수
: 참조 데이터 변수
: RDT 변수
2) 값할당
변수명 = 값;
name = "홍길동";
예) String name; //변수선언
name = "홍길동"; // 값할당 ( 초기화 작업)
String name = "홍길동"; //변수선언 및 초기화작업을 한번에 가능
4. 메소드
- 용도
: 변수에 데이터를 저장, 변수의 값을 얻기 위해서 사용
- 종류 1
1) setter 메소드
: 값을 저장
2) getter 메소드
: 값을 얻기
- 종류 1
1) worker 메소드
: 일반적인 메소드
: setter, getter
2) caller 메소드
- 문법
public 리턴타입 메소드명([인자]) {
// 메소드가 실행할 코드
return [값];
}
: 메소드명은 동사형으로 , 소문자로 지정한다.
( setter변수명, get변수명으로 일반적으로 지정한다. )
예) String name;
setName
public void setName(String n){ //setName("홍길동"); 이렇게 호출
name = n;
// return ;
}
getName
public String getName(){ //String n = getName(); 이렇게 호출
return name;
}
: 특징
===> 반드시 호출해야 수행된다.
===> 호출하면 수행이되고, 작업이 끝나면 반드시 호출한 곳으로 돌아간다.
===> 반드시 클래스를 객체생성한 후에 호출가능하다.
5. 객체생성
: 클래스를 메모리에 올리는 작업
: 일반적으로 main 메소드를 가진 핸들링 클래스에서 주로 작업한다.
: new 이용.
: 문법
클래스명 변수명 = new 클래스명([인자]);
예) Student stu = new Student();
===> stu ?
: 변수
: RDT 변수
: Student 클래스 타입의 변수
6. 생성자
: constructor
: 용도
==> 인트턴스 변수에 데이터를 처음 저장하는 역할 ( 초기화 작업 )
==> setter 메소드
: 문법
public 클래스명 ([인자]) {}
특징
==> 메소드와 비슷
==> 리턴타입이 없다.
==> 반드시 이름은 클래스명으로 지정한다.
==> 자동으로 생성되는 생성자가 존재한다. ( default 생성자 )
( 모든 클래스에는 default 생성자가 자동생성된다. )
public 클래스명(){}
: 개발자가 생성자를 명시적으로 만들면 자동생성되지 않는다.
(인자없는 생성자는 사용하지 않더라도 명시적으로 작성하자. )
==> 메소드처럼 호출해야 수행된다.
==> 객체생성시에 호출한다.
예) Student.java
public Student(){}
student stu = new Student();
7. 오버로딩 생성자 ( Overloading Constructor ) , 오버로딩 메소드
: 정의
==> 하나의 클래스에 같은 이름의 생성자가 여러개 올 수 있다.
: 규칙
==> 인자가 달라야 한다. ( argument-list 라고 한다. )
: 갯수, 타입, 순서가 달라야 한다.
예>
public Student(){}
public Student(int n){}
public Student(String n){}
public Student(int n, String a){}
public Student(String n, int a){}
8. this 키워드
: this는 heap 메모리에 올라가있는 인스턴스를 의미한다. ( new )
: 용도 2 가지
1) 인스턴스 변수와 로컬 변수 이름이 동일할 때
2) 오버로딩 생성자 호출
=====> 반드시 첫 라인에 적어야 한다.
: this();
this(234);
this("홍길동", 202020);
public Student(){}
public Student(String n, int s, String addr){
name = n;
ssn = s;
address = addr;
}
public Student(String n, int s){
this(n,s,"대구");
}
======> 하나의 생성자에서 객체생성하기 위해서 ( 몰아주기 위해서 )
9. 패키지
: 용도
=====> 관련된 클래스들끼리 묶어서 관리할 목적 ( 윈도우의 폴더개념 )
=====> 도메인으로 지정 ( 유일한 값이기 때문에 )
: 문법
package 패키지명; 또는 package 패키지명.패키지명1;
예>
package com.test;
public class Student{
}
: 특징
===> 패키지가 서로 다른 클래스는 접근 불가능하다.
10. import
: 용도
===> 패키지가 다른 클래스를 접근할 때 사용한다.
: 문법
===> import 패키지명.클래스명;
: java.lang 패키지의 클래스는 import 없이 사용가능한 유일한 패키지이다.
(다른 패키지는 반드시 import 해야 한다.)
11. 연산자
1) 산술연산자
: + - * / %
2) 증감 연산자
: ++ (1증가)
: -- (1감소)
예> int num = 2;
num++; //3
int num2 = 2;
++num; //3
: 주의할 점은 다른 연산자와 같이 사용시 주의
예>
int a = 2;
int b = a++;
// a = 3
// b = 2
int x = 2;
int y = ++x;
// a = 3
// b = 3
3) 비교 연산자
A == B
A != B
A > B
A >= B
A < B
A <= B
4) 대입 연산자
5) 3항 연산자
(조건식) ? 참 : 거짓 ;
예>
int xxx = 3;
int num = ( xxx > 4 ) ? 100 : 200 ;
//num ? 200
6) instanceOf
: 클래스의 데이터 타입을 체크하기 위한 연산자
: 변수명 instanceOf 클래스명
: 결과값은 boolean
예>
String name = "zzzz";
if( name instanceOf String ){
}
7) 논리연산자
===> 연산결과는 boolean
: &&
: ||
12. 제어문
1) 조건문
if 문
문법 :
if(조건식) statement;
====> 조건식이 true 인 경우에만 statement가 실행된다.
- if ~ else 문
if(조건식)
statement1;
else
statement2;
- switch 문
: 값의 데이터 타입 ( int, char, short, byte)
(long은 제외)
switch( 값 ){
case 값1 :
break;
case 값2 :
break;
case 값3 :
break;
case 값4 :
break;
default :
}
13.
14.
15. 상속
- 클래스들간의 관계중에서 'is a' 관계이다.
예> 사원, 관리자, 엔지니어
관리자 is a 사원
엔지니어 is a 사원
===> 상속관계가 성립이 된다.
* UML
사원 (부모클래스, super class)
관리자 엔지니어 (자식 클래스, child class)
* 클래스들 간의 관계 ( class relationship)
- is a
- has a ( use a )
예> 분석단계 객체 추출
: 학생, 대학생, 컴퓨터, 트럭, 엔진, ....
대학생 is a 학생
트럭 has a 엔진
학생 use a 컴퓨터
* has a , use a를 가상세계에서도 표현해야 된다.
public class 트럭{
// 변수
엔진 a; //인스턴스 변수, composition(끈끈한 관계)
public void xx(){
라디오 y; //로컬 변수 , aggregation (덜 끈끈한 관계)
}
}
public class 엔진 {
}
* UML ( Unified Modeling Language )
: 도식화하는 방법
: 클래스 다이어그램
변수만 정의해 놓고 오른쪽 마우스 => source => getter and setter 선택하면 자동으로 get,setter 메소드 정의된다.
javac StudnetTest.java //컴파일
java StudentTest // 실행
this.name = name; 에서 this.name은 heap에 있는 name, name은 stack에 있는 name
: 8개를 제외한 나머지는 모두 참조 데이터이다.
( 클래스, 인터페이스, 배열 )
=======> 저장되는 값은 진짜 데이터가 저장되는 주소값이 저장된다.
String name = "홍길동";
name에는 "홍길동"이 저장된 주소값이 저장되어 있음.
: 문법
1) 변수 선언
데이터타입 변수명;
======> 변수명은 소문자, 의미있는 명사형
예 ) Student.java
String name; // 홍길동 (String 은 클래스, 문자열 저장할 때 사용)
=======> name ?
: 변수
: 문자열 변수
: String 변수
: 참조 데이터 변수
: RDT 변수
2) 값할당
변수명 = 값;
name = "홍길동";
예) String name; //변수선언
name = "홍길동"; // 값할당 ( 초기화 작업)
String name = "홍길동"; //변수선언 및 초기화작업을 한번에 가능
4. 메소드
- 용도
: 변수에 데이터를 저장, 변수의 값을 얻기 위해서 사용
- 종류 1
1) setter 메소드
: 값을 저장
2) getter 메소드
: 값을 얻기
- 종류 1
1) worker 메소드
: 일반적인 메소드
: setter, getter
2) caller 메소드
- 문법
public 리턴타입 메소드명([인자]) {
// 메소드가 실행할 코드
return [값];
}
: 메소드명은 동사형으로 , 소문자로 지정한다.
( setter변수명, get변수명으로 일반적으로 지정한다. )
예) String name;
setName
public void setName(String n){ //setName("홍길동"); 이렇게 호출
name = n;
// return ;
}
getName
public String getName(){ //String n = getName(); 이렇게 호출
return name;
}
: 특징
===> 반드시 호출해야 수행된다.
===> 호출하면 수행이되고, 작업이 끝나면 반드시 호출한 곳으로 돌아간다.
===> 반드시 클래스를 객체생성한 후에 호출가능하다.
5. 객체생성
: 클래스를 메모리에 올리는 작업
: 일반적으로 main 메소드를 가진 핸들링 클래스에서 주로 작업한다.
: new 이용.
: 문법
클래스명 변수명 = new 클래스명([인자]);
예) Student stu = new Student();
===> stu ?
: 변수
: RDT 변수
: Student 클래스 타입의 변수
6. 생성자
: constructor
: 용도
==> 인트턴스 변수에 데이터를 처음 저장하는 역할 ( 초기화 작업 )
==> setter 메소드
: 문법
public 클래스명 ([인자]) {}
특징
==> 메소드와 비슷
==> 리턴타입이 없다.
==> 반드시 이름은 클래스명으로 지정한다.
==> 자동으로 생성되는 생성자가 존재한다. ( default 생성자 )
( 모든 클래스에는 default 생성자가 자동생성된다. )
public 클래스명(){}
: 개발자가 생성자를 명시적으로 만들면 자동생성되지 않는다.
(인자없는 생성자는 사용하지 않더라도 명시적으로 작성하자. )
==> 메소드처럼 호출해야 수행된다.
==> 객체생성시에 호출한다.
예) Student.java
public Student(){}
student stu = new Student();
7. 오버로딩 생성자 ( Overloading Constructor ) , 오버로딩 메소드
: 정의
==> 하나의 클래스에 같은 이름의 생성자가 여러개 올 수 있다.
: 규칙
==> 인자가 달라야 한다. ( argument-list 라고 한다. )
: 갯수, 타입, 순서가 달라야 한다.
예>
public Student(){}
public Student(int n){}
public Student(String n){}
public Student(int n, String a){}
public Student(String n, int a){}
8. this 키워드
: this는 heap 메모리에 올라가있는 인스턴스를 의미한다. ( new )
: 용도 2 가지
1) 인스턴스 변수와 로컬 변수 이름이 동일할 때
2) 오버로딩 생성자 호출
=====> 반드시 첫 라인에 적어야 한다.
: this();
this(234);
this("홍길동", 202020);
public Student(){}
public Student(String n, int s, String addr){
name = n;
ssn = s;
address = addr;
}
public Student(String n, int s){
this(n,s,"대구");
}
======> 하나의 생성자에서 객체생성하기 위해서 ( 몰아주기 위해서 )
9. 패키지
: 용도
=====> 관련된 클래스들끼리 묶어서 관리할 목적 ( 윈도우의 폴더개념 )
=====> 도메인으로 지정 ( 유일한 값이기 때문에 )
: 문법
package 패키지명; 또는 package 패키지명.패키지명1;
예>
package com.test;
public class Student{
}
: 특징
===> 패키지가 서로 다른 클래스는 접근 불가능하다.
10. import
: 용도
===> 패키지가 다른 클래스를 접근할 때 사용한다.
: 문법
===> import 패키지명.클래스명;
: java.lang 패키지의 클래스는 import 없이 사용가능한 유일한 패키지이다.
(다른 패키지는 반드시 import 해야 한다.)
11. 연산자
1) 산술연산자
: + - * / %
2) 증감 연산자
: ++ (1증가)
: -- (1감소)
예> int num = 2;
num++; //3
int num2 = 2;
++num; //3
: 주의할 점은 다른 연산자와 같이 사용시 주의
예>
int a = 2;
int b = a++;
// a = 3
// b = 2
int x = 2;
int y = ++x;
// a = 3
// b = 3
3) 비교 연산자
A == B
A != B
A > B
A >= B
A < B
A <= B
4) 대입 연산자
5) 3항 연산자
(조건식) ? 참 : 거짓 ;
예>
int xxx = 3;
int num = ( xxx > 4 ) ? 100 : 200 ;
//num ? 200
6) instanceOf
: 클래스의 데이터 타입을 체크하기 위한 연산자
: 변수명 instanceOf 클래스명
: 결과값은 boolean
예>
String name = "zzzz";
if( name instanceOf String ){
}
7) 논리연산자
===> 연산결과는 boolean
: &&
: ||
12. 제어문
1) 조건문
if 문
문법 :
if(조건식) statement;
====> 조건식이 true 인 경우에만 statement가 실행된다.
- if ~ else 문
if(조건식)
statement1;
else
statement2;
- switch 문
: 값의 데이터 타입 ( int, char, short, byte)
(long은 제외)
switch( 값 ){
case 값1 :
break;
case 값2 :
break;
case 값3 :
break;
case 값4 :
break;
default :
}
13.
14.
15. 상속
- 클래스들간의 관계중에서 'is a' 관계이다.
예> 사원, 관리자, 엔지니어
관리자 is a 사원
엔지니어 is a 사원
===> 상속관계가 성립이 된다.
* UML
사원 (부모클래스, super class)
관리자 엔지니어 (자식 클래스, child class)
* 클래스들 간의 관계 ( class relationship)
- is a
- has a ( use a )
예> 분석단계 객체 추출
: 학생, 대학생, 컴퓨터, 트럭, 엔진, ....
대학생 is a 학생
트럭 has a 엔진
학생 use a 컴퓨터
* has a , use a를 가상세계에서도 표현해야 된다.
public class 트럭{
// 변수
엔진 a; //인스턴스 변수, composition(끈끈한 관계)
public void xx(){
라디오 y; //로컬 변수 , aggregation (덜 끈끈한 관계)
}
}
public class 엔진 {
}
* UML ( Unified Modeling Language )
: 도식화하는 방법
: 클래스 다이어그램
변수만 정의해 놓고 오른쪽 마우스 => source => getter and setter 선택하면 자동으로 get,setter 메소드 정의된다.
javac StudnetTest.java //컴파일
java StudentTest // 실행
this.name = name; 에서 this.name은 heap에 있는 name, name은 stack에 있는 name