월루를 꿈꾸는 대학생

ch 6-1 객체지향 본문

Programing/Java

ch 6-1 객체지향

하즈시 2021. 3. 21. 18:37
728x90

1. 객체지향언어

 

1.2 객체지향 언어 

 

- 코드의 재사용성이 높다 // 기존 코드 이용

- 코드의 관리가 용이하다  // 관계를 이용

- 신뢰성 높은 프로그래밍 가능  // 제어자와 메서드 이용 중복을 제거 

 

재사용성 유지보수 중복된 코드의 제거 

 

2. 클래스와 객체

 

2.1 클래스와 객체의 정의와 용도

 

클래스 정의 : 클래스란 객체를 정의해 놓은 것 

클래스의 용도 : 클래스는 객체를 생성하는데 사용 

 

객체의 정의 : 실제로 존재하는 것 // 사물 또는 개념

객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름

 

유형의 객체 : 책상, 의자, 자동차 

무형의 객체 : 수학 공식 , 프로그램 에러 등 

 

ex_ tv 설계도 (클래스)는 tv (객체 )를 정의 한것이며 tv(객체)를 만드는데 사용 

     즉 클래스는 설계도 객체는 이 클래스를 활용한 생산물 

 

** 클래스로 객체 생성이유 

- 설계도만 잘 만들어 놓으면 제품은 알아서 좋은 제품이 나오니까 고민할 필요없이 설계도대로만 만들면 되니까! 

 

 

2.2 객체와 인스턴스

 

인스턴스화 -> 클래스로부터 객체를 만드는 과정 즉 객체를 생성하는 과정 

 

 

2.3 객체의 구성요소 - 속성과 기능 

 

객체는 속성과 기능의 집합 

객체가 가지고 있는 속성과 기능을 멤버라고 칭함

 

속성 : 멤버변수 , 특성 , 필드, 상태  // 변수

기능 : 메서드 , 함수, 행위  // 함수 

 

 

2.4 인스턴스의 생성과 사용 

 

- 클래스를 만들었다 : 그저 설계도를 만들었을 뿐 무슨 기능을 하는것은 아님... 종이쪼가리니까

                            즉 이 종이 설계도를 가지고 인스턴스를 만들어야 쓸 수 있다 

 

클래스명 변수명;     // 클래스 객체를 참조하기 위한 참조변수 선언 
변수명 = new 클래스명() ;  // 객체를 생성 후 해당 주소를 참조변수에 저장 
 
Tv t;   
t = new Tv();

 

Tv t;

- Tv 의 클래스 타입 참조변수 t를 선언 

- 메모리 사엥 t를 위한 공간이 마려되고 아직 아무런 것도 없는 상태 

 

t = new Tv();

- new 연산자에 의해 tv클래스의 인스턴스가 메모리 빈 공간에 생성 

- 해당 멤버변수들 즉 변수들은 default 값으로 초기화 

- 대입 연산자 = 을 통해 해당 인스턴스의 주소를 참조변수t가 가르키게 됨 즉 이를 통해 인스턴스에 접근이 가능하기에 참조변수는 무조건 필요하다 

- new를 통해 그 클래스의 인스턴스를 메모리 상에서 새로 만든다. 참조변수 t는 그저 그 인스턴스의 주소를 가르킬 뿐 인스턴스에 어떤 영향을 미치는 것은 아니다 

 

 

t.channelDown();

- t = new Tv(); 해당 선언으로 이미 참조변수 t가 인스턴스를 가르키고 있기에 인스턴스 Tv의 기능을 사용할때

참조변수.method의 형식으로 기능 사용 가능 

 

인스턴스는 참조변수를 통해서만 다룰 수 있으며 참조변수의 타입은 인스턴스의 타입과 일치해야한다

참조변수가 없다면 인스턴스를 사용할 수 없고 사용할 수 없는 인ㄴ스턴스는 삭제된다 

 

 

같은 클래스(설계도)로 생성되었더라도 각 인스턴스의 속성(멤버변수 , 변수)는 서로 다른 값을 유지할 수 있으며 메서드의 내용은 모든 인스턴스에 대해 동일하다 

같은 설계도에서 나온 제품이라도 현재 상태는 제품에 따라 다를 수 있듯..

 

 

 

2.5 객체 배열 

 

- 많은 수의 객체를 다뤄야할 때 편함 

- 객체 배열 안에는 인스턴스가 아닌 해당 객체의 주소가 저장 즉 참조변수들을 하나로 묶은 참조변수 배열 

 

 

Tv tv1, tv2, tv3 ;    ->>>   Tv[] tvArr = new Tv[3];

 

길이가 3인 객체배열을 통해 해당 크기가 3인 각각 배열 안에는 defualt 값으로 null이 들어있음 

아무것도 참조하지 않음 

 

이렇게만 만드는 게 끝이 아니라 해당 배열 안에 참조할 주소를 넣어주어야함 

 

 

tvArr[0] = new Tv(); // new를 통해 인스턴스 생성 후 그 주소가 배열 [0]에 저장 

tvArr[1] = new Tv();

tvArr[2] = new Tv();

 

혹은 Tv[] tvArr = { new Tv(), new Tv(), new Tv() }

 

아니면 반복문도 가능 ! 

 

 

