(Day16) - OOP, 객체지향 프로그래밍 상세 [2] static..?
이 글은 제가 교육을 수강하며 기록하고 추가한 내용입니다. 강사님과 무관하게 잘못된 내용이 있을 수 있습니다.
클라우드 기반 웹 데브옵스 프로젝트 개발자 교육 과정 (5기)
- 비트캠프 엄진영 강사님 (https://github.com/eomjinyoung/)
- 훈련기관 : 네이버클라우드주식회사
- 기간: 2023-11-14 ~ 2024-5-22
- 남은 일자 : 113 일 ( 16/129 )
16일(2023-12-5, 화)
학습
스태틱을 붙일까 말까?
인스턴스 내부에 있는 다른 변수나 메서드에 접근하는지를 기준으로 판단하면 된다. this 내장변수를 통해서 다른 변수나 메서드에 접근해야 하는 경우는 스태틱으로 만들면 안된다. 다시 말하면 this를 사용해야 할 상황이라면 non-static 변수나 메서드로 만들어야 한다.
메서드를 두 종류로 나누면?
- 특정 인스턴스를 대상으로 작업을 수행하는 메서드 String.substring() 이를 클래스 메서드라고 부른다.
- 파라미터가 요구하는 아규먼트만 붙여주면 되는 메서드 String.format() 이를 인스턴스 메서드라고 부른다.
패키지에 대해서
java.lang
이 패키지는 핵심 중의 핵심이기 때문에 import 안해도 바로 쓸 수 있다. 다른 패키지는 import 해주거나 패키지를 모두 명시해줘야 한다. java.lang 의 하위 패키지 또한 패키지를 모두 명시해주거나 import 해주어야 한다.
체크리스트
아침복습
Static Variable (스태틱 변수)에 대해 설명할 수 있는가?
스태틱 변수는 클래스 변수라고도 한다. 클래스가 생성될 때 Method Area영역에 단 한번만 생성되고(메모리에 변수 생성), JVM이 끝날 때 삭제되는 변수다.
인스턴스 메서드
this라는 내장변수가 있다. 힙 영역에 생성된다. | | Static Method | Static Variable | Non-static (Instance) Method | Non-static (Instance) Variable | |——————-|————————————–|————————————-|————————————-|————————————-| | 메모리 로딩 시점 | 클래스 로딩 시 메소드 영역에 적재 | 클래스 로딩 시 메소드 영역에 적재 | 객체 생성 시 메소드 영역에 적재 | 객체 생성 시 힙 영역에 적재 | | 생명 주기 | 클래스의 라이프사이클과 동일 | 클래스의 라이프사이클과 동일 | 객체의 라이프사이클과 동일 | 객체의 라이프사이클과 동일 | | 접근 방법 | 클래스 이름을 통해 직접 호출 | 클래스 이름을 통해 직접 접근 | 객체를 통해 호출 (참조 변수 필요) | 객체를 통해 접근 (참조 변수 필요) | | 인스턴스에 종속적 | 종속하지 않음 | 종속하지 않음 | 종속하지 않음 | 종속함 | | 사용 예시 | ClassName.staticMethod();
| ClassName.staticVariable;
| objectReference.nonStaticMethod();
| objectReference.nonStaticVariable;
|
이 표는 다양한 메서드와 변수 유형의 특징을 비교한 것입니다:
Static Method: 클래스 로딩 시에 메소드 영역에 적재되며, 클래스의 라이프사이클 동안 메모리에 남아 있습니다. 객체의 인스턴스에 종속적이지 않습니다.
Static Variable: 클래스 로딩 시에 메소드 영역에 적재되며, 클래스의 라이프사이클 동안 메모리에 남아 있습니다. 객체의 인스턴스에 종속적이지 않으며 클래스 이름을 통해 직접 접근 가능합니다.
Non-static (Instance) Method: 객체의 생성 시에 메소드 영역에 적재되며, 객체의 라이프사이클 동안 메모리에 남아 있습니다. 객체의 인스턴스에 종속적이며, 객체를 통해 호출해야 합니다.
Non-static (Instance) Variable: 객체의 생성 시에 힙 영역에 적재되며, 객체의 라이프사이클 동안 메모리에 남아 있습니다. 객체의 인스턴스에 종속적이며, 객체를 통해 접근해야 합니다.
패키지 용도와 사용법에 대한 설명
클래스를 분류하기 위해서 사용하는 것이 패키지다. 다른 패키지에서 접근 가능한 변수나 메서드로 만들 때는 public 키워드와 함께 선언해줘야 한다. 다른 패키지를 쓸 때는 패키지명을 명시해야 하지만, 이는 가독성 및 작성에 비효율적이므로 import 선언으로 이를 생략할 수 있다.
클래스 문법을 사용하여 새 데이터 타입을 정의하고 사용할 수 있는가?
클래스로 인스턴스 변수들의 묶음을 만들어준다. 인스턴스를 만들기 위해서는 new 명령어를 사용해줘야 한다. 인스턴스를 사용하기 위해선 힙 영역의 인스턴스를 가리키는 주소를 알아야 하는데, 이를 저장하는 것이 레퍼런스이다. 접근할 때는 레퍼런스.변수
혹은 레퍼런스.메서드
형태로 사용한다. 클래스에서 인스턴스 변수를 선언한 경우, new 명령 이전에는 메모리에 생성되지 않는다. 그럴 때 힙 영역에 해당 클래스의 인스턴스 변수들이 생성된다. 이 때 인스턴스 변수들은 배열처럼 하나의 클래스에 있는 것들이 힙 영역에 연속적으로 만들어진다. 비유하자면 프레스에 찍어낸 식판 하나가 힙 영역에 생기는 거다.
! 메서드는 언제 메모리에 올라가고 삭제되는가?
프로그램이란 데이터를 다루는 것
그래서 데이터를 담을 그릇을 만드는 것이 아주 중요한 일이다. 메모리 영역이 어떻게 구분되고, 변수들이 언제 메모리에 올라가며, 언제 삭제되는지 파악하고 있어야 한다.
domain, VO, dto
Domain
, VO (Value Object)
, DTO (Data Transfer Object)
는 소프트웨어 개발에서 다른 목적을 가진 세 가지 중요한 개념입니다.
- Domain:
- 의미: 도메인은 비즈니스 도메인 또는 문제 영역을 나타냅니다. 즉, 어떤 문제를 해결하기 위해 소프트웨어가 개발되는 분야나 주제를 의미합니다. 도메인은 비즈니스 요구사항과 문제 해결을 위한 도메인 모델을 포함합니다.
- 사용: 도메인은 주로 도메인 모델링 과정에서 개발되며, 개발자와 도메인 전문가 간의 의사소통을 강화하고 코드를 비즈니스 요구사항에 맞게 설계하는 데 사용됩니다.
- VO (Value Object):
- 의미: 값 객체는 주로 불변(Immutable)하며, 그 자체만으로 의미를 가지는 객체를 나타냅니다. 값 객체는 주로 도메인 모델에서 사용되어 개념적으로 하나의 값으로 간주되는 객체입니다.
- 사용: VO는 주로 도메인 모델에서 도메인 개체 간에 의미 있는 값을 전달하거나 표현할 때 사용됩니다. 불변성을 유지하여 부작용을 방지하고 값을 캡슐화하는 데 주로 활용됩니다.
- DTO (Data Transfer Object):
- 의미: 데이터 전송 객체는 데이터를 효율적으로 전송하기 위한 객체를 나타냅니다. 주로 네트워크 호출이나 서비스 간 데이터 전송에 사용됩니다.
- 사용: DTO는 데이터를 전송하는 데에 중점을 두며, 데이터를 포장하고 전송할 때 사용됩니다. 주로 서비스 간의 데이터 전송이나 뷰와 컨트롤러 간의 데이터 전송에 활용됩니다.
요약하면, 도메인은 비즈니스 도메인을 나타내고, VO는 불변하며 의미 있는 값을 갖는 객체를 나타내며, DTO는 데이터를 전송하기 위한 객체를 나타냅니다. 이들은 소프트웨어 아키텍처 및 설계에서 중요한 역할을 합니다.
취업 관련
입사 과정에서 개발 팀장이 본다고 생각하고, 깃허브 블로그를 만들어둔다. 깃허브에는 영상은 유튜브로, 관심사나 생각은 트위터나 인스타그램으로 연결될 수 있다.
- 본인을 노출시킬 수 있는 채널들을 만들어둬야 한다.
- 실력이 좋아도 노출이 안 되면 누군지 알 수가 없다.
- 알 수 없는 사람은 뽑기 무섭다.
알고리즘 훈련의 이유와 목적
- 깃허브 잔디 심기. 내가 공부했다는 흔적 남기기.
- 최소한의 실력과 성실성 증명. 왜냐면 알고리즘은 기출문제들이기 때문이다.
- 틀린 답이라도 검토할만한 사람이면 그 코드 뜯어보고 면접 볼 수 있다.
- 준비된 자에게 기회가 온다.
살려줘
지금 배우는 웹개발은 평범한 수준의 기술이다. 누가 와도 어느정도는 할 수 있다는 것이다. 기업의 선택권이 많아졌다. 기업의 선택권이 많아지면 실력은 기본이고, 인성이 되고 팀에 융화가 될 수 있을걸로 보이는 사람을 뽑을 것이다. 면접은 7번 정도는 보고 와야 사람이 부드러워진다. 천천히 또박또박 긴장하지 않고 말하려면 다수의 면접을 보고 와야 한다. 사람이 부족할 땐 빨리 뽑고 마는데, 당분간은 공급 과잉이 계속 지속될 것으로 보인다. (내년에도) 이런 암흑기에서 누가 먼저 취업하느냐는 면접이 결정하는데 좋은 자세로 좋은 가면을 잘 쓰면 된다. 크게 잘난척하지 않으면서도 담백하게 답변하는 것은 또 연습이 필요하다.
선데이토즈
주말에 토즈라는 카페에서 스터디하던 사람들이 만들어서 선데이토즈라는 기업을 만들었고 그들이 애니팡을 만들었다. 스마트폰과 카카오톡의 흐름에 제대로 올라탔다. 1500억을 벌었다.