반응형
1. 객체지향의 요소
- 클래스
- 객체
- 속성, 메서드, 생성자, 패키지
2. 객체지향의 특징
- 상속
- 하나의 클래스와 상속관계로 상위클래스의 필드와 메서드를 획득해서 재사용하는 것
- 다형성
- 상황에 따라 메서드의 성질을 변화시키는 것
- 추상화
- 객체들의 공통 특성을 파악하고, 불필요한 특성을 제거
- 단순화해 세부정보를 숨기고 기능을 표시한다.
- 캡슐화
- 내부 정의를 외부에 보이지 않도록 외부 접근을 차단한다.
- 높은 응집력과 약한 결합
- 응집도와 결합도
- 내부 정의를 외부에 보이지 않도록 외부 접근을 차단한다.
- OOP
- 개발 및 유지 관리를 쉽게 도와준다.
- 데이터 숨김을 제공한다.
- 절차보다 데이터에 중점을 두어 프로그램을 객체로 나눈다.
3. 클래스와 객체
- 클래스와 객체의 관계
- 클래스는 설계도, 설계도를 이용해 만든 제품이 객체
- 클래스의 구성 요소
- 필드, 메서드, 생성자, 블럭, 중첩 클래스 및 인터페이스
- 객체 간에는 서로의 세부정보를 알지는 못하지만, 서로 메시지 전송과 값의 전달로 통신 가능 -> 서로 호출 가능
- 애플리케이션 아키텍트의 표준을 제공하고, UML을 사용해 개발한다.
- 포트폴리오에 소스를 기반으로 리버스엔지니어링을 통해 UML 다이어그램을 추가
4. 객체지향 프로그래밍
- 결합력 : 클래스간 의존성이 강한 결합 대신 의존성을 줄이는 느슨한 결합이 좋다. (루즈 커플링)
- 응집력 : 객체 내에 존재하는 구성 요소들 사이의 밀접한 정도로 강한 응집이 좋다.
- 연관 관계 : 연관된 객체간의 관계로 (1 to 1, 1 to many, many to 1, many to many)
package ch05;
public class Account {
static String bankName; // 클래스 변수
long accountNO; // 인스턴스 변수
String customerName; //인스턴스 변수
// 생성자
Account (){
System.out.println("셍상자 실행");
}
//초기화 블럭으로 생성자보다 우선된다.
//: 구동하기 위한 환경변수와 같은 설정시에만 존재하고 자주 사용하지 않는다.
{
System.out.println("블록입니다");
}
// 메서드
void printInfo(){
System.out.println ("계좌 클래스");
}
}
class TestAccount{
public static void main(String args[]){
Account acc = new Account();
acc.printInfo();
}
}
- 클래스 변수= 정적 변수= 공유 변수
- 인스턴스 변수
- 객체 생성할 마다 메모리에 존재
- 참조 변수
- 객체의 참조값만 존재하며 객체를 사용하기 위해 존재
- 힙 영역에 존재
5. 객체지향 설계 원칙
SOLID
- SRP (Single Responsibility Principle) : 단일 책임 원칙
- 모든 클래스는 각각 하나의 책임만 가지고 단일 기능을 수행해야 한다.
- OCP (Open Closed Principle) : 개방-폐쇄 원칙
- 기존 코드의 수정없이 확장을 통해 모듈
- LSP (Liscov Substitution Principle) : 리스코프 치환 원칙
- 자식 클래스는 언제나 부모 클래스를 대체하여 동작하는데 문제가 없어야 한다.
- 예시 : JFC 자바 컬렉션 프레임워크
- ISP (Interface Segregation Principle) : 인터페이스 분리 원칙
- 인터페이스를 구체적인 인터페이스로 분할한다.
- DIP (Dependency Inversion Principle): 의존성 역전 원칙
- 의존 관계가 구체적인 클래스에 의존하면 안된다.
- 추상화된 인터페이스나 추상클래스에 의존해야한다.
- 고수준 모듈에서 저수준 모듈에 의존해선 안된다.
- 서비스를 독립적으로 제공하는 MSA 아키텍처 설계 기법
- TDD 테스트 주도 개발
- DDD 도메인 주도 개발
- 인프라 영역과 서비스 영역을 DIP를 적용해 개발
클래스
- 클래스의 구성요소
- 필드 (변수, 상수)
- 메서드
- 생성자
- 초기화 블록 (생성자 호출 전 필드 초기화)
- 내부 클래스
- 소프트웨어 패키지
- 클래스의 묶음
- 각 클래스 구분을 위한 네임스페이스 역할
- 패키지를 통해 동일한 클래스명의 충돌을 제거한다.
- package 상위패키지.하위패키지;
- import문
- *를 이용하면 해당 패키지의 모든 클래스를 사용 가능하다.
- 제어자
- 클래스, 변수, 메서드 선언부에 사용되는 키워드로 부가적인 의미를 부여한다.
- 접근제어자와 달리 제어자는 여러개를 사용할 수있다.
- 종류 : static, final, abstract, native, transient, syncronized, volatile, strictfp
- 접근제어자
- private
- 클래스 외부에서 접근 불가능하고, 내부에서만 접근 가능할때 사용
- 상속관계의 하위클래스에서도 접근 불가능
- 캡슐화 보장에서 사용되고, 클래스의 데이터 필드 보호에 사용된다.
- 훼손이 안되는 기능의 생성자에 prviate을 선언하면 상속을 제한할 수 있다.
- private
6. 하나의 소스 파일에 여러 클래스 선언
- 하나의 자바 소스파일에 두 개 이상의 클래스 선언가능
- public class가 존재할 경우, 소스 파일의 이름은 반드시 public 접근 제어자로 선언한 클래스 이름과 같아야 한다.
- 하나의 소스파일엔 단 하나의 public class만 존재 가능하다.
- public class가 없으면 소스 파일 이름은 선언된 클래스 중 하나로 소스파일 이름을 정한다.
1. 용어
- 클래스 : 객체를 만들 수 있게 작성된 설계도
- 객체 : 클래스를 이용해 만든 인스턴스를 대표
- 인스턴스 : 클래스를 이용해 생성한 하나의 객체
- 인스턴스화 : 클래스를 이용해 객체를 생성
2. 객체 생성과 객체 참조변수
- 선언 : 클래스명 참조변수명;
- 초기화 : 참조변수명 = new 클래스명();
- 선언 및 초기화 : 클래스명 참조변수명 = new 클래스명();
3. 객체 참조 변수의 초기화
- new를 이용해 인스턴스 생성시 값을 지정하지 않을 경우 데이터 타입의 기본값으로 초기화
- 객체를 초기화 = 객체에 데이터를 저장한다.
- 참조 변수를 통해서만 객체를 초기화 할 수 있다.
- 생성된 인스턴스의 멤버에 접근시에는 항상 (참조변수명.멤버명)
반응형
'Server Programming > BackEnd Project' 카테고리의 다른 글
18일차 - 자바 (6) 객체와 배열 (0) | 2022.12.29 |
---|---|
17일차 - TIL (0) | 2022.12.28 |
16일차 - TIL (0) | 2022.12.27 |
15일차 - TIL (0) | 2022.12.26 |
15일차 - 자바 (4) 제어문 (+ repeat(i)) (0) | 2022.12.26 |