익명의 내부클래스의 포인트는 new키워드로 객체를 생성하고 바로옆에 중괄호를 열어 바로 클래스를 구현하는 것이었다. 그리고 구현이 끝났다는 의미로 괄호를닫고 세미 콜론을 사용한다
new Runnable(){}; , new IFoo() {};
Map.Entry가 인터페이스인데 내부클래스가 될 수 있었던것이 익명내부클래스를 사용해서 그런것인가??
내부클래스를 멤버 클래스와 지역 클래스로 나누어 멤버 클래스는 멤버 변수와 성격이 비슷하고 지녁 클래스는 지역변수와 성격이 비슷하다고 설명했는데 간단히 이해하고 정의하기 좋은 예인거같다
내부클래스의 생성 시점이 알고 싶어 static initilizer를 사용하고 싶었으나 static 내부메서드 외에는 모두 사용할 수 없어 언제 생성되는지도 잘모르겠다.. 메모리적으로 어떻게 생성이되는지 궁금했는데 아쉽다
static 내부 클래스는 외부클래스와는 독립적으로 생성되는 클래스로 static 메서드를 사용시 외부클래스의 클래스가 생성되지 않고도 사용이 가능하다
이는 static 내부 클래스의 객체 생성과 멤버 메서드 사용에서도 같은 방식으로 사용된다 => 그래서 외부클래스의 접근시 객체를 생성해야되나보다..
내부클래스에 관한건 이정도로해서 마무리 해야 될 것같다.. 더 자세히 메모리나 생명주기에 대해 이야기 하는 자료가 없다
람다식 예습
함수형 프로그램은 클래스를 생성하지 않고 입력받은 매개변수외에 다른 외부 변수를 사용하지 않아서 외부에 다른 영향을 주지 않는다
자바에서 이러한 함수형 프로그램의 구현을 위해 Java8부터 람다식을 제공함
내부적으로는 내부클래스를 생성하여 구현하지만 그부분은 바같으로 보이지 않고 구현부분이 심플하게 제공됨
람다식 문법
매개변수가 하나인 경우 괄호 생략가능하다( 두개이상은 생략할 수 없다)
중괄호 안의 구현부가 한 문장인 경우 중괄호 생략 가능하다
하지만 그 한문장이 retun문이라면 생략할 수 없다
중괄호 안의 구현부가 한문장이면서 retun문이면 retun과 중괄호 모두 생략할 수 있다
@FunctionalInterface 을 통해 interface에 어노테이션을 달 수 있고 그때는 메서드가 하나만 선언할 수 있게 되어 람다식에 사용하기에 알맞은 형태로 세팅이 된다
람다는 컴파일시 따로 내부클래스 파일이 생성되지 않는다.
람다식은 변수처럼 사용될 수 있다
변수처럼 Arguments에 들어가기도 하고 , 다른변수에 대입되기도 한다
나는 오히려 그냥 객체 라고 생각했는데 변수라고 생각해도 비슷한 것 같다
CodeUP 기초 100제
너무 이론 공부에 치중하는 느낌이 들어서 자바 연습문제가 없을까 찾다가 코드업에서 기초100문제가 있어서 쭉 풀어보면서 복습 해보기로 하였다
Java 개발자 로드맵
인프런 강좌 검색중 무료로 java개발자 로드맵에대해서 알려주는 강좌가 있어서 나눠서라도 하나씩 들어보고 로드맵을 그려보고자 한다
오늘 느낀 점
공간이 편해서 그런가 요즘 공부시간이 많이 흐트러진 기분인데 공부하기 위해 시간을 할애하고 세팅 해놨으면 그만큼은 집중을 해서 공부를 해야되는 것같다. 공부할 거리가 없다, 공간이 좀 프리하다 등 여러가지 환경이 부족한 부분은 있지만 또 그부족한 것을 채우는게 나의 역량인것 같다.. 어떻게하면 공부시간을 집중해서 활용할지 진지하게 고민을 해야겠다
한가지는 자바에 관해 혹은 프로그래밍에 관해 전반적인 지식 향상을 위해 주제별로 스스로 탐색해보는 시간을 갖거나 아니면 온라인 강의를 찾아서 듣는 것도 방법인것같다. 그 첫번째 주제로 떠올린것이 객체지향이 었다. 아직 객체지향이 무엇인지 뿌옇기만한데 공부할수록 도움이 될 것 같다
뽀모도로 타이머를 하면서 공부에만 집중하기위해서 하는 것 인데 자꾸 이것 저것 핑계를 대면서 그시간에 다른짓을 한다.. 타이머 시간에는 오직 공부에만 집중할 수 있도록 하고 다른 시간이 더필요하다고 느낀다면 차라리 타이머를 누루지말고 휴식시간을 길게 가져가자
중요한건 몇시간을 공부하러 와서 앉아있엇냐가 아니라 실제로 얼마나 공부를 했냐이기 때문에 뽀모도로 타임을 기록하면서 하루하루 평가해나가는 것도 좋은 방법인 것 같다
조금 더 긴장감 있게 공부 하기위해서 점심시간 12시반~ 1시반을 지켜서 움직여 보려고 하였다
오늘 내부클래스 관한 내용 공부하면서 내가 너무 프로그래밍을 시험 공부하듯이 공부하고 있나 라는 의문이 들었다
중요한건 내가 어떻게 프로그래밍을 잘할 것인가에 포커스가 맞춰져야 하는데 너무 원리적인 부분들만 고민하고 있는게 아닌 가 싶기도하다.
강사님이 메모리 구조에서 중요한건 라이프 사이클이 어떻게 되는지를 생각해보라고 했는데 나는 너무 깊게 생각하고 있는 걸수도 있다