코드프레소 java웹개발 체험단 2주차의 자바 강의 내용은 객체지향에 관한 것이였다. 객체지향에 관한 것은 1학년2학기 때 학교 강의에서 배웠던것이라 기억속에 있던 것인데 강의를 들으며 그때 배운 개념을 복습할 수 있었으며 더욱 구체적이고 정밀하게 상기할 수 있었다. 1학년때 배운것을 4학년에 한번 더 복습해보니까 기존에 하던 것들에 적용하며 더욱 실감나게 복습할수있었다. 특히 저번학기 유니티 개발에서 다형성 등 실무에 적용할때 따로 공부하고 싶던 부분이 있었는데 더욱 자세히 알게되어 이해가 잘 되었다. 개념을 설명, 요점 정리, 실습까지 해보니까 이해가 쏙쏙 되는 강의였다. 강의 내용을 정리해보았다.
1. 객체지향 기초 개념
소프트웨어 개발방법론
: 소프트웨어는 복잡하고 거대해지며 요구사항대로 동작하는 소프트웨어를 정해진 기간과 예산 안에 만드는것이 어렵기때문에 소프트웨어 개발 방법론이 나타남
- 소프트웨어 개발 방법론은 요구사항 수집, 분석, 고수준설계, 상세설계, 구현, 테스트의 절차를 거치며
구조적 방법론, 정보공학 방법론. 객체지향, 컴포넌트, 애자일 방법이 있다.
- 그 중 객체지향은 각자의 객체가 메시지를 주고받으며, 책임을 갖는 객체를 중심으로 소프트웨어를 개발하는 것.
예를들어, 3명의 직원이 있을 때 각자 시간이 나는대로 일을 처리한다면 사장의 지시가 없다면 혼란스럽겠지만, 각 객체에 역할을 부여한다면 각자의 역할만 잘 이해하고 학습하면 됨.
이처럼 소프트웨어의 (객체지향, 절차지향 등 선택)설계를 통해 효율이 달라질 수 있음.
절차지향: 행위에 집중
ex) 강의 수강 기능을 하는 함수를 설계하고 구현
객체지향: 객체의 역할에 집중
ex) 강사객체는 어떠한 속성과 기능을 갖는가?
2. 추상화와 클래스 설계
- 자바는 객체지향 언어
- 객체는 사물
- 클래스는 객체를 생성
- 추상화
: 반드시 필요한 것을 선택하고, 불필요한것을 버리는 과정
추상화 과정 자체가 하나의 클래스를 설계하는 과정이며 그 클래스에는 속성( 멤버 변수) 와 행위(멤버 함수)가 들어감.
좋은 클래스는 꼭 필요한 최소한의 속성과 행위만 있으며 속성과 객체 사이에 높은 관련이 있어야 한다.
- 클래스 설계
객체를 생성할때는 클래스 참조 변수에 새 객체를 생성하여 참조 정보를 저장함
3. 메소드의 개념과 기초 활용
메소드와 함수는 비슷해보이지만 다른것이다.
4. 접근 제어자의 개념 및 적용
1) 캡슐화
: 객체의 속성과 행동을 하나의 단위로 그룹화
객체의 속성과 행동을 은닉
= 반드시 필요한 것만 외부에 노출하는것
2) 정보 은닉
객체 내부에는 외부에서 접근하여 변경하면 안되는 속성이 존재함
맘대로 바꾸기 못하기 위해 접근 제어자(public, private, protected. default)를 사용하여 정보은닉을 한다.
5. 메소드의 리턴값과 파라미터
메소드의 파라미터 = 함수의 매개변수와 같음
[this키워드]
객체 내부에서의 this는 해당 객체 자신을 의미하며 set함수를 이용하여 this의 private 멤버변수를 설정한다.
void SetAge(int age){
this.age=age; }
- 인자와 파라미터: 인자는 메소드에 전달하는 데이터(값)이며, 파라미터는 전달받는 인자 값을 저장하는 변수이다.
- 메소드 리턴값의 활용: 메소드에 리턴타입을 명시하고 return키워드를 사용해 값을 넘김
get함수를 호출하여 this의 private 멤버변수를 리턴한다.
void GetAge(){
return this.age; }
6. 생성자
객체가 생성되는 시점에 호출되는 특별한 메소드. 초기화를 위해 사용
7. 메소드 오버로딩
- 서로 다른 파라미터, 같은 이름의 메소드를 한 클래스 안에서 사용하는 것
- 의미있는 메소드의 이름을 여러 메소드에 사용 가능
- 메소드 호출 시 세팅하는 파라미터에 따라 어떤 메소드가 호출될지 결정됨
- 리턴 타입은 메소드 오버로딩의 조건 x
- 생성자도 오버로딩 가능
8. 상속
부모 클래스의 속성과 기능을 상속받는것
자바는 다중 상속 안됨, 단일 상속만 허용
자바의 상속 키워드 : extends
상속관계에서 부모의 protected멤버는 자식클래스에서 접근 가능하다.
하지만 private멤버는 자식클래스에서도 접근 불가능하다.
자식클래스에서 접근 제한을 위해서는 protected, 접근 허용을 위해서는 private멤버를 사용한다.
[상속관계에서의 생성자]
- 부모 클래스의 생성자는 상속시 상속되지 않는다.
- 자식 클래스의 객체를 생성 시, 부모 클래스의 기본 생성자를 자동으로 호출
[Super키워드]
- 자바에서 super는 부모 클래스를 의미하는 키워드
- super. 으로 부모 클래스의 멤버에 접근이 가능하다. ex) super.name -> 부모 클래스의 name 멤버변수
- 메소드 호출처럼 super(); 를 하면 파라미터가 없는 부모 클래스의 생성자를 호출한다. 명시적으로 호출하지 않을경우 자동으로 호출됨.
- 파라미터가 있는 부모 객체 생성자는 명시적으로 코드에서 호출해주어야한다.
[메소드 오버라이딩]
- 부모 클래스로부터 상속받은 메소드를 자식 클래스가 자신만의 특성에 맞게 새롭게 구현하는 것.
- 부모 클래스에 있는 함수와 같은 이름, 같은 파라미터, 같은 리턴타입의 함수를 자식클래스에서 새롭게 구현
- 코드의 간결성을 유지하며 내용 확장 가능
9. 다형성의 이해
클래스는 사용자 정의 타입=자료형
자바는 기본적으로 서로 다른 타입의 객체를 참조할 수 없는데,
예외적으로 부모클래스(타입)의 참조 변수는 그 자식타입의 객체를 참조할 수 있다!!!
[다형성]
- 다형성= 다양한 형태를 가지는 성질
- 다형성은 객체지향의 주요 특성 중 하나임
- 동일한 사물이 때에 따라 서로 다른 기능을 하는 것에 비유할 수 있음
= 하나의 타입이 때에 따라 여러 종류의 객체의 특성을 가질 수 있는 것
- 여러 종류의 객체를 참조할 수 있는 것-> 같은 형태의 메소드가 때에따라 다양한 역할 수행 가능
-메소드 오버라이딩, 부모 클래스의 참조변수가 자식클래스의 객체를 참조할 수 있다는 두가지 특성으로 다형성 구현이 가능하다.
다형성의 장점?
- sw 요구사항 변경이나 추가에 대해 유연한 설계, 요구사항 추가될경우 기존 코드 변경 최소화하며 확장 가능
예시)
* 잠시 c# 복습- 인터페이스
다형성기법에 상속 뿐만 아니라 인터페이스 문법도 있다.
인터페이스는 어떠한 기능의 정의와 구현을 분리한 것으로, 모든 기능을 추상화로 정의만하고 구현하지 않은것을 의미한다.
맨 앞에 I를 붙이고 그 뒤에 대문자를 붙여 인터페이스라는것을 알리며 코루틴의 IEnumerator 도 인터페이스이다.
다중상속이 가능하며, 인터페이스에서 구조와 형태를 만들고 실제 클래스에서 정의한것을 구현해주어야 한다.
- 예시 인터페이스-IDragHandler
-> 드래그 해주는 인터페이스를 만들어놓고
namespace UnityEngine.EventSystems
{
public interface IDragHandler : IEventSystemHandler // public 으로만 가능하고 interface키워드를 사용하여 만들며 대문자 I와 그 뒤에 대문자를 사용하여 인터페이스를 정의한다
{
void OnDrag(PointerEventData eventData);
}
}
-> 실제 클래스에서
public class DragClass : MonoBehaviour,IBeginDragHandler, IDragHandler, IEndDragHandler ,IPointerDownHandler
{
...
public void OnDrag(PointerEventData eventData)
{
rectTransform.anchoredPosition += eventData.delta;
} // 이런식으로 인터페이스에서 만든 함수를 구현
...
}
자바에서도 c#과 같이 인터페이스가 사용된다.
10. 패키지
패키지: 관련있는 클래스를 한데 묶어놓은 그룹
10. 컬렉션 프레임워크
: 다양한 자료구조의 구현을 위한 클래스와 인터페이스의 집합
- 다양한 데이터를 위해서는 자료구조의 구현체가 필요함
ex) 순서가 있는 데이터, 중복되는 데이터 등
- arrayList, HashSet, HashMap 등의 프레임워크가 있음
- 자료구조에 저장된 데이터를 다루기 위한 알고리즘 구현체가 필요함-데이터의 조회, 삭제, 추가 등
- 제공되는 클래스에서 데이터를 가공하기 위한 메서드도 제공
[컬렉션 프레임워크 클래스와 array]
- 데이터 갯수의 동적인 변경 가능
- 오브젝트(객체)만 원소로 가질 수 있음, int등의 primitive데이터는 못가짐
[컬렉션 프레임워크 인터페이스들의 상속 관계]
11. 제네릭
제네릭(generic)이란 ?
데이터의 타입을 일반화한다(generalize)는 것을 의미
- 코드프레소 Java 웹 개발 체험단 활동 중
- 코드프레소 [실무자가 알려주는 Git입문]강의 수강 중
- 코드프레소 URL: https://www.codepresso.kr/
프리미엄 IT 교육 서비스 - 코드프레소
www.codepresso.kr
'Study > 코드프레소 java 웹개발 체험단' 카테고리의 다른 글
[처음 시작하는 SQL 프로그래밍]4주차: MySQL프로그래밍의 이해 (0) | 2022.02.05 |
---|---|
[Spring Boot 웹개발 입문]3주차: 웹개발(프론트엔드, 백엔드)의 전반적 이해 (0) | 2022.02.04 |
[SW유지보수성 향상을 위한 clean code]3주차 : clean code (0) | 2022.01.24 |
[실무자가 알려주는 Git 활용한 프로젝트 관리]2주차: Git 브랜치 (0) | 2022.01.15 |
[실무자가 알려주는 Git입문]-1주차: Git의 이해와 실습 (0) | 2022.01.14 |