티스토리 뷰
이번주는 Java 프로젝트 가 끝난 후 Java심화 교육을 들어갔다.
심화에 들어가기 전 자바의 정석 객체지향 프로그래밍 부분을 한번 더 공부해보았고 주말동안 간단하게 정리해 보았다.
# 객체지향 언어
객체지향언어의 주요 특징
1. 코드의 재사용성이 높다.
- 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.
2. 코드의 관리가 용이하다.
- 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.
3. 신뢰성이 높은 프로그래밍을 가능하게 한다.
- 제어자와 메서드를 이용해서 데이터를 보호하고, 코드의 중복을 제거하여 오동작을 방지할 수 있다.
-> 객체지향개념에 얽매여서 고민하기 보다는 일단 프로그램을 기능적으로 완성한 다음 어떻게하면 객체지향적으로 개선할 수 있을지를 고민해보자..
# 클래스와 객체
- 클래스의 정의 = 객체를 정의해 놓은 것 //ex)제품 설계도
- 객체 = 사물 또는 개념 //ex) 제품
@객체의 구성요소
- 맴버변수 (속성) = 제품의 크기, 길이,높이 등..
- 메서드 (기능) = 켜기, 끄기, 불륨높이기, 불륨낮추기
// 인스턴스 = 클래스로부터 만들어진 객체
#선언위치에 따른 변수의 종류
| 변수의 종류 | 선언위치 | 생성시기 |
| 클레스 변수 ( Class Variable) | 객체 생성이 필요하지 않다 (자동으로 생성) |
클래스 메모리가 올라갈 때 |
| 인스턴스변수 (Instance Variable) | 객체 생성이 필요하다 | 인스턴스가 생성되었을 때 |
| 지역 변수(Local Variable) | 클래스 영역 이외의 영역 | 변수 선언문이 수행되었을 때 |
- static 메서드는 객체 생성없이 호출 가능하다.
- 객체는 인스턴스 변수 묶음이다.
- 인스턴스 변수 (IV) 는 객체 생성하여 사용한다.
- 인스턴스 메서드는 객체를 생성하여 사용하는 인스턴스 변수 를 이용하는 메서드 이다.
- 그렇기 때문에 static 메서드에서는 인스턴스변수를 사용할 수 없다.
# static을 언제 붙여야 할까?
- 클래스를 설계할 때, 맴버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙힌다.
- 클래스 변수는 인스턴스를 생성하지 않아도 사용할 수 있다.
- 클래스 메서드는 인스턴스 변수를 사용할 수 없다.
- 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙히는 것을 고려한다.
# 다형성(polymorphism)
-정의:조상타입 참조변수로 자손 타입 객체를 다루는 것
-조건
- 조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있다.
- 반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다.
# 오버로딩(overloading)
-정의: 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것
-조건
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
- 반환 타입은 관계없다.
# 오버라이딩(overriding)
-정의: 조상 클래스로부터 받은 메서드의 내용을 변경하는 것
-조건:
- 선언부가 조상 클래스의 메서드와 일치해야 한다.
- 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경 할 수 없다.
- 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.
//오버로딩과 오버라이딩의 차이
- 오버로딩 = 기존에 없는 새로운 메서드를 정의하는 것 (new)
- 오버라이딩 = 상속받은 메서드의 내용을 변경하는 것 (change)
# 생성자(constructor)
-정의: 인스턴스 초기화 메서드
-조건:
- 생성자의 이름은 클래스의 이름과 같아야 한다.
- 생성자는 리턴 값이 없다.
//매개변수가 있는 생성자를 사용한다면 코드를 보다 간결하고 직관적으로 만든다.
# 접근 제어자(access modifier)
- public (접근제한없음) > protected (같은 패키지+ 자손) > (default) (같은 패키지) > private (같은 클래스)
-사용 이유- >> 캡슐화
- 외부로부터 데이터를 보호하기 위해서
- 외부에는 불필요한, 내부적으로만 사용되는, 부분을 감추기 위해서
# 인터페이스(interface)
-정의
- 추상메서드의 집합
- 구현된 것이 없는 설계도, 껍데기
- 확장된다는 의미인 'extends' 를 사용하지 않고 구현한다는 의미인 'implements' 를 사용한다.
-장점
- 개발시간을 단축시킬 수 있다.
- 표준화가 가능하다.
- 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다. (추상클래스는 불가능)
- 독립적인 프로그래밍이 가능하다.
유튜브 강의를 통해 Java의 정석 강의를 들었고,
강사님께서 객체지향 부분은 반복해서 공부하고 요약을 작성해 보라고 하였다.
Spring으로 넘어가기 전에 Java의 꽃인 객체지향 부분을 한 번 더 정리해 보았다.
확실히 반복해서 공부하다 보니 처음에는 들어오지 않았던 개념들이 이해되기 시작했고
수업에서 강사님이 해주시는 말을 알아들을 수 있게 되었다.
다음 주부터는 알고리즘에 시간을 더 투자하고 CS 공부에도 시간 분배를 해봐야겠다.
출처= 남궁 성 지음, Java의 정석, 도우출판(2019), p160-267.
'개발 > Weekly I Learned' 카테고리의 다른 글
| WIL(Weekly I Learned)/22.12.18/ # JWT 회원가입구현 (0) | 2022.12.18 |
|---|---|
| WIL(Weekly I Learned)/22.12.11/ # Spring 게시판구현 (0) | 2022.12.09 |
| WIL(Weekly I Learned)/22.11.27 (0) | 2022.11.28 |
| WIL(Weekly I Learned)/22.11.20 (2) | 2022.11.20 |
| WIL(Weekly I Learned)/22.11.12 (0) | 2022.11.12 |