221201 TIL

이지섭·2022년 12월 1일

1. 오늘 한 것

  • 티맥스 채용설명회
    • B2B 미들웨어 국내1위
    • 대기업, 공공기관
    • 매출 지속적 상승
    • 인재상 녹여서 자소서 쓰기
    • 500명 중에 개발인력 70퍼센트
    • 개발자를 고객으로 두고있는 회사
      • 빠삭한 이론이 필요하다
    • 채용절차
      • 서류전형 - 면접
        • 연구원은 코테
        • 12월 4일까지 공채
      • 실패경헝 극복경험 열정어필
  • 연구소 → QA엔지니어
    • QA : 자세한건 연구소가 처리하니, 주니어도 지원 가능하다
  • 연구소 : 코볼 할 수 있으면 좋음

스레드 컨커런시 네트워크 - 복잡한 문제 대응

언어는 금방 배운다

코테는 프로그래머스로. 언어선택 가능

클라우드 중요함

  • mutable과 immutable

    • mutable : 값이 변한다
      • 주소값은 변하지 않는다
      • getter, setter가 존재한다
      • thread safe 하지 않을 수 있음 (값 보장이 안됨)
      • StringBuffer, StringBuilder, java.util.Date
    • immutable : 값이 변하지 않는다
      • 아예 객체를 새로 할당하여 값을 변경한다
        • 즉, set 메소드가 없다!
        • final 키워드를 사용해 변수 초기화 이후 바뀌지 않도록 설계되어있다.
        • thread safe. 값 보장
      • String, Boolean, Integer, Float, Long 등
    • mutable한 객체를 immutable하게 사용하려면?
      • defensive copy
        // before
        // validCheck 함수를 거치며 원래의 start와 end 값이 변경될 수 있다.
        public Period(Date start, Date end) {
            validCheck(start, end);
            this.start = start;
            this.end = end;
        }
        
        // after (defensive copy)
        // start와 end를 새로 할당받아 사용하기 때문에
        // 기존의 start와 end의 값이 바뀌지 않는다.
        public Period(Date start, Date end) {
            this.start = new Date(start.getTime());
            this.end = new Date(end.getTime());
            validCheck(start, end);
        }
        
        // 하지만, defensive copy를 하였어도 내부 요소들이 mutable하다면
        // 여전히 객체는 mutable하다. 
        
        public class Names {
            private final List<Name> names;
        
            public Names(List<Name> names) {
        				// defensive copy 했으나
                this.names = new ArrayList<>(names);
            }
        }
        
        public class Application {
            public static void main(String[] args) {
                Name crew1 = new Name("Fafi");
                Name crew2 = new Name("Kevin");
                
                List<Name> originalNames = new ArrayList<>();
                originalNames.add(crew1);
                originalNames.add(crew2);
        
                Names crewNames = new Names(originalNames); // crewNames의 names: Fafi, Kevin
        
        				// 결국 내부 요소가 mutable하면 값 변경 가능함.
                crew2.setName("Sally"); // crewNames의 names: Fafi, Sally 로 변함
        			  // mutable한 객체를 만들려면, 아예 setter가 없어야 한다.
        				// mutable = '읽기 전용' 느낌
        				}
        }
      • setter 없애기
      • 클래스 변수들을 private, final로 선언할 것
      • https://velog.io/@guswlsapdlf/Java의-Mutable과-Immutable
  • int와 Integer의 차이?

    • 일단 자료형의 정의
      • data의 type에 따라 값이 저장될 공간의 크기와 저장 형식을 정의한 것
      • 자료형은 primitive type과 reference type으로 나뉜다
    • Integer 언제 쓰이나?
      • 매개변수로 객체를 받아오거나 객체로 저장해야할 때
      • 객체 간 비교할 때
      • 이런 식으로 primitive type을 객체로 다루기 위해 사용하는 클래스이다.
        • wrapper class
        • 언제 뭘 사용해야 할 지 아직 정확히는 모르겠다…
          // Integer
          ArrayList<Integer> intList = new ArrayList<Integer>();
          intList.add(1);
          intList.add(2);
          System.out.println(intList.get(0));
          
          // int
          String stringNum = "123";
          int intNum = Integer.parseInt(stringNum);
          System.out.println(intNum);
      • 모든 기본형은 wrapper class를 생성할 수 있다.
    • 그래서 int와 Integer의 차이점이 뭔가
      • int : 자료형 변수
        • 산술 연산이 가능하다
        • null로 초기화 불가능
      • Integer : wrapper class
        • 산술 연산 불가능
          • unboxing 해줘야 함
        • null 값 처리 가능
      • boxing? unboxing?
        • boxing : primitive type -> wrapper class 변환 ( int to Integer )
        • unboxing : wrapper class -> primitive type 변환 ( Integer to int )
  • 추상클래스

    • extends
    • @override
    • 상속받은 자식이 메서드를 구현
    • 자신이 메서드를 가지고 있을 수도 있다
    • 단일 상속
      • public class Main extends dog, cat (x)
  • 인터페이스 더 체계적, 더 많이 쓰인다

    • implements
    • @override
    • 추상클래스와 비슷하나, 다중 상속이 가능
      • public class Main implements dog, cat (o)
    • 자신은 설계만 가지고, 아무 메서드도 가지지 못한다.
      • 어떤 함수가 존재한다~ 이것만 명시하는 것
    • 설계, 추상화의 정도가 더 높다.
  • 다형성

    • 자식 클래스의 인스턴스를 부모 클래스의 변수 안에 넣을 수 있다.
  • stream을 쓰는 이유

    • 멀티코어 환경에 적합하다
    • 유지보수가 편하다
  • 문자열 붙일 때 +로 붙이는거보다

    • StringBuilder, StringBuffer 등을 사용하는게 더 빠를 수도 있다!
      • 상황에 맞춰서
  • System.exit(0);

    • main함수 종료시에 호출된다.

2. 취침 전 목표

  • 바로 자기

3. 내일 할 것

  • 웹개발 종합반 완강하고 환급신청
  • 자바심화강의
  • 호텔프로그램 코드 짜보기

4. 느낀점

  • 할게 점점 눈덩이처럼 많아진다. 게으름 피우지 말자!

5. 메모

null

profile
Stop thinking. Just do it.

0개의 댓글