본문 바로가기
JAVA

객체지향 프로그래밍

by moonstal 2022. 3. 5.

- 객체지향 언어: 코드의 재사용성 높고 유지보수 용이, 중복코드 제거

  -캡슐화, 상속, 추상화, 다형성 (캡상추다)

 

- 클래스(설계도): 객체를 정의해 놓은것 , 용도 객체를 생성하는데 사용

- 객체(제품): 실제 존재하는 것, 용도 객체가 가지고 있는 기능과 속성에 따라 다름

  속성(변수)+기능(메서드)

 

- 객체: 모든 인스턴스를 대표하는 일반적 용어

- 인스턴스: 특정 클래스로부터 생성된 객체(tv인스턴스)

  클래스->인스턴스(객체)

 

-클래스 객체생성위해 필요

-객체 사용위해 객체 필요

-객체를 사용: 객체가 가진 속성(변수)과 기능(메서드)을 사용하는 것

 

- 하나의 소스파일에 여러 클래스 작성시 주의: public 클래스의 이름과 소스파일의 이름 일치!

 

1.  클래스 작성

2. 객체 생성 Tv t= new Tv();

  t는 참조변수(리모콘) 주소갖음

3. 객체 사용

  t.channel=7; //변수사용

  t.channelDown(); //메서드 사용(호출)

 

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

  Tv[] tvArr= new Tv[3];

  tvArr[0]= new Tv(); 객체를 반드시 생성해야함!!

  Tv[] tvArr={new Tv(), new Tv(), new Tv()};

 

- 변수: 하나의 데이터를 저장할 수 있는 공간

- 배열: 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간

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

- 클래스== 데이터 + 함수

- 클래스: 사용자 정의 타입 원하는 타입을 직접 만들 수 있다.

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

  Time t = new Time();
  t.hour=12;
  t.minute=34;
  t.second=56;

 

- 변수 종류

  - 클래스 영역

  int iv; 인스턴스변수-인스턴스가 생성되었을 때/개별속성/참조변수.변수/객체마다

  static int cv; 클래스변수-클래스가 메모리에 올라갈때/공통속성/클래스이름.변수/한개

  - 메서드 영역

  int lv=0; 지역변수-변수 선언문이 수행되었을때

- 객체는 iv변수 묶음

 

- 메서드: 작업단위로 문장들을 묶어서 이름 붙임, 값(매개변수) 받아서 결과 반환

 int add(int x, int y){

  int result =x+y;

  return result;

 }

- 메서드 장점: 중복제거, 관리쉽다, 재사용, 간결

- 메서드 호출: 메서드이름(값1,값2);

  int result = add(3,5);

 

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

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

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

 

- 기본형 매개변수: 변수의 값을 읽기만 할 수 있다.

- 참조형 매개변수: 변수의 값을 읽고 변경할 수 있다.

 

- 인스턴스 메서드: 인스턴스 생성 후 , 참조변수.메서드이름() 호출

  인스턴스멤버와 관련된 작업하는 메서드

  메서드 내에서 인스턴스 변수 사용가능

- static 메서드: 객체생성없이 '클래스이름.메서드이름()' 호출

  인스턴스 멤버와 관련 없는 작업하는 메서드

  메서드 내에서 인스턴스 변수 사용불가

 

- 오버로딩: 한클래스 안에 같은 이름의 메서드 여러 개 정의하는 것

 void println()

 void println(boolean x)

 void println(char x)

 void println(double x)

- 조건:

메서드 이름 같아야한다.

매개변수 개수 또는 타입이 달라야한다

반환타입은 영향없다.

 

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

  이름이 클래스이름과 같아야한다.

  리턴값이 없다.

  모든 클래스는 반드시 생성자를 가져야 한다.

 Time t = new Time(12,34,56); 생성자호출

 클래스이름(String kind, int number){ 인스턴스 초기화 작업}

 

- 기본 생성자: 매개변수가 없는 생성자

  클래스이름(){ }

  생성자가 하나도 없을 때만, 컴파일러가 자동추가****

 

- 생성자 this(): 생성자에서 다른 생성자 호출할 때

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

String a;
String b;
int c;

car(){
this("a","b",3);
}

car(String a){
this(a,"b",4);
}

car(String a, String b, int c){
this.a=a; //iv인스턴스변수=lv지역변수
this.b=b;
this.c=c;
}

 

- 참조변수 this

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

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

  지역변수와 인스턴스 변수를 구별할때 사용

 

- 지역변수는 수동 초기화 해야함

void method(){

int i=0; 초기화필수!!

int j=i;

}

- 멤버변수는 자동 초기화된다

 -명시적 초기화 = 대입연산자

   int door = 4;

   Engine e = new Engine();

 -초기화 블럭 

   인스턴스 초기화 블럭 {} 잘안씀

   클래스 초기화 블럭 static{} cv

class StaticBlockTest 
{
	static int[] arr = new int[10];

	static {
		for(int i=0;i<arr.length;i++) {
			// 1과 10사이의 임의의 값을 배열 arr에 저장한다.
			arr[i] = (int)(Math.random()*10) + 1;
		}
	}

	public static void main(String args[]) {
		for(int i=0; i<arr.length;i++)
			System.out.println("arr["+i+"] :" + arr[i]);
	}
}

 -생성자: 복잡초기화 iv

 

- 클래스 변수 초기화 시점: 클래스가 처음 로딩될 때 단 한번

- 인스턴스 변수 : 인스턴스가 생성될 때 마다

 

 

'JAVA' 카테고리의 다른 글

예외처리  (0) 2022.03.07
객체지향 프로그래밍2  (0) 2022.03.06
배열  (0) 2022.03.04
조건문과 반복문  (0) 2022.03.04
연산자  (0) 2022.03.03