18일차 자바 기초, 개념, 접근제어자

LeeJaewon·2022년 11월 17일
0

오늘은 자바강의 완강을 했다. 강의 후반부로 갈 수록 이해하면서 듣는게 아니고 따라하는 기분이 많이 들었다. 이것도 두 번, 세 번 반복해서 듣게 되면 조금씩 이해가 되지 않을까 생각한다. 한달도 안되는 시간을 공부하고 이해가 되기를 바라는게 욕심이긴 하다. 어느 순간 막혔던게 뚫리는 것처럼 확 이해되는 시기가 온다는데 그 시기가 조금 더 빨리 나에게 와줬으면 좋겠다. 어제 하루에 1 ~ 2문제씩 알고리즘을 풀겠다고 생각했었는데 오늘 풀지 못했다..내일은 꼭 알고리즘 문제를 풀고 공부를 시작해야지. 알고리즘을 하나씩 풀어가면서 내 스스로 자신감을 가질 수 있도록 해야겠다.

제네릭스(Generics)란?

  1. 다양한 타입의 객체들을 다루는 메소드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능을 의미함.
  2. 제네릭스를 왜 사용해야 할까?
  • 객체의 타입을 컴파일 시에 체크하기 때문에 안정성이 높아짐.
    (의도하지 않은 타입의 객체가 저장되는 것을 막고 잘못된 형변환을 막을 수 있기 때문에)
  • 클래스 외부에서 타입을 지정해주기 때문에 따로 타입을 체크하고 변환해줄 필요가 없다. 즉, 관리하기가 편하다.
  • 비슷한 기능을 지원하는 경우 코드의 재사용성이 높아진다.

ex) 음료공장이 있다고 했을 때 커피, 콜라, 오렌지주스는 클래스를 의미, 컨베이어 벨트 같은것은 제네릭스를 활용해서 짠 코드, 클래스, 메소드 이런 것들을 의미함
제네릭스를 확인하면 동작은 같지만 클래스 타입만 바뀌어야 하는 경우를 쉽게 다룰 수 있다.
컴파일 언어의 타입 안정성까지 보장하면서도 유연한 프로그램을 작성할 수 있는 장점이 있다. 대표적으로 콜렉션이 있다.

제네릭스의 형식
<>꺽쇠 안에 대문자 알파벳을 써주면 됨.

많이 쓰는 타입

Lambda 람다

  • 함수를 좀 더 쉽게 표현하고 곧바로 표현하자.
  • 문법이 간결하고 편리하다는 장점
  • 똑같은 코드를 또 작성해야 한다면 그때는 함수로 만드는 것을 생각해 보는게 좋다.
    - 람다를 사용하여서 만든 익명 함수는 재사용이 불가능합니다.
    - 람다만을 사용할 경우 비슷한 메소드를 중복되게 생성할 가능성이 있으므로 지저분해질 수 있습니다.

Stream스트림

  • 하나의 데이터의 흐름이다
    데이터의 흐름 : 데이터를 여러개 표현한 것에서 흐름이 생김
    대표적인 예: 컬렉션을 통해서 스트림을 만들어 내는 것.
    특징 : 데이터 소스를 변경하지 않는다.
    데이터소스: 원래 있던 리스트를 말함
  • 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자.
  • 스트림을 활용해서 필터링,데이터 변경, 다른 타입이나 자료구조로 변환 등을 할 수 있다.

알고리즘 QnA

  • 알고리즘을 풀 때 가장 중요하게 생각해야 할 것이 제한사항이다.
  • 이상, 초과, 미만, 이하 구분 중요
  • 자바 : literal 리터럴 - (직접 값을 쓰는 것들)을 표기할때 가독성을 위해 숫자에 한해 언더스코어('_')를 허용
  • 자바 : 정수형 데이터의 타입을 결정할 때에는 반드시 자신이 사용하고자 하는 데이터의 최대 크기를 고려해야 한다. byte, short, int, long

참고사이트 TCPschool.com/java/java_datatype_basic

타입변환

  • 묵시적 타입 변환 (자동 타입 변환)
    데이터 타입이 작을 때 -> 데이터 타입이 큰걸로 변환 할때 데이터가 손실 될 가능성이 낮으므로 자동으로 변환.
  • 명시적 타입 변환(강제 타입 변환)
    데이터 타입이 클 때 -> 데이터타입이 작은걸로 변환 할때 데이터가 손실 될 수 있다.
    컴파일러가 자동변환하지 않고 개발자에게 물어봄.

for문과 while문의 차이

for문은 몇 번 돌릴지 알고 있을때
while은 몇 번 돌릴지 모르고 있을때

소프트웨어 가치 = 변화

  • 낮은 비용으로 변화 가능해야함.
    비용 -> 분석, 수정, 테스트, 기능 추가에 대한 시간
  • 소프트웨어가 변화하지 않는다면, 망한 소프트웨어
  • 기능을 수정하는데, 비용이 계속 증가하면, 해당 소프트웨어는 뒤쳐지고 결국 망한다.
  • 앞으로의 변화에 대응할 수 있는가가 중요

int vs Integer, boolean vs Boolean 차이에 대해 공부해보자

Primitive Type vs Wrapper Class

캡슐화

  • 조건이 무한 확장 가능
  • 변경에 대한 비용, 시간 절약 가능
  • private으로 만들지 않으면 객체에 대한 값을 임의로 조절 할 수 있기 때문에
  • static - 설정 값, 변하지 않는 값 들에 많이 쓰임
  • 연관된 목적을 가지는 변수와 함수를 하나의 클래스로 묶어 외부에서 쉽게 접근하지 못하도록 은닉하는 것이다.
  • 캡슐화는 중요한 데이터를 쉽게 바꾸지 못하도록 할 때 사용한다.
  • 캡슐화를 하는 가장 큰 이유는 정보 은닉에 있다.
  • 캡슐화를 통해 외부에서 내부의 정보에 접근하거나 변경할 수 없게 직접적인 접근을 막고
    객체가 제공하는 필드와 메소드를 통해서만 접근이 가능하다.

이렇게 접근을 제한함으로써 유지보수나 확장 시 오류의 범위를 최소화할 수 있고
객체 내의 정보 손상과 오용을 방지하고 데이터가 변경되어도 다른 객체에 영향을 주지 않아 독립성이 좋다.

  • 캡슐화는 접근제어자를 통해 이루어진다.

자바의 접근 제어자

public : 접근 제한 없음
protected: 동일한 패키지 내에 존재하거나 파생 클래스에서만 접근 가능
default : 아무런 접근 제한자를 명시하지 않으면 default 값이 되며, 동일한 패키지 내에서만 접근 가능
private: 자기 자신의 클래스 내에서만 접근 가능

인터페이스 vs 추상클래스

인터페이스:
구현하려는 객체의 동작의 명세

추상클래스:
정말로 명확한 확신이 있을 때 사용

다형성

다양한 모습을 갖는 것.
한 객체가 여러 타입의 기능을 제공
타입 속성으로 다형성 구현
ex) 자동차 타이어 교체, 타이어를 교체해야지 자동차를 바꿀수는 없으니까

추상화
의미가 비슷한 개념이나 의미 있는 표현으로 정의하는 과정
특정한 성질, 공통 성질을 뽑아내는 과정
예) 갤럭시, 아이폰-> 핸드폰

profile
한 걸음 한 걸음 꾸준히

0개의 댓글