7. 20

바르고·2023년 7월 20일
0

OOP - 3

접근제한자 활용
다형성 - oop의 꽃 향기만 남기고 갔단다
객체의 형변환

데이터 은닉과 보호, Encapsulation
  - 정보를 보호하려면..?
    - 변수는 private 접근으로 막기
    - 공개되는 메서드를 통한 접근 통로 마련: seter / getter
      - 메서드에 정보 보호 로직 작성

private String name = "김이박";
private int account = 10000;

생성자 구간..

// 메서드를 통해서. 우리가 생각하는 코드를 넣을 수 있다.
pulbic void setName(String name){
	//데이터 보호 로직 추가.
	if(name == null){
    	// null은 안돼!
        return;
    }
	this.name = name;
}

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

public void setAccount(int account){
	if(account<0){
 		//마통은 좀...
        return;
    }
    this.name = name;
}


오른쪽 클릭 => source => gernerate Getter / Setter
오른쪽 클릭 => source => gernerate Constructor

----------------------------------------------

Singleton - 객체를 하나만
  - 객체를 제한해야 할 때.
    - 여러 개의 객체가 필요 없는 경우
      - 객체를 구별할 필요X => 수정 가능한 멤버 변수가 없고 기능만 있는 경우
      - stateless 한 개체
    - 객체 생성/삭제가 비용이 클 때
  
  - Singleton 디자인 패턴
    -
    
class Singleton{
	//멤버 변수
	private static Singleton sc = new Singleton();

	public static Singleton getInstance(){
    	return sc;
    }
    
    // 외부에서 sc를 넣을 수 없음..
    public void setInstance(Singleton sc){
    	this.sc = sc
    }
    
	private Singleton(){
    	//100만원!
    }
}

Singleton sc1 = Singleton.getInstance();

------------------------------------------------


다형성, Polymorphism
  - Poly,많다 + morphism, 사상
  - 하나의 객체가 많은 형을 가질 수 있는 성질.
    - 동일한 객체를 여러 타입으로 부를 수 있다.
  
붕어빵 - 풀빵 - 눅눅해짐..
잉어빵 - 바삭..?
잉어빵 is a 붕어빵.


  - 상속 관계에 있을 때 조상 클래스의 타입으로 자식 클래스 객체를 레퍼런스 할 수 있다.

  - 배열의 특징 - 같은 타입의 데이터를 묶음으로 다룬다.
  - 다형성으로 다른 타입의 데이터(Person, SpiderMan)을 하나의 배열로 관리

void afterPoly(){
	Person [] persons = Person[10];
    person[0] = new Person();
    person[1] = new Spider(); // 둘을 같은 배열에..!
}

Object는 모든 클래스의 조상.
  - Object의 배열은 어떤 타입의 객체라도 담기 쌉가능.
  - 사실 printf 는 Object를 파라미터로 받았던 것..!
  
  
다형성과 참조형 객체의 형 변환
  - 메모리에 있는 것과 사용할 수 있는 것의 차이
    - Person 위에 SpiderMan이 올라가 있지만 접근 불가..
    
메서드를 재정의 할 때 조상 클래스 보다 접근제한자가 같거나 더 넓어야..

참조형 객체의 형 변환
  - 하위 타입을 상위 타입으로 형 변환 => 묵시적 캐스팅
    - 자손 타입 객체를 조상 타입으로 참조: 형 변환 생략 가능
      - 조상의 모든 내용이 자식에 있으므로
  - 상위 타입을 하위 타입으로 형 변환 => 명시적 캐스팅
    - 조상 타입 객체를 하위 타입으로 참조 : 형 변환 생략 불가.
    
  - 조상을 무작정 자손으로 바꿀 수는 없다.
    - instanceof 연산자 // 중요!!! 주관식 단답형. o 소문자
      - 실제 메모리에 있는 객체가 특정 클래스 타입인지 boolean으로 리턴
      - 모든 캐스팅은 검사하고.!

컴파일 에러, 런타임 에러.

참조 변수의 레벨에 따른 객체의 멤버 연결.
  - 자식에 재정의 된 메소드가 있으면 자식껄 실행함.
  
  - 정적 바인딩, static binding
    - 컴파일 단계에서 참조 변수의 타입에 따라 연결이 달라짐
    - 상속 관계에서 객체의 멤버 변수(static/instance)가 중복될 때 또는 static method
  
  - 동적 바인딩, dynamic binding
    - 다형성을 이용해서 메서드 호출이 발생할 때 runtime의 메모리의 실제 객체의 타입으로 결정
    - 상속 관계에서 객체의 instance method가 재정의 되었을 때 마지막에 재정의 된 자식 클래스의 메서드가 호출됨.
      - 최대한 메모리에 생성된 실제 객체의 최적화 된 메서드가 동작한다.
      

11시 - 12시


멤버 변수 blank final로 선언 시
  - 생성자에서 초기화는 가능.
  - 뒤늦게 변경은 불가.
  
 ctl + shift + O => 자동 import 추가.
 
 shift + alt + s =>  source 단축키
 
 
public class AlgoTest {
	public static void main(String[] args) {
		Algo a = new Algo();
		Algo b = new Algo();
	}
}

public class Algo {
	int x;
	//public Algo() {}
	private static Algo instance= new Algo();
	private Algo() {
		
	}
	public Algo getAlgo() {
		// 안 만들어져 있으면 만들고 리턴.
		if(instance == null) {
			instance = new Algo(); // 레이지 이닛.
		}
		return instance;
	}
}

객체는 만들어 진 그대로.
누가 참조하느냐 차이.

플러터 할 때 들어있던. super(), static이 이런 내용인지 배우니 신기.

B형


23년 하반기 BA => 완탐, 시뮬, 문해력
B => 자료구조, 알고리즘을 써서 최적화 4시간 2문제
C => 

실력이 어느정도 올라왔는 때.
  - 기출문제를 보자.

열린게시판 > B형 합격후기 보십쇼.

7/27 설문 open

2,38/12 - 
410/28 - 
주호석..

삼전 구현
삼sds 알고리즘

배열관리 과제


개선된 for문은 카피해서. 변경한다고 안 바뀜.

어노미너스 메소드로.. => 메소드 안에 선언해서..
  
profile
바르고의 다락방

0개의 댓글