추상화 -> 단순화 시켜 소프트웨어를 프로그램으로 만든다. 소프트웨어의 추상화라고 생각할 수 있다.
즉. 공동 필드를 묶어 하나의 클래스를 만드는 것을 의미한다.
객체지향 -> 변수 , 메소드를 그룹핑. 다른곳에 사용되기 쉽다
예시로, 방금 만들었던 request 또한 객체로 완성하여, 그 형태 그대로 전달할 수 있다.
부품화-> 존재하는 개념은 아니지만, 특정 분야끼리 묶는다.
ex) id 사람 다리 를 합쳐서 class로 생성시킨다. (추상화와 유사하다고 생각하면 될 것이다)
캡슐화 ,은닉화 -> 고급프로그래밍에 들었던 경험이다. 그 내부 구조를 알지 못해도
객체를 사용할 수 있어야 한다. (ai에도 blackbox와 같은 개념으로 존재 , 즉 it개발의 핵심)
인터페이스? 사용하는 이유. 가장 윗단에서, 클래스들을 유지하고 해당 인터페이스만 변경해서 사용하는 목적.
클래스 class
인스턴스 -> c1
객체 class calculator
중복의 제거 -> 동일한 코드를 중복하는 것은 유지보수 , 가독성, 재활용성을 낮춘다.
나는 동일한 코드를 계속 전반적으로 사용하려는 버릇이 있는데, 이를 줄여야 한다.
함수 사용 - > refactoring . 같은 역할을 하나, 함수등을 사용하여 사용방법을 변화하는 것
예시)
public static void main (String[] args) {
Calculator c1 = new Calculator(); -> 객체 calculator를 생성하여, calculator라는 객체 c1생성
c1. setoprands(10,20); -> setter가 되겠다 . 인자값으로 10과 20을 전달 .
c1.sum() -> 그 생성된 ,팔다리가 생긴 c1의 기능중 sum은 30, avg()는 15가 되겠다.
class Calculator {
int left , right;
public void setOprands(int left, int right) {
this .left = left;
this . right = right; }
public void sum() {
System.out.println(this.left+this.right) ; }
}
객체란 . 메소드의 집합이다.
this.left와 = left에서 left의 차이.
this. left는. c1을 가르킨다. c1의 left를 지정한다. 즉 , c1이라는 인스턴스를 의미한다.
<허나 this에 대한 개념은, 조금더 이해가 필요하다>
int c라는 것은, 컴퓨터 메모리의 작동상 이미 저장된 int라는 공간에 c를 넣는다.
new도 마찬가지로, 객체를 위한 공간을 비워두고, set을해서 그곳에 값을 넣는다는 것이다.
--멤버 --
class에 직접 접근하여, 변수를 사용하는 경우가 존재한다.
EX) class calculator { static double PI = 3.14 ; } 가 추가 되었다고 생각하자.
system.out.println(c1.PI); PI를 선언한 적은 단한번도 없다. 하지만, PI는 클래스의 변수고 이미 정해진 , 더 큰 범위기 떄문에 접근 가능. 같은 의미로, Calculator.PI가 가능하다. 이미 pi라는 값을 calculator를 위한 공간을 생성시 완료했다.
잠깐. static? 견고한 이라는 의미. class에 고정되어 있는 변수 or method이다.
가장 주의해야 할 것은, 메모리에 고정적으로 할당된다는 것이다. 고급 프로그래밍 강의에서 들었던, static이 먼저 생성된다 라는 의미는 . 객체 생성 이전에 static 메모리가 형성 된다는 것이고. 만약 static으로 method를 생성한다면?
당연히 instance 변수를 사용할 수 없게 된다 .
새 언어라고 겁먹지 말자. 하면 할수록 고프에서 했던 것들이다.
인터페이스란?
스프링을 사용하다보니, jparepository와 같은 경우에 이를 인터페이스로 형성함을 기억했다.
class(객체/ 의미는 다르지만 크게 이해기 위해)가 있고, 그 객체가 인터페이스를 사용한다면, 그 객체는 인터페이스의 메소드를 구현함을 강제한다.
객체를 사람으로 주로 비유하기때문에 , 사람이 사용하는 100가지 무기 를 생각해 이해했다.
또 animal을 dog ,cat 기타 등등 class가 상속받을때도, 각각 extends시는 어디 class의 메소드인지를 구분할 수 없는 모호성을 지니게 된다. 허나 이때 interface Cat extends Animal. class MyPet implements Cat, Dog 과 같은 예시로 다중상속시, 모호성을 없애줄 수도 있다.
*spring의 interface 문법과 같은 곳에 질문이 생겼고, 이를 백엔드 페이지의 repository탭에서 분석하겠다
*제네릭
<>로 표현, 스프링 과정에서 알게모르게 제일 많이 사용된다.
ㅁ
ArrayList<String> arrList = new ArrayList<String>();
arraylist인 arrlist의 , type이 string임을 미리 명시, 형변환을 사용하지 않게 한다.
당연히 type에 맞지않은 객체가 오면 에러가 발생한다.
*오류가 뜨면 안좋은거 아닌가? 혼자서 공부할땐 에러가 발생하면 바꿔야되니까 문제가 있을 것 같지만,
제너릭을 명시하지 않아 모든 코드 작성후 문제가 생기면 돌이킬 수 없다.
스프링 예시
public ResponseEntity <ToDoResponse> create()
response entity라는 객체의 type이, todoresponse를 따를 것이다.
--OPTIONAL 객체 --
핵심 -> NULL일 수 있는 객체의 생성
EX) OPTIONAL<TodoEntity> optionaldo = Optional.of(entity);
ro Optional.of(str)등등.
of() 메서드 : 값이 null이 아닌 경우에만 Optional 객체를 생성
ofNullable() 메서드 : 값이 null인 경우에도 Optional 객체를 생성.
empty() 메서드 : 값을 갖지 않는 빈(empty) Optional 객체를 생성.
'자바 , 기타 공부 > 자바 공부' 카테고리의 다른 글
코딩테스트, 자바의 자료구조, 자바만의 기능 (0) | 2024.04.28 |
---|