자바2

수민·2022년 6월 2일
1

개발

목록 보기
15/45

객체간의협력

  • 객체 지향 프로그램에서 객체간에는 협력이이루어짐
  • 협력을 위해서는 필요한 메시지를 전송하고 이를 처리하는 기능이 구현되어야함
  • 매개변수로 객체가 전달되는 경우가발생.

여러 인스턴스 공통으로 사용하는 변수

  • 여러 인스턴스가 공유하는 기준값이 필요한 경우
  • 학생마다 새로운 학번 생성
  • 카드회사에서 카드를 새로발급할떄 마다 새로운 카드번호를 부여

static변수 선언과 사용하기

static int seraalNum;

  • 인스턴스가 생성될떄 만들어지는 변수가아닌, 처음 프로그램이 메모리에 로딩될떄 메모리를 할당
  • 클래스변수,정적변수라고 함
  • 인스턴스 생성과 상관없이 사용가능하므로 클래스 이름으로 직접참조.
  • Student.seraalNum=100;

static 변수를 선언해줌.


static변수는 인스턴스에서 공통으로 사용하는 영역임을 알수있다.

인스턴스변수에서 사용가능하기떄문에 오류가 발생하지않는다
클래스이름으로 참조해서 써라 라는 뜻

static 메서드(클래스 메서드)에서는 인스턴스 변수를 사용할 수 없다

  • static메서드는 인스턴스 생성과 무관하게 클래스 이름으로 호출될 수 있음
  • 인스턴스 생성 전에 호출될 수 있으므로 static 메서드 내부에서는 인스턴스 변수를 사용하지않음.

int i처럼 지역변수를 사용하는건 상관없다.
하지만 인스턴스변수를 사용하면 오류가 발생.

  • static변수는 프로그램이 메모리에 있는동안 계속 그영역을 차지하므로 너무 큰 메모리를 할당하는 것은 좋지않음
  • 클래스 내부의 여러 메서드에서 사용하는 변수는 멤버 변수로 선언하는 것이 좋음
  • 멤버 변수가 너무 많으면 인스턴스 생성시 쓸데없는 메모리가 할당됨
  • 상황에 적절하게 변수를 사용해야함

싱글톤 패턴이란?

  • 프로그램에서 인스턴스가 단 한개만 생성되어야 하는 경우 사용하는 디자인 패턴

  • static 변수 ,메서드를 활용하여 구현 할 수 있음.

  • 생성자는 private으로 선언

static으로 제공해야 인스턴스를 바로 사용할수있음.

배열

  • 동일한 자료형의 순차적 자료구조
  • 인덱스 연산자[]를 이용하여 빠른 참조가 가능
  • 물리적위치와 논리적위치가 동일
  • 배열의 순서는 0부터 시작
  • 자바에서는 객체 배열을 구현한 ArrayList를 많이활용함.

char도 정수이기떄문에 계산을해보면 이렇게나온다.

객체배열 선언과 구현

  • 기본 자료형 배열은 선언과 동시에 배열의 크기만큼의 메모리가 할당되지만,

객체배열 복사하기

  • 얕은 복사
  • 객체주소만 복사되어 한쪽 배열의 요소를 수정하면 같이 수정 됨
    즉, 두 배열이 같은 객체를 가리킴.


주소도 똑같은것을 볼수있습니다.

다차원 배열

  • 이차원 이상으로 구현 된 배열
  • 평면(이차원 배열)이나 공간(삼차원 배열)을 활용한 프로그램 구현

int [][]arr=new int[][]

클래스 상속

  • 새로운 클래스를 정의 할 때 이미구현된 클래스를 상속 받아서 속성이나 기능을 확장하여 클래스를 구현함
  • 이미 구현된 클래스보다 더 구체적인 기능을 가진 클래스를 구현해야 할떄 기존클래스를 상속함.

상속을 구현하는 경우

  • 상위 클래스는 하위 클래스보다 더 일반적인 개념과 기능을 가짐.
  • 하위 클래스는 상위 클래스보다 더 구체적인 개념과 기능을 가짐
  • 하위클래스가 상위 클래스의 속성과 기능을 확장(extends)한다는 의미


