S1U7 [Java] 객체지향 프로그래밍 기초 회고
[클래스와 객체]
🌄 쉽게 말해 클래스는 설계도. 객체는 그런 클래스를 바탕으로 생성된다.
new라는 키워드를 통해 클래스를 인스턴스화 할 수 있다. 그렇게 생겨난 객체는 인스턴스라고 부른다.
JVM이 CPU로부터 할당 받아 관리하는 데이터 영역에 대해 더 잘 알 수 있는 유닛이었다. 그래서 static과 인스턴스 멤버의 생성시점과 그로 인한 사용시점의 차이를 더 잘 이해할 수 있었다. 막연하게 static은 메모리에 먼저 적재된다 라고만 알고 있었는데, 런타임 전 이미 Runtime data area에, 그 중 static 영역에 이미 적재되는 것이었다. 알고 있던 것에서 한층 깊은 공부를 하니까 엄청 재미있었다.
[필드와 메서드]
🌄 속성을 말해주는 필드와 기능을 말해주는 메서드.
생성 시점과 사용 가능 장소, 시점에 따라 변수는 인스턴스, 클래스(static), 지역 변수로 나뉜다.
정의된 메서드를 호출할 때 알맞은 인자를 넣어줘야 한다. 같은 메서드명에 인자의 수가 다르거나 반환 타입이 다르다면 메서드 오버로딩 되어있는 것이다. 이 경우 여러 경우의 수를 해결할 수 있다.
특별히 어려울 게 없었던 챕터이다. static 변수와 instance 변수의 사용을 설명하기 위해 많은 예시를 보여주고 같이 실습하게 해준 좋은 세션이 있었다!
[생성자]
🌄 생성자는 인스턴스가 생성될 때 인스턴스 변수들을 초기화해준다. 생성자도 오버로딩이 가능하고, 기본 생성자를 작성하지 않으면 자동 생성되지만, 다른 생성자를 작성해주었을 때 기본 생성자는 자동생성되지 않는다.
this는 힙 영역에 올라간 '나', 즉 객체 자신을 가리킨다. 나를 3인칭으로 부른다고 생각하면 좋다. 주로 매개변수와의 이름 구분을 위해 사용한다. 반면 this()는 현재 객체의 다른 생성자를 호출해준다. 이는 생성자 안에서만 사용되어야 하고, 가장 첫 줄에서만 쓸 수 있다.
생성자 영역에서 학습하고 실습하면서 가장 많이 느낀 부분은 내가 지금껏 생성자를 사용했던가? 이다. 곰곰히 생각해보니 Spring framework를 사용하면서 생성자는 뒤로 하고 항상 필드 주입만 주구장창 했던 것 같다. 무한 Autowired,, 아니면 setter사용.? 스프링을 오래 해서 그런가? 기억이 잘... 뭔가 잘못된 사용을 하고 있던 것 같다. 생성자를 작성하고 사용하는 게 정말 익숙하지 않다. 그래서 생성자로 의존성 주입을 해준다는 것도 감이 안 왔는데 실습을 통해서 무수히 많은 생성자 주입을 해주고 나니 이제서야 흐름이 조금 잡힌다. 역시 기초부터 잘 잡아주고 가야하는 것 같다.ㅎㅎ 사실 심화 실습이 많이 남아있는데 꾸준히 한 번 실습 프로그램들을 작성해보고싶다.
[내부 클래스]
🌄 말 그대로 클래스 내부에 있는 클래스이다. 연관된 클래스들을 연결해주어 클래스 필드에 접근이 한층 쉬워지고 코드도 간결해진다. 캡슐화에도 유용하다.
메서드 안에서 지역 내부 클래스를 작성할 수 있다는 사실을 알게 되었다. 이너 클래스를 사용할 때가 있긴 했는데 그 때 컴파일하면 class파일이 엄청 이상하게 생성되고 이래서 혼란스러웠던 기억이 있다. 선배가 짜둔 코드였는데 움 그냥 클래스를 필드로 사용했꾸나.. 이렇게 쓰면 되는구나 하고 깊이 알아보지 않았다. 여기서 또 자기반성 타임ㅎㅅㅎ;; 라이브 세션 때는 계속 "outer, inner, static, 외부 인스턴스의 내부 인스턴스의 ..." 뭔가 구렁텅이에 빠진 기분이었는데 직접 코드 쳐보면서 실습해보면 이해가 빨랐다.
🛴 Unit 7. [Java] 객체지향 프로그래밍 기초를 마치고!
굉장히 흥미로웠던 유닛이다ㅎㅎ 사실 Java 기초 문법은 제어문/배열에 가서야 재미있고... 그랬는데(😓) 객체지향 시작하면서 필기도 열심히 하고 세션에도 엄청 집중하게 되었다. 그래서 아~ 너무 재미있다 나 이래서 자바 좋아했지 하는 생각도 했다ㅋㅋ. 소중한 시간이었다. 매번 느끼는 거지만 이번 부트캠프를 통해 한층 더 깊은 지식을 쌓아가고 있는 것 같다. 그래서 뿌듯하고 기분좋고, 더 열심히 하고 싶어진다. 그리고 TIL에도 기록했지만 이 때 이너 클래스 때문에 HashMap 클래스를 잠시 까봤는데 눈 앞이 조금 어질했었다. 그리고 시무룩해지기도 했다. 난 여전히 이런저런 클래스를 열어보기에는 멀었구나. 하지만 컬렉션까지 열심히 배운 지금(회고가 조금 늦었다ㅎㅎ) 해볼 수도 있지 않을까 하는 생각이 문득 든다. 뭐가 됐건 직접 많이 해보려고 한다. 객체지향 기초 회고 끝.