bell_a 2023. 1. 16. 16:53

1교시 - JAVA :  배열(예제① - ArrayList(musicList프로그램 - 12단계 문풀)

2교시, 3교시 - JAVA : 객체지향프로그래밍(객체지향프로그래밍 / Class와 객체의 구분(객체지향프로그래밍의 특징))

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

- 패러다임 : 사람들의 견해나 사고를 근본적으로 규정하는 테두리 ( 어떻게 보느냐에 따라 관점이 달라짐)

  ex) 드라마->웹드라마(패러다임의 변화)

- Programming Paradigm: 프로그래밍을 할 때 가지는 체계, 틀

- 절차적 프로그래밍 : C, fortran, COBOL / Step by step(process기반으로 순차적으로 진행된다). Data and Logic Mixed + 객체지향적으로 사용할 순 있음.

 장/단 (하나의 클래스에 모든 기능들이 들어감=> 하나의 오류>모두 셧다운됨/그러나 하나의 클래스만 실행하면되므로 실행시간이 짧다.)

- 객체지향 프로그래밍(Object Oriented Programming) : Java, C#, Python / Mini program communicate(아주 작은 단위로 프로그램을 짜고, 서로 데이터를 주고받으며 프로젝트를 완성=> 훨씬 직관적으로 코드분석), Employee, Student, Apple(눈에보이는 눈에보이지않는 것들 모두 객체화 가능하다). 자바여도 절차지향적으로 사용가능하다.

 장/단(안정성은 있지만, 시간은 더 걸린다.)

=> 여러개의 독립된 단위, 즉 객체들의 모임으로 파악하고자 하는 것.  각각의 객체는 메시지(전달인자)를 주고 받고 데이터를 처리. 컴퓨터가 수행하는 작업을 객체들간의 상호작용으로 표현. 객체들의 집합으로 프로그램 구성.

따로따로 쪼개어 프로그램(각각의 클래스)을 만들어, 호출하여 프로젝트 사용

2. Class와 Object의 '명확한' 구분(객체지향 프로그래밍의 특징)

① Class

 · 개념 : Blueprint(설계도), Definition, Description / 대부분의 객체는 Class로 그 속성과 기능으로 설계(정의)하고, 만들어낼 수있다(Movie, Date,,,)

· 구조 : Field(전역변수=data=속성) & Method(메서드=로직=객체의 행위,기능)

② Object

· 개념 : created from the class. 실제로 존재하는 것. (class를 이용하여 여러개의 객체를 만들어내며,이 각각의 객체는 주소값이 다른 객체다.)

· 특징(캡상추다)

 1) 추상화(Abstract) : 객체에서 공통된 속성과 행위를 추출하는 기법 / 코드 상에서 구현(로직)부분을 제외한 오직 선언 부분만을 설계 / 상세한 정보는 무시하고 필요한 정보들만 간추려서 구성

 2) 캡슐화(Encapsulation) : 관련된 필드(속성)와 메소드(기능)를 하나로 묶고, 실제 구현 내용을 외부로부터 감추는 기법(정보은닉) / 만일의 상황(타인이 외부에서 조작)을 대비하여 특정 속성, 메소드를 사용자가 조작할 수 없도록 숨겨놓은 것 / 외부에서는 공개된 메소드만 이용가능 => 접근제한자를 통해

+ public : 모든 클래스에서 접근이 가능.

캡슐화 중 public의 예시

+ private : private가 만들어진 클래스에서만 사용가능.

+ protected / default : 상속과 관련

 3) 상속(Inheritance) : 이미 작성된 클래스(상위클래스)의 특성을 그대로 이어받아 새로운 클래스(하위클래스)를 생성하는 기법 / 기존 코드그대로 재사용하거나 재정의 -> 재사용 + 확장 / 장점: 신뢰성 있는 코드

 4) 다형성(Polymorphism) : 사전적 의미 '다양한 형태로 나타날 수 있는 능력' / 같은기능(메소드)를 호출하더라도 객체에 따라 다르게 동작하는 것 / 상위클래스의 동작을 하위클래스에서 다시 정의(=오버라이딩)하여 사용하는 것 또한 다형성.

+ 객체프로그래밍의 장점

 ① 신뢰성 있는 소프트웨어를 쉽게 작성

 ② 코드를 재사용하기 쉽다

 ③ 유지보수가 용이

 ④ 직관적인 코드 분석이 가능

 ⑤ 소프트웨어 생산성이 향상

 