객체배열도 배열이기에 같은 자료형만 저장이 가능하다 즉 같은 타입의 객체만 저장가능 

 

 

 

2.6 클래스의 또 다른 정의 

 

- 클래스란 객체를 생성하기 위한 설계도 . 틀이며 클래스는 속성과 기능 즉 함수와 변수로 이루어짐 

- String이라는 클래스로 문자열을 다룬다 이유  ? 필요한 함수들을 함께 묶기 위해서 그래서 .length를 사용가능 왜? 클래스니까!

 

3. 변수와 메서드 

 

3.1 선언위치에 따른 변수의 종류 

 

https://whatisthenext.tistory.com/37
https://nittaku.tistory.com/78

 

1) 인스턴스 변수

- 클래스 영역에 선언 / 인스턴스 생성시 같이 만들어짐 

- 인스턴스는 독립적인 공간을 가지기에 해당 변수의 값은 서로 다른 값을 가질 수 있다 

 

2) 클래스 변수 

- 인스턴스변수에 static 붙이면 끝

- 클래스 변수는 공통된 공간을 공유 즉 한 클래스에서 파생된 모든 인스턴스들이 공통적인 값을 가짐

- 인스턴스변수와 달리 생성하지 않아도 언제든 사용가능 <클래스이름.클래스변수>

 

3) 지역변수

- 메서드 내에서만 사용되는 변수 메서드 종료시 소멸 

- 우리가 보통 for문에서 선언한 변수가 for 문 나오면 사라지는 것과 동일 

 

 

3.2 클래스 변수와 인스턴스 변수 

 

- 트로트 카드의 경우 같은 사이즈의 높이와 크기를 가져야한다 - 클래스변수 static

- 각 트로트 카드의 값과 모양은 달라야한다 - 인스턴스변수 

 

클래스변수는 인스턴스 생성 안해도  클래스이름.클래스변수 형식으로 사용가능 

 

클래스 변수인 static은 공유하기 때문에 하나의 참조변수로 이를 접근해서 수정하면 나머지도 다 바뀌게 됨 -> 모두 같은 저장 공간을 참조하기에 따로 저장공간이 있다고 봐야함 

 

인스턴스 변수는 인스턴수가 생성될 때마다 생성되기에 인스턴스마다 각각 다른 값을 가지지만 클래스 변수는 모든 인스턴스가 하나의 저장공간에 공유하므로 항상 공통된 값을 가진다 

 

 

3.3 메서드 

 

- 특정 작업을 수행하는 일련의 문자들을 하나로 묶은 것 

- method는 하나의 값밖에 반환할 수 없기에 여러 결과값 반환하려면 배열이나 객체에 대한 참조변수를 사용하자 

 

메서드 사용이유

1. 재사용성 

2. 중복된 코드 제거  // 하나의 메소드는 하나의 기능만 수행하도록 

3. 프로그램 구조화 

 

 

3.4 메서드의 선언과 구현 

 

지역변수가 아닌 매개변수 

매개변수 선언 

- 메서드 작업시 필요한 값들 입력 제공 

- 입력받을 필요없으면 ( ) 

 

반환타입

- 작업 수행 결과 타입을 적음

- 아무것도 없다면 void 작성 

 

return문

- 반환값이 있는 method의 경우 모든 경우에 return문이 필요 // 없어도 error 안 뜬 이유는 컴파일러가 자동으로 추가해줌

- return문의 반환 타입은 해당 반환타입과 이리하거나 자동 형변환이 가능해야함 

 

 

3.5 메서드의 호출

 

메서드의 실행흐름

- 같은 클래스 내 메서드끼리는 참조변수 없이 사용 가능 

- static 메서드는 같은 클래스 내의 인스턴스 메서드 사용불가 

 

 

3.7 jvm 메모리 구조

 

 

https://gptjs409.github.io/java/2019/09/04/jvm.html

메서드 영역 

- 클래스에 대한 정보 . 클래스변수의 영역

 

- 인스턴스가 생성되는 공간 

- 모든 인스턴스는 힙 영역에 생성되며 인스턴스변수가 이에 들어감 

 

call stack

- 매서드 작업에 필요한 메모리 공간을 제공  ex _ main 메서드

- 메서드 작업 끝나면 해당 공간 반환 

- 가장 먼저 호출된 메서드가 가장 밑에 두번째는 그 위 

 

- 메서드가 호출되면 수행에 필요한 만큼 메모리를 스택에 할당

- 메서드가 수행을 마치고 나면 사용했던 메모리 반환하고 스택에서 제거

- 호출스택 제일 위에 있는 메서드가 현재 실행중인 메서드 

- 아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드 

 

 

3.8 기본형 매개변수와 참조형 매개변수 

 

기본형 매개변수 - 변수의 값을 읽기만 가능 

참조형 매개변수 - 변수의 값을 읽고 변경 가능 

 

 

728x90

'Programing > Java' 카테고리의 다른 글

6-2 객체지향  (0) 2021.03.28
ch6 알고리즘  (0) 2021.03.21
ch5 배열 백준 알고리즘  (0) 2021.03.13
CH5 배열  (0) 2021.03.12
ch 4 조건문과 반복문 _ 알고리즘  (0) 2021.03.07