JAVA 3주차

현준·2024년 6월 17일

사관학교

목록 보기
8/23

객체 지향 프로그래밍 (OOP)

여러 개의 독립된 단위 즉 객체들의 모임으로 파악하고자 하는 것
각각의 객체는 메시지를 주고 받고 데이터를 처리

객체 지향 프로그래밍 특징

  1. 캡슐화
  2. 상속
  3. 추상화
  4. 다형성

캡슐화 (Encapsulation)

관련된 필드와 메소드를 하나로 묶고 실제 구현 내용을 외부로부터 감추는 기법 (정보은닉)
만일의 상황을 대비해서

Scanner, Random, Arrays, Math

상속 (Inheritance)

이미 작성된 클래스의 특성을 그대로 이어받아 새로운 클래스를 생성하는 기법
기존 코드를 재사용하거나 재정의 -> 재사용 + 확장 (하위클래스 일수록 구체화)

추상화 (abstraction)

객체에서 공통된 속성과 행위를 추출하는 기법
상세한 정보는 무시하고 필요한 정보들만 간추려서 구성

다형성 (Polymorphism)

다양한 형태로 나타날수 있는 능력
같은 기능을 호출하더라도 객체에 따라 다르게 동작하는 것

클래스 Class

객체를 만들기 위한 설계도, 틀
==> 데이터 타입

public class Person{

}

Person ps = new Person();
ps.@@ ; 
  • 기본 클래스를 VO, DTO라고 부르기도함

클래스의 구조

  1. 속성 (Field) = Data
  2. 행동 (Method) = Logic

get,set method

private String name;

public String getName() {
		return name;
	}
    
public void setName(String name) {
	this.name = name;

생성자

Restaurant db = new Restaurant();	 //객체를 생성하는 역할
  • 생성자를 따로 만들지 않으면 기본 생성자가 자동으로 만들어진다.
    => default 생성자

기본생성자

public Restaurant() {
}

Restaurant db = new Restaurant();
//(기본 생성자)

생성자 특징
1. 리턴타입이 없다
2. 생성자의 이름은 클래스명과 동일하다
3. 객체를 생성할때만 호출된다

사용자정의 생성자

Restaurant db = new Restaurant("동부식당");
public Restaurant(String name) {
}

  • 사용자 정의 생성자 장점 : get, set 메소드 사용없이 (private) 필드값에 데이터를 넣을 수 있음

가변배열 ArrayList

import java.util.ArrayList;

ArrayList<데이터 타입1> 변수명= new ArrayList<데이터 타입1>();
  • names.add(데이터타입); 으로 배열에 데이터 삽입
    names.add(1."박병관"); 1번째 인덱스에 박병관을 넣고 뒤로 데이터가 밀림
    names.get(i); : 가변배열 내 인덱스 i번의 데이터
    names.size(); : 가변배열의 길이
    names.remove(i); : 가변배열 내에 i 번째 데이터 삭제 이후 데이터 정렬
    ex) 2번째 삭제 3번째 데이터가 2로 들어감
    names.set(인덱스번호, 바꿀데이터값) : 데이터 교체

상속

  • 상속 특징
  1. 모든 java class의 최고 부모 클래스는 java.lang.Object (기본값)
  2. 하나의 클래스는 하나의 클래스만 상속이 가능
  3. 상속의 횟수에 제한을 두지 않는다
  4. 자식 클래스는 부모 클래스의 모든 필드값을 가져와야 한다 (private만 제외)
  • 생성자는 자식생성자이지만 부모 데이터 타입으로 사용할 수 있음
    ==> 부모로의 형태변환 (업캐스팅)

  • 상속에서 자식 클래스가 기본 생성자를 만나면 부모클래스를 방문한다

오버라이딩

부모에 있는 메소드를 자식 클래스에서 재정의 하는 방법

  • 오버라이딩을 하는 순간 부모타입으로 형태가 변환되어도 부모의 메소드를 호출하여도 자식 클래스에서 재정의한 메소드가 호출된다

    객체는 다르지만 PBKRamen 으로 데이터를 묶어서 ArrayList에 데이터를 묶어 사용할수 있다

  • phs가 부모 데이터타입으로 되어 있지만 강제 형변환으로 형태 변환 할수 있다 ==> 다운 캐스팅
PHCRamen p = (PHCRamen)phc;
p.makeBingsu;
  • 오버로딩 - 중복 정의

추상 클래스

추상 메소드란 선언은 되어 있으나 코드가 구현되어 있지 않은 즉 껍데기만 있는 메소드

  • 하나라도 추상 메소드가 있으면 추상 클래스가 됨
    => 객체를 만들수 없음

추상 클래스 구현

슈퍼 클래스에 선언된 모든 추상 메소드를 서브 클래스에서 오버라이딩하여 실행 가능한 코드로 구현하는 것

  • 서브클래스에서 추상 클래스에 선언된 추상 메소드를 모두 구현해야 함
  • 추상 클래스는 생성자로 사용할 수 없음

인터페이스

서로 다른 하드웨어 장치들이 상호 데이터를 주고받을 수 있는 규격

public interface RandomGame {
}

public class CelebrityGame implements RandomGame {

]
  • interface로 생성 implements로 상속?

인터페이스 구성

  1. 상수와 추상메소드
  2. default 메소드
  3. private 메소드
  4. static 메소드

인터페이스 특징

  1. 인터페이스는 객체를 생성할 수 없다
  2. 인터페이스 타입의 레퍼런스 변수는 선언 가능하다
  3. 인터페이스끼리 상속된다
  4. 인터페이스를 상속받아 클래스를 작성하면 인터페이스의 모든 추상 메소드를 구현하여야 한다

인터페이스 목적

인터페이스는 스펙을 주어 클래스들이 그 기능을 서로 다르게 구현할 수 있도록 하는 클래스의 규격 선언이며 클래스의 다형성을 실현하는 도구

  • 추상메서드와 인터페이스 차이
    _ 인터페이스는 2개 이상 상속을 할 수 있다
    (현재는 인터페이스와 추상메서드와 차이가 거의 없으나 다중으로 물려받을때 인터페이스를 사용한다)

0개의 댓글