1. 객체지향언어
객체와 객체 사이에 이루어지는 상호작용을 컴퓨터로 옮겨 만든 것을 객체지향프로그래밍이라고 한다.
객체 : 클래스에 정의 된 내용을 토대로 heap 메모리 영역에 생성된 것
클래스 - 캡슐화 :외부에 데이터가 안보이도록(은닉화 후) 기능(method)을 집어넣은 것
유연성을 갖추기 위해 추상화를 통해서 클래스를 만들고 그 클래스를 통해 객체를 만든다.
⑴ 캡슐화의 원칙
1. 클래스의 멤버 변수에 대한 접근 권한은 private를 원칙으로 한다.
2. 클래스 멤버 변수에 대한 연산처리를 목적으로 하는 함수들을 클래스 내부에 작성한다.
3. 멤버 함수는 클래스 밖에서 접근할 수 있도록 public으로 설정한다.
1) 클래스
캡슐화를 통해 만들어진 것 / 클래스를 인스턴스(객체)로 만드는 것을 인스턴스화라고 정의함 / 클래스에 정의된 대로 heap 메모리 영역에 생성된겻 = 객체
public(접근 제한자/생략가능) - 예약어(생략가능) - class - 클래스명 {
속성 값 설정 부분 - 필드
기능 정의 부분 - method
}
(1) 접근제한자 종류
+ public *전체 (같은 패키지, 다른 패키지 모두 접근 가능 )
~ (default) *생략 (같은 패키지 안에서만 접근 가능)
# protected (default와 비슷하지만 상속된 클래스의 경우에는 접근이 가능함)
- private (캡슐화를 위해서 사용함) *해당 클래스
|
해당 클래스 내부
|
같은 패키지
|
다른 패키지
|
+ public
|
O
|
O
|
O
|
# protected
|
O
|
O
|
O (후손 클래스 한정)
|
~(default)
|
O
|
O
|
X
|
- private
|
O
|
X
|
X
|
2) package / import
⑴ 서로 관련된 클래스 혹은 인터페이스의 묶음으로 폴더와 비슷 패키지는 서브 패키지를 가질 수 있으며 ‘ . ’으로 구분된다.
패키지가 선언되지 않은 클래스는 자동적으로 이름없는 패키지(default)에 속하게 됨
⑵ import 내가 사용한 클래스가 어떤 위치에 있는지 알려주기 위해 사용한다.
즉, 외부 패키지에 있는 경우 import 해오는 것이다.
(예외) java.lang 안에 있는 클래스는 import 없이도 사용이 가능하다.
3) 필드 (멤버 변수) < 속성값을 설정하는 부분 >
⑴ static : 여러 객체가 공유해서 쓸 목적으로 사용한다. - > static 메모리 영역에 할당
static이 붙은 변수 static변수 = 클래스 변수 (프로그램 시작부터 프로그램 끝날 때까지 유지 그러므로 객체를 만들어줄 필요가 없다.)
static이 붙지 않는 변수 인스턴스 변수(객체가 생성되어야만 생성 , 객체가 끝나면 heap 메모리 영역에서 사라진다)
밑줄이 그어져 있는 경우에는 static 선언
⑵ final : 종단(마지막)이라는 의미를 갖는다. 변수명이 모두 대문자로 쓰여있는 경우 final 선언
초기화