protected 하위클래스는 사용가능.
외부클래스는 불가.

하위 클래스가 되는과정

super() 하위클래스가 상위클래스의 참조값가짐.

super키워드

  • 하위 클래스에서 가지는 상위 클래스에 대한 참조 값
  • super()는 상위 클래스의 기본 생성자를 호출 함
  • 하위클래스애서 명시적으로 상위 클래스의 생성자를 호출하지 않으면 super()가 호출됌

형변환

  • 상위 클래스로 변수를 선언하고 하위 클래스의 생성자로 인스턴스를 생성
  • Customer customerLee=new VIPCustomer();

메서드 재정의하기

  • 오버라이딩:상위 클래스에 정의된 메서드의 구현내용이 하위클래스에ㅐ서 구현할 내용과 맞지않는경우 하위클래스에서 동일한 이름의 메서드를 재정의

형 변환과 오버라이딩 메서드 호출

  • Customer vc=new VIPCustomer();
  • vc변수의 타입은 Customer지만

메서드는 어떻게 호출되고 실행되는가?

가상함수

  • 가상메서드 테이블에서 해당 메서드에대한 address를 가지고 있음
  • 재정의된 경우는 재정의된 메서드의 주소를 가리킴.

다형성

  • 하나의 코드가 여러 자료형으로 구현되어 실행되는 것
    -같은 코드에서 여러 다른 실행 결과가 나옴
  • 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징중 하나임
  • 다형성을 잘 활용하면 유연하고 확장성있고, 유지보수가 편리한 프로그램을 만들수 있음.

상속은 언제 사용할까?

  • 일반적인 개념과 구체적인 개념과의 관계
  • 상위 클래스:하위 클래스보다 일반적인 개념
  • 하위 클래싀:상위 클래스보다 구체적인 개념들이 더해짐
  • 상속은 클래스간의 결합도가 높은 설계
  • 상위 클래스의 수정이 많은 하위 클래스에 영향을 미칠 수 있음
  • 계층구조가 복잡하거나 hierachy가 높으면 좋지않음

HAS-A관계

  • 클래스가 다른 클래스를 포함하는 관계(변수로선언)
  • 코드 재사용의 가장 일반적인 방법
  • Student가 Subject를 포함하는
  • Library를 구현할떄 ArrayList를 생성하여 사용
  • 상속하지 않음.

다운 캐스팅

  • 업캐스팅된 클래스를 다시 원래의 타입으로 형변환
  • 하위 클래스로의 형 변환은 명시적으로 해야 함

추상 클래스란?

  • 구현 코드 없이 메서드의 선언만 있는 추상메서드를 포함한 클래스
  • 메서드 선언:반환타입, 메서드 이름, 매개변수로 구성
  • 메서드 정의:메서드 구현과 동일한 의미 구현부를 가짐
    -예 int add(int x,int y) //선언
  • int add(int x,int y){} // 구현부가있음 ,추상메서드 아님
  • abstract 예약어를 사용
  • 추상 클래스는 new 할 수 없음(인스턴스화 할 수 없음)

추상클래스의 응용-템플릿 메서드 패턴

  • 템플릿 메서드
  • 추상메서드나 구현된 메서드를 활용하여 코드의 흐름(시나리오)를 정의하는 메서드
  • final로 선언하여 하위 클래스에서 재정의 할수 없게함
  • 프레임워크에서 많이 사용되는 설계패턴
  • 추상 클래스로 선언된 상위클래스에서 템플릿 메서드를 활용하여 전체적인 흐름을 정의하고 하위클래스에서 다르게 구현되어야 하는 부분은 추상 메서드로 선언하여 하위클래스에서 구현하도록 함

wiper를 추가해줬더니 오류가발생하는것을 볼수있다
기존에는 없었는데 갑자기 추상클래스가 추가됬기떄문에
구현을 해줘야한다.

추가해줬더니 오류가 없어진것을 볼수있다.

인터페이스란?

  • 모든 메서드가 추상메서드로 선언됨 public abstract
  • 모든 변수는 상수로 선언됨 public static final

profile
헬창목표

0개의 댓글