Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원/7월

22.07.07 - [ java 복습 ] 변수, 연산자/제어문, 배열, 객체. 클래스, 상속, String

giggs 2022. 7. 18. 15:16

 

 

 

-- Index --

 

 

 변수 연산자 제어문 배열
객체 클래스 상속 String

 

 

 

 

 


 

 

 

변수 초기화

  • 변수 초기화 ( 만들자 마자 값을 주는 것은 초기화 )
  • 선언과 초기화 따로 할때는 선언 초기화 따로

 

 

 

 


 

 

 

연산자 / 제어문 

 

 

 

 


 

 

 

배열 / 2차원 배열

 

 

 

  • 1차원 배열의 공간에는 값이 들어있다 
  • 2차원 배열의 공간에는 다른 배열(2차원배열)의 주소값을 가지고 있다 - 참조 변수다.

 

  • 보라색은 보라색 만들어짐 / 초록색은 초록색 만들어짐

 

 

 

 

 

 


 

 

 

 

객체

 

  • class 와 object 의 차이를 알면 끝!

 

 

 

붕어빵 틀 vs 붕어빵

자동차 설계도 vs 자동차

 

 

 

# class

  • 변수를 여러개 만들어서 사용하는게 귀찮아서 사용하던게 array
  • array는 타입이 같은 것만 관리 가능하다.
  • 서로 타입이 달라도 여러개의 변수 한 번에 관리하고 싶다 해서 등장한 것이 – structor(구조체)
  • 변수 생성/묶음의  structor에 method를 더한 것이 class!

 

 

 


 

 

 

 

클래스 기본 구성

 

 

 

 

1. getter / setter

  • alt + shift + s – 게터/세터
  • 게터/세터 만들어 놓으면 public 과 똑같은데 굳이 만들어서 사용한 이유는?
  • --> 입력하려는 값에 대해 입력 전에 검사 조건 만들 수 있다.
  • --> 출력 return 값도 조정가능~

 

 


 

2. 생성자 - constructor

  • alt + shift + s – create constructor

 

 


3. toString

 

 

## 객체를 바로 출력하면 기본적으로 toString() 메서드 호출된다. ##

 

 

 

 

 


 

 

 

 

상속

 

 

 

 

 

1. 추상화 – 모든 포켓몬이 가지는 속성 뽑아냈다 - 추상화

 

 


 

1-1. 자식클래스들에게 상속처리 

  • 피카츄 클래스 에서 작업
  • 파이리 / 꼬부기도 똑같이 작업

 

 

 


 

 

1-2. 객체 생성 테스트

 

 


 

 

1-3. 다형성을 이용하여 생성된 객체들 관리하기

 

  • 반복문으로 작업하기 위해 +
  • 배열로 관리해주기 위해 +
  • 상위타입인 Poketmon 타입으로 만들기
  • == 다형성을 이용하여 코드를 작성했다.

 

 

 

 


 

 

 

2. 추상 메소드 - 추상 클래스

 

 

 

2-1 공격 메소드 skill() 생성

  • 공격메소드 [ skill() ]를
  • 피카츄/파이리/꼬부기 각각 만들어주면 어떤 문제점?
  • 자식에게만 있는 메서드는 사용불가능하다 – 담아놓은 변수의 타입이 Pocketmon이라서
  • 부모클래스인 Pocketmon 클래스에 하나 만들어놓고 – 자식타입에서 오버라이드해서 사용

 


 

 

2-2 추상메소드로 만들기 abstract skill()

  • # 부모클래스인 Pocketmon이 가지고있는 skill() 메소드는
  • 자식들이 무조건 재정의해서 사용하는 메소드
  • 구현부 필요없다. - 추상메소드로 만들어주자. 
  • 추상메소드를 포함하고 있는 클래스는 추상 클래스로 만들어주어야한다.

 

 

 

 

skill(){}; 이거는 구현부 있는 것이다. 주의할 것

 

 


 

 