ㄴ 밑줄의 경우에는 static 선언한다
4) 생성자
⑴ 메소드의 일종으로 heap 메모리 영역에 할당된 객체의 필드를 초기화시키는 역할을 한다.
접근제한자 생성자명( 매개변수 )
접근제한자와 매개변수는 생략 가능
ex) Member m = new Member(); < 해당 부분
(new - heap 메모리 영역에 공간을 생성하고 주소 값을 할당시키는 역할)
()는 매개 변수를 지정하는 역할
⑵ 생성자의 규칙
- 생성자의 이름은 클래스명과 동일하게 지어야한다.
- 반환타입이 존재하지 않는다.
⑶ 생성자의 종류
매개변수의 유무에 따라 종류를 나누게 된다.
- 기본 생성자 : 작성하지 않아도 된다. 작성하지 않으면 JVM이 자동으로 생성한다.
- 매개변수가 있는 생성자 : 매개변수를 통해 전달받은 값으로 필드를 초기화
기본생성자를 만들어주지 않고 매개변수 있는 생성자 만들어줬을경우 기본 성생자는 자동으로 생성되지 않는다.
5) method
⑴ 메소드의 구조
public - 접근제한자 생략가능
static - 예약어 생략가능
void - 반환타입 생략불가 / 기본자료형을 적어준다. void 라고 적혀있는 경우,"반환 값이 없다"는 것을 의미
main - 메소드명 생략불가
String[] ags - 매개변수 생략가능
⑵ void
void : 반환 값 없음
기본 자료형 : Integer.parseInt() / String.charAt()/equals()/length(), Math.random(),,,
배열 : Arrays.copyOf < 얕은 복사 >
클래스 : Scanner.nextLine()/next()
ㄴ 주소값 반환
⑶ 매개변수
매개변수가 없음 = 전달할 값이 없음
기본 자료형
배열
클래스 - 배열과 클래스 둘다 주소값 호출
가변인자 : 매개변수 개수 유동적 ex)printf() : 자료형...변수명
- 매개변수의 유무와 반환 값 유무에 따른 구분 -
예1 ) 반환타입이 있고 매개변수도 있는 메소드
public void method1() {
System.out.println("매개 변수와 반환 값 둘다 없는 메소드입니다.");
}
예2 ) 반환타입은 있고 매개변수는 없는 메소드
public int method2() {
//this method must return a result of type int
int num1 =10; int num2 = 3;
// int sum = num1 + num2;
// return num1 + num2;
// return 10 +3 ;
return 13;
}
예3 ) 반환타입은 없고 매개변수는 있는 메소드
public void method3(int num1, int num2) {
System.out.println(num1 + ", " +num2);
}
예4 ) 반환타입도 없고 매개변수도 없는 메소드
public int method4(int num1, int num2) {
return num1+num2;
}
1. 오버로딩
한 클래스 내에서 같은 이름의 메소드를 여러 개 작성할 수 있도록 하는 기법 (생성자에도 적용이 가능함.)
1) 같은 이름의 메소드
2) 매개변수의 타입 or 개수 or 순서가 달라야함.
ㄴ 즉, 반환 타입, 접근제한자에 따른 영향은 미치지 않는다.
(1) . 지역변수와 필드의 이름이 같은 경우에는 필드보다 지역변수가 우선시된다.
(2). this 레퍼런스 변수(참조변수)의 사용
- 내 주소 값을 갖고있는 레퍼런스
- 객체 자신을 나타내는 변수
(3) this() 라는 생성자를 통해서 치환
- 같은 클래스에 있는 생성자 호출
- 사용할 때는 무조건 첫줄에다가 작성하는 것이 원칙
private String title;
private String publisher;
private String author;
private int price;
private double discountRate;
public Book() { }
public Book(String title, String publisher, String author) {
this.title = title;
this.publisher = publisher;
this.author = author;
}
public Book(String title, String publisher, String author, int price, double discountRate) {
this(title, publisher, author);
this.price = price;
this.discountRate = discountRate;
}
(4). 다른 값을 가져오기로 할 때는 Set 을 이용함
**수업 들었을 때 헷갈렸던 점
위에서 먼저 this 레퍼런스 변수로 선언한 후에 this() 생성자를 이용하여 묶어야 한다는 점 !
2. MVC 패턴 ( Model View Controller)
Model 데이터 관련 vo 데이터 임시 저장공간
dao(service) 외부 데이터 저장 공간과 연결(file, db 등)
View 화면(consloe, 브라우저)
Controller M-V 다리역할 넘겨받은 데이터 가공 출력할 View 결정
3. 객체배열
객체를 담는 배열
선언 : 클래스명[] 배열명; / 클래스명 배열명[];
할당 : 배열명 = new 클래스명[]
선언&할당 : 클래스명[] 배열명 = new 클래스명[크기];
초기화 : 배열명[인덱스] = new 클래스명();
배열들이 참조형 객체를 담아놓는 참조형 변수가 되었다
예) 초기화
iArr = {new Trainee(), new Trainee()} ;
'back-end > JAVA' 카테고리의 다른 글
[수업-java] 10. API (0) | 2022.08.06 |
---|---|
[수업-java] 09. 상속 (0) | 2022.08.06 |
[수업-java] 07. 배열 (0) | 2022.08.06 |
[수업-Java] 06. (제어문) 분기문 (0) | 2022.08.06 |
[수업-Java] 05. (제어문) 반복문 (0) | 2022.08.06 |