[JAVA] 개념 정리 1

NaSC·2022년 12월 7일
0

JAVA 기본개념

목록 보기
1/6
post-custom-banner

1. OOP란

  • 객체지향프로그램
  • 데이터를 객체로 취급하여 프로그램에 반영하고, 객체의 상호작용을 통해 프로그램이 동작하는 것.
  • OOP의 4가지특징 ( 추상화, 캡슐화, 상속, 다형성 ) 이용해 코드 재사용을 증가시키고, 유지보수 감소

1.1 OOP의 4가지 특징

추상화(Abstraciton)

  • 공통의 속성이나 기능을 묶어 이름 붙이는 것
  • 객체지향적 관점에서 클래스를 정의하는 것
  • 예를들어 객체 < 사자, 고양이, 강아지 > 의 공통점은 동물이고 이를 동물로 묶는 행위

캡슐화(encapsulation)

  • 특정 객체가 독립적으로 역할을 수행하기 위해 필요한 데이터와 기능을 하나로 묶는 것 (모듈화)
  • 정보를 객체안에 포함시키고, 그 정보에 대한 직접 접근은 허용하지 않는 대신, 필요에 따라 확인할 수 있는 인터페이스를 외부에 공개함으로써 정보은닉 효과도 자연스럽게 따라옴.

상속(inherutance)

  • 상위 개념의 특징을 하위 개념이 물려받는 것
  • 하위클래스는 상위클래스의 역할을 대신할 수 있으면서 고유의 역할도 수행할수 있어야한다.

다형성(polymorphism)

  • 오버라이딩 ( method 재정의 )
  • 오버로딩 ( 매개변수의 개수, 리턴 타입과 같은 부분이 다름으로 여러개의 같은이름 메서드 정의 )

1.2 OOP의 5대 원칙 (SOLID)

SRP - 단일책임원칙(Single Responseibility principle)

  • 클래스에 모든 기능을 다 넣지말고 목적과 취지에 맞게 속성과 method 구성함으로 관련된 책임만..

OCP - 개방폐쇄원칙(Open/Closed principle)

  • 자신의 확장에는 열려있어야하고, 주변의 변화에 대해서는 닫혀있어야 한다.

LSP - 리스코프 치환 원칙(Liskov substitution principle)

  • 하위클래스의 인스턴스는 상위클래스의 인스턴스 역할을 하는데 문제가 없어야한다.

ISP - 인터페이스 분리 원칙(interface Segregation principle)

  • 상황에 맞는 기능만 제공하자

DIP - 의존 역전 원칙(dependency inversion principle)

  • 추상클래스 혹은 상위클래스는 구체적인 구현클래스 또는 하위클래스에 의존적이면 안된다.
  • 예를들면 벤츠-> 스노우타이어 가 아니고, 벤츠->타이어 <- 스노우타이어, 일반타이어, 광폭타이어

2. 컴파일 과정

  1. 개발자가 .java파일을 생성한다.
  2. build를 한다.
  3. java compliler의 javac의 명령어를 통해 바이트코드(.class)를 생성
  4. class loader를 통해 jvm내로 로드
  5. 실행엔진을 통해 컴퓨터가 읽을 수 있는 기계어로 해석되어(각 운영체제에 맞는 기계어)
    Runtime Data Area에 배치

3. interface와 abstract class

외형적 차이점

  • 인터페이스 -> 확장성 ( 생성자 가질수없어 객체화 x, 다중상속 o )
  • 추상클래스 -> 추상화 ( 생성자 가질수있어 객체화 o, 필드o, 다중상속 x )

상용의 의도

  • 인터페이스
    paymentService => kbPaymentServiceImpl , lgPaymentServiceImpl
    처음은 kb결제로 시작해서 LG결제등의 다른 결제 추가될 가능이 있다면 인퍼페이스를 사용하는게 적절하다.
    협업을 위해.. A개발자가 kb결제 B개발자가 LG결제 가능

4. String vs StringBuilder vs StringBuffer

String

  • 불변객체 , 변하지 않는 문자열을 저장할 때 적합

StringBuilder

  • 가변객체, 비동기방식이기때문에 Single Thread 환경하에 사용. 처리속도 가장 빠름

StringBuffer

  • 가변객체, 동기방식이기 때문에 멀티쓰레드로 접근할 때 사용.
profile
데이터엔지니어 😘
post-custom-banner

0개의 댓글