티스토리 뷰

TIL/JAVA

객체지향(OOP)Part1요약

YEIKKI 2022. 12. 26. 13:03

 

클래스와 객체

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

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

객체의 정의 : 실제 존재, 사물 또는 개념

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

 

조금 더 쉽게 생각해보자면..!

클래스: 제품 설계도

객체: 제품

속성과 기능

인스턴스: 특정한 객체를 지칭할때 

 

객체 => 속성(변수)+ 기능(메서드)

 

1. 클래스가 필요한 이유:  객체를 생성하기 위해서

2. 객체가  왜 필요한가: 객체를 사용하기 위해서

3. 객체를 사용한다는 것은: 객체가 가진 속성 + 기능 사용

 

객체 생성과 사용

클래스명 변수명= new 클래스명();

만약 객체를 사용해서 온도 내림 기능을 사용하면!

a.temperature=7;

a.temperatureDown=6;

 

객체배열 == 참조변수 배열

A a1,a2,a3;

Ac[ ]  aArr= new Ac[ 3 ];

 

 


클래스의 정의 

클래스 == 데이터 + 함수

 

변수= 하나의 Data를 저장할수 있는 공간

 

배열= 같은 종류의 여러 Data를 하나로 저장 할 수 있는 공간

 

구조체= 서로 관련된 여러 데이터(종류 관계) 하나로 저장 할수있는 공간

 

클래스= 데이터와 함수의 결합(구조체 와 함수)

 

사용자 정의 타입= 원하는 타입을 직접 만들 수있다.

class Time{
int hour;
int minute;
int second;
}

 


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

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

 

공통 속성(cv) 사용               cv사용시   클래스명.cv=200;

 객체생성없이 사용가능                         Card. width=200;

 

개별속성(iv)  사용


메서드(Method)  

-문장들의 묶음(작업단위)

-값(입력)을 받아서 처리하고 , 결과를 반환(출력)

 

장점:

중복코드 제거

관리 용이

재사용가능

Static메서드

객체생성없이 '클래스명.메서드명();' 으로 호출

인스턴스 멤버(iv,im)와 관련없는 작업을 하는 메서드

메서드내에서 iv 사용불가

인스턴스메서드 호출불가

 

인스턴스 메서드

인스턴스 생성후' 참조변수.메서드명();' 으로 호출

인스턴스 멤버(iv,im) 와 관련된 작업을 하는 메서드

메서드내에서 iv사용가능

 


호출스택

스택: 밑이 막힌 상자,위에 차곡 차곡 쌓인다.

-메서드 수행에 필요한 메모리가 제공되는 공간

-메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제


오버로딩(overloading)-->하는 일은 같으나 타입 다르다고 생각하면 이해하기 쉬움

-한 클래스 안에 같은 이름의 메서드 여러개 정의

 

성립조건(외우기)

-메서드명 같아야함

-매개변수 개수 or 타입 달라야함

-반환 타입은 영향없음

int add(int x , int y) {
   return x+y;
   }
   
  long add( long x, long y) {
  return x+y;
  }

생성자(constructor)

-인스턴스가 생성될때 마다 호출되는 "인스턴스 초기화 메서드"

iv 초기화에 사용

-생성자도 오버로딩이 가능하므로 하나의 클래스에 여러개의 생성자 존재

 

조건

이름이 클래스명과 같아야함

리턴값이 없음(void 안붙임)

클래스명(타입 변수명 , 타입 변수,.....){
//인스턴스 생성시 수행될 코드
//주로 인스턴스 변수의 초기화 코드를 적는다.
}

class Circle {

Circle(){
//매개변수가 없는 생성자
...
}

Circle(int x, int y) {
//매개변수가 있는 생성자
.....
}

연산자 new가 인스턴스를 생성하는거지 생성자가 인스턴스를 생성하는것이 아닌걸 기억하자!

 

 

기본 생성자(default constructor)

-생성작가 하나도 없을때만 컴파일러가 기본생성자 자동추가

-무조건 하나씩  추가해주자

 

매개변수가 있는 생성자

-인스턴스를 생성하는 동시에 원하는 값으로 초기화를 할수있게 된다.

class Car{
String color;
String geartype;
int door;


Car () {}

Car(String a, String b, int c) {
color=a;
geartype=b;
door=c;
  }
}

class Test {
public static void main(String[] arg) {
Car c1= new car();
c1.color="green";
c1.geartype="manual";
c1.door=6;


Car c2= new Car("red","auto",4);
      }
   }

인스턴스를 생성할 때는 다음의 2가지  사항으로 결정

클래스- 어떤 클래스의 인스턴스를 생성할 것인가?

생성자- 선택한 클래스의 어떤 생성자로 인스턴스를 생성 할것인가?


생성자 this() 

-생성자에서 다른 생성자 호출할때 사용

-다른 생성자 호출 시 첫줄에서만 사용가능

 

 

참조변수 this.

인스턴스 자신을 가리키는 참조변수

인스턴스 메서드(생성자포함) 에서 사용가능

지역변수(lv) 와 iv를 구별할때 사용

class Car2{
String color;
String gearType;
int door;

Car2(){
this("white", "auto",4);// Car2(String color,String gearType, int door) 호출
}

Car2(String color){
this(color,"auto",4);//Car2(String color,String gearType, int door) 호출
}

Car2(String color,String gearType, int door) {
this.color=color;
this.gearType= gearType;
this.door=door;
    }
 }
 
class Test{
public static void main(String[] args) {
Car2 c1= new Car2();
Car2 c2= new Car2();

System.out.println("c1의 color="+ c1.color+",door=" +c1.door+",c1.gearType="+c1.gearType);
System.out.println("c2의 color="+ c2.color+",door=" +c2.door+",c2.gearType="+c2.gearType);

자동차(Car2인스턴스)를 생산할때 아무런 옵션도 주지 않으면 , 기본적으로 흰색에 자동변속기어, 그리고 문의 개수가 4개인 자동차가 생산되도록 기본세팅해놓은것을 비유

 

서로  유기적으로 호출 하면서 수정이 필요한 경우에 보다 적은 코드만을 변경하면 되므로 유지보수 하기 좋은 코드가 된다.


변수의 초기화

지역변수(lv)는 수동초기화 해야함( 사용전 꼭)

멤버변수(iv,cv)는 자동 초기화됨.

 

순서

cv -> iv (자동초기화)  ->간단 초기화(=대입연산자사용) -> 복잡 초기화-인스턴스 초기화 블럭: {  }-클래스 초기화 블럭: static {  }-생성자 <-iv 초기화, 복잡 초기화

'TIL > JAVA' 카테고리의 다른 글

객체지향(OOP)상속  (0) 2023.01.06
객체지향(OOP)메서드  (0) 2022.12.29
배열  (0) 2022.12.23
제어문  (0) 2022.12.22
연산자  (0) 2022.12.21