2-3 추상클래스로 만들어야 하는 경우와 만드는 이유

 

  • 왜 추상 클래스가 되어야하는지?
  • 객체생성이 안되는 클래스가 추상클래스 – 추상메소드 1개이상 있으면 무조건 추상메소드
  • 객체생성을 원하지 않을때는 추상메소드 없어도 추상클래스로 만들 수 있다.
  • Pocketmon 클래스로 객체를 만든다? - NO! - 원하지 않는다.
  • Pocketmon 객체는 반드시 – 이름/종류/등등을 가지고 태어나야한다.
  • 그냥 포켓몬이라는 것은 없다.!
  • 추상클래스로는 object만들 수 없다 . - implements 해도 추상메소드 구현할 필요 없다!
  • Pocketmon 클래스에서 void Skill() 구현안해도 되는 이유가 이것이다!

 


 

 

2-4 객체 생성안할 건데 왜 만들었나?

  • 상속을 위해서 – 상속받아서 생기는 애들에게 까먹지 않도록, 구현강제하도록
  • 다형성 적용을 위해서 – 다른 타입애들 모아서 관리하기 위해서

 

 


 

 

 

 


 

 

3. 컬렉션

 

 

3-1 트레이너에게 포켓몬 주머니 만들어 주기

  • List / Set / Map 중에 Map으로 만든 이유?
  • List 는 순서대로 하나하나 체크해야한다. / Set은 순서 없다. 일단 꺼내보기
  • Map은 정해놓은 이름표보고 꺼내면 된다! / key:value 형식
  • Map 만들고  주머니 HashMap() 만들어주기 final

 

 

 


 

 

3-2 넣고 ( put) , 꺼내서봐보기(get)

  • 트레이너 (t)의 - 주머니 (pocket) 에 - (put) 넣기( key,value ); = t.pocket.put()
  • key는 이름 value 는 포켓몬
  • 트레이너 (t)의 - 주머니( pocket) 에서 - (get) 꺼내보기 ( key ); = t.pocket.get()

 

 

 

 


 

 

3-3 getter / setter 형식으로 바꿔주기

 

  • pocket에 직접 접근해서 넣어주고/가져가고 하는 것이 마음에 안든다.
  • >>게터 / 세터 기능으로 접근 제한해 주자.
  • >>addPocketmon() 과 getPocketmon() 메서드 생성
  • >> 트레이가 자기에게 소중한 포켓몬 주머니를 남에게 get 가져가도록 두지않는다.

 


 

 

3-3-1 트레이너 클래스에서 작업

  • 내 주머니(HashMap) -  pocket 에 < > 제네릭 걸어주어서 이것만 올 것이다. ( 타입 알려주고 )
  • get 메서드 / set 메서드 만들어주고 - return 과 return 타입 지정

 

 

 


 

 

# 트레이너 포켓몬 주머니에 포켓몬 집어 넣기 - addPocketmon()

  • 포켓몬( p1 ) 생성 후 -
  • 트레이너( t )의 포켓몬주머니에 추가 (t.addPocketmon()) 추가
  • t.addPocktetmon( p1 ) 형식으로 --- 트레이너의 포켓몬 주머니에 추가해주기

 


 

 

# 트레이너 포켓몬 주머니에 있는 포켓몬 확인 하기 - getPocketmon()

  • 트레이너( t )의 포켓몬주머니(pocket)에 특정 포켓몬이 들어있는지 확인하고 싶다.
  • 포켓몬(p1)을 넣어줄 때 key값으로 사용했던 p1.name을   ("피카츄")  이용하여 확인하기
  • t.getPocketmon("피카츄");

 


 

 

# 트레이너 포켓몬 주머니의 포켓몬 전부! 확인 하기

  • 트레이너( t )의 포켓몬주머니(pocket)에 들어있는 포켓몬들 전부 확인하고 싶다.
  • printAllpoketmonName() 메소드 생성
  • >> 향상된 for문 사용 - key 값을 이용하여 출력하기

 

 

 

 

 

 

 


 

 

 

 

 

String 3개

 

 

 

 

# String 은 매번 새로운 문자열을 만든다.

 

# StringBuffer/StringBuilder 는 원래 있는 거에 더해준다 -- 새로운 객체 생성 X

  • 이 둘은 동기화가 되어있고 안되어있고 차이
  • 버퍼는 동기화처리 되어있다. / 빌더는 동기화처리 안되어있다.
  • 동기화처리 하면 속도가 조금 느려진다. -
  • 다중 쓰레드 환경이면 버퍼 //// 다중 쓰레드환경 아니면 빌더
  • 다중 쓰레드 환경에서는 --- 동시에 작업 못하도록 ---동기화 작업 필요