본문 바로가기
Java 웹 프로그래밍

12월 4일 강의 요약

by irerin07 2018. 12. 4.
728x90

생성자를 배우기 전에...



코드를 한줄 한줄 읽으면서 그때마다 필요한 클래스 정보를 처음 한번만 메모리에 올린다.


만약 클래스 정보를 수정/변경 후에 클래스 정보를 반영하려면 프로그램을 종료 후 재실행을 해야한다.



코드를 읽으면서 필요한 클래스 정보를 요청했는데 그에 해당하는 클래스가 없다면 Exceoption 발생, 프로그램이 종료된다.



생성자

(레퍼런스 타입)Ball (레퍼런스 변수) b1 = (인스턴스 생성을 위한 연산자) new (생성자) Ball();


Ball 인스턴스를 메모리에 생성한다.

각각의 객체를 가리키는 참조 변수가 생성된다.


Ball b1 = new Ball();

Ball b2 = new Ball();


b1 b2는 인스턴스를 참조하는 변수


*자바에서 '='는 참조를 의미한다. -> 왼쪽이 오른쪽을 참조한다.


public class Exam01{
public static void main(String[] args){
Ball b1 = new Ball(); //인스턴스 생성 new 연산자
Ball b2 = b1;

if(b1 == b2){
System.out.println("b1과 b2는 같은 객체를 참조합니다.");
}else{
System.out.println("b1과 b2는 다른 객체를 참조합니다.");
}

}
}


레퍼런스 변수 사이에 있는 '=='는 같은 인스턴스를 참조하는지 비교하는 연산자이다.


인스턴스 사용을 위해서는 반드시 레퍼런스 변수가 있어야한다. **




응집도와 추상화


객체는 응집도가 높아야하고 추상화가 잘 되어있어야 한다.


응집도 - 관련된 것을 잘 모아서 가지고 있는 것.

추상화 - 중요한 것은 남기고 불필요한 것은 없애는 것.


같은 객체라도 중요한 정보들은 달라진다.

그렇기에 응집도와 추상화가 중요하다.





public class Exam02{
public static void main(String[] args){
Cal c1 = new Cal();
for(int i = 1; i <= 100; i++){
c1.addition(i);
}
c1.print();
}
}




public class Cal{
//내부적으로 값을 가진다.
private int value; //필드 -> 가지는 값.

public void addition(int value){
this.value = this. value + value;
}
public void subtraction(int value){
this.value = this.value - value;
}
public void clear(){
value = 0;
}
public void print(){
System.out.println(value);
}
}




Cal 이라는 객체를 이용하여 만든 계산기

1에서 100까지의 숫자를 모두 합하여 결과를 출력한다.


Cal : 계산을 위한 객체

-          Value – 내부적으로 가지는 정수

-          기능

o   더하다(정수) – 특정 정수 값을 받아서 value 더한다.

o   빼다(정수) – 특정 정수 값을 받아서 value에서 뺀다.

o   초기화() - value값을 0으로 바꾼다

o   출력() - value값을 출력한다.

클래스가 가지는 값을 Field라고 한다.






클래스는 필드와 메소드를 가진다.

필드는 클래스가 가지는 값,

메소드는 클래스의 기능을 말한다.

 

int value; - 정수를 저장할 있는 value라는 필드를 선언했다.

숫자에 해당하는 기본형 타입은 필드 선언 모두 0값을 가진다.


메소드는

접근제어자 리턴타입 메소드이름(파라미터타입 파라미터변수…..){

                메소드 내용

}


접근제어자

-          Public

-          Protected

-          Private

-          (default) 아무것도 붙이지 않는다.



메소드에 선언되는 변수는 모두 지역변수(local variables)라고 한다.

메소드에서 필드를 사용 때에는 this.변수명 으로 사용한다.

메소드에서 선언된 지역변수 이름이 필드와 같은 이름이 없을 this 생략이 가능하다.


필드는 직접 접근해서는 안된다. -> 의도치 않게 사용자가 필드에 접근하여 값에 변동이 생기면 오류가 나거나 할 수 있다.

그러니 외부에서 필드에 접근 할 수 없도록 접근제한자를 사용하여 외부에서 직접 변수에 접근 할 수 없도록 한다.


private int value;



상속과 인스턴스


Software Development Life Cycle 소프트웨어 개발 생명 주기

항상 프로그램은 만들기 전에 필요한 기능부터 생각해야 한다.

자바에서 기능을 생각하여 정의한 것을 interface라고 한다.

인터페이스는 부모클래스에서 선언이 된 메소드를 자식 클래스에서 구현하여 쓰는 것이다. -> 구현의 관계


인터페이스의 예

Collection Framework에서 제공하는 여러 interface들


1.       Collection

a.       여기에 자료가 있다는 것을 표현한다.

b.       중복 허용

c.       순서를 기억하지 않는다

d.       Add(E) – E Element

e.       Int Size()

2.       Iterator

a.       자료구조에서 값을 꺼낼 사용

b.       hasNext() – 꺼낼게 있으면 True 없으면 False

c.       E next() – 꺼낸다

3.       Set

a.       중복 비허용

b.       순서를 기억하지 않는다

c.       Boolean add(e) – 추가, 중복되는 값이 없으면 True

4.       List

a.       순서를 기억한다

b.       중복 허용

c.       E get(index) – 특정 위치의 값을 꺼낸다.

5.       Map

a.       Key Value 형태로 값을 관리

b.       Put(key, value) – 값을 저장

c.       Value get(key) – key 해당하는 value 구한다.

 


일반화 - 각각의 대상들이 가진 성질을 모두 설명할 수 있는 대상들이 가진 공통점을 찾는 것

이렇게 일반화 된 클래스를 부모클래스라고 한다. 

이러한 추상 클래스는 객체가 될 수 없다. -> 실제로 존재하는 사자 호랑이 고양이 강아지 독수리같은 것이 아니라 '동물'이라는 개념이 존재하는 것. 즉 실체가 없다 = 객체가 될 수 없다.

상속은 is a 관계이다

부모클래스에서 구현 된 메소드는 자식클래스에서도 사용이 가능하다. -> 상속받기 때문












728x90