4교시,5교시,6교시,7교시 - JAVA : 클래스( 클래스와 객체 / 예제 ① 학생관리프로그램 - 클래스와 객체)

1. 클래스와 객체

- 클래스의 생성 : 설계도이므로, 속성은 '선언'만 진행한다. 

- 객체의 생성

- 예시① (주소록 클래스&주소록 객체)

+ 초록 : 클래스명

+ 노랑 : 클래스에서 객체의 속성과 기능을 각각정의(변수와 메서드)

+ 초록 : 클래스명 / main을 가지고있다.

+ 빨강 : 변수선언부 = 객체생성부; => 객체가 생성되고 이름이 부여됨. / 객체의 필드,메소드 사용방법 / 추가로 여러개의 객체만들기

+ 객체의 필드,메서드 사용방법 (객체명.필드명 또는 메서드명  --> add1.name) /  '.'은 객체에 접근한다. 참조한다. 

+ new Address(); => 생성자

 

- 예시② - 클래스와 객체

+ 전역변수(필드) : 자동으로 0 또는 null로 초기화 되어있다.

- 어떤 기준으로 class를 쪼개어 작업해야하는가? 패턴에 따라.

 => MVC패턴 : Model(나만의 데이터타입을 만드는 용도&데이터베이스와 접근하여 데이터를 제어하는 class) / View(사용자 눈에 보여지는 class) / Controller(이외 기능이 들어있는 class) 패턴

 

- 객체 생성과 동시에 필드를 초기화 시켜줄 수 있는 생성자 만들기(②~)

 ① 기본생성자( 예시 : new Person(); ) : class를 만들면, 자동으로 만들어지며 생략되어있다. / 리턴타입이 없으며, void도 안옴 / class명과 생성자의 이름은 동일해야한다.

생성자: 객체생성과 동시에 필드를 초기화 시켜주는 메서드

   1) 리턴타입이 없다(void도 안옴)

   2) 생성자 이름은 클래스명과 동일해야한다!

   3) 생성자도 메서드이다!

   4) 사실은 클래스를 만들면 기본생성자는 생략되어있다.

   5) 생성자를 새로 만들면 기본생성자는 덮어씌워져 사용이 불가능

      만일, 기본생성자도 사용하고 싶으면 다시 만들어줘야함.(오버로딩으로)

+ 주의 : 생성자, 클래스 내부의 메서드에서는 static등 저장소는 사용하지않음 ( 왜? class 자체로 저장이 되고 있기 때문이다) 

빨간부분 : 기본생성자 사용하고 싶은 경우, 위와같이 명시.

 메인에서 전달인자 & Person()을 찾아와 메서드에 대입시켜준다. / this : 현재 클래스를 지칭하는 키워드  사용 => 필드이름에 매개변수를 넣어 초기화하기 위해 this를 사용한다.(자바에서는 키워드 중 가장 가까운 곳을 찾아간다. 매개변수에 있는 name을 찾아감. 그러나 나는 필드에서 선언한 name을 찾아가게 하기위해서, 현재 클래스를 의미하는 'this'라는 키워드 사용.)

 

- 접근제한자 & getter/setter

 ① public : 클래스 내/외에서 접근 할수 있음

 ② private : 클래스 내부에 있는 메서드를 통해서만 접근가능

(money라는 변수는 다른 클래스에서 접근이 불가능하도록 private으로 선언할 수 있다. 메서드 내부에서 호출은 가능하지만, 직접 접근이 불가능하다.)

=> private으로 감싸진 데이터를 가져오고, 수정할 수 있는 메서드 만들기

1) getter : 데이터를 가져갈 수 있도록 하는 메서드 ( return할 결과값의 데이터타입- ex.String)

2) setter : 데이터를 세팅(수정/초기화)할수 있도록하는 메서드 (결과값을 필드에 수정,초기화(저장) 하므로 void)

※ getter/setter 단축키 : alt + shift - s -> Generate Getters and Setters - 원하는 대상 체크, Generate
※ 생성자 단축키 : alt + shift - s -> Generate Constructor using Fields - 원하는 대상 체크, Generate

결과 : 조자연 / 최영화

2. 예제 ① 학생관리프로그램 - 클래스와 객체

: 총 4가지를 사용(필드/getter&setter/생성자/메서드)

결과 : 최영화 / 최무비 / show() 내용 제대로출력