Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

작은자바이야기

From ZeroWiki
Revision as of 15:33, 25 May 2012 by imported>Kesarr

소개

  • --작은 자바를 건드리면 어떻게 될까?--
  • 2012년형 중장기 Java 스터디!

누가?

  • 튜터: 변형진
  • 튜티: 김태진, 김준석, 권순의, 서민관, 서영주, 권영기
    • 누구나 참여 가능합니다. 각자 이름을 써주세요.
    • 최소 Java 기초 문법 이해 및 학부 2학년 1학기 커리큘럼 수준의 전산지식 필요
    • 이론과 실무 지식을 모두 다룰 예정이므로 Java 경험이 많을 수록 좋습니다.
    • 우앙 재밌겠다 - 서지혜
    • 흥미로워서 참여하고 싶지만 아직 서울에 갈만한 형편이 안되네요.. 흥미로운 주제를 다루시는것 같던데. - 안혁준

언제?

  • 토요일 오후 1시부터

어디서?

  • 제2공학과 6층 ZeroPage학회실 또는 컴퓨터공학부실습실

무엇을?

  • 학교에서 배울 수 없는 Java에 대한 좀더 깊고 다양한 이야기
  • 다룰 법한 주제
    • Java Technology와 생태계
    • Java 개발 환경 및 빌드 프로세스
    • Java 프로그래밍 언어
    • Java 코딩 컨벤션
    • 클래스와 객체
    • Annotations 및 Generics
    • 예외 처리
    • Java API와 주요 기술
    • 컬렉션 프레임워크와 동시성 제어
    • Servlet과 Servlet 컨테이너
    • Java 런타임과 리플렉션
    • 입출력과 네트워크
    • 프레임워크와 아키텍처
      • MVC와 영속화 계층(DB)
    • 주요 오픈 소스 라이브러리
    • Java 개발 방법론
    • 객체지향 프로그래밍
      • 리팩터링
      • 디자인 패턴
    • 테스트 주도 개발
      • 유닛 테스트
      • Mock 프레임워크
    • Android 플랫폼
    • 등등…

어떻게?

  • 세미나
  • 라이브 코딩
  • 실습
  • 참고도서
    1. Effective Java Second Edition by Josh Bloch

왜?

  • --작은 자바의 작은 배때지에 칼빵을 놔주기 위해…?--

변형진

  • 현업 Java 개발자도 놓치기 쉬운 문제들을 짚어보고, 올바른 Java 프로그램을 빠르고 깔끔하게 구현하는데 필요한 중급 수준의 지식을 전달하기 위해
  • Java를 중점적으로 다루지만, Java에 한정되지 않은 폭넓은 컴퓨터공학적 이해를 바탕으로 사고하도록 하기 위해
  • 그동안 설계와 구현에 관한 일반론을 위주로 세미나를 진행해왔기에, 이번에는 좀더 practical하고 pragmatic한 지식을 전달하는데 비중을 두고자 함.
  • 나 스스로도 알지만 불충분했던 지식이나 아직 어렴풋한 지식을 설명하면서 함께 공부하고 배우기 위해

김태진

  • 학교에서 배우기 힘든 다양한 지식(자바뿐만 아니고)들을 접해보고, 활용할 수 있기위해
  • 아직 내가 구현하는게 불가능한 것을 가능하게 하는 것부터, 좀 더 '잘' 구현하는게 가능한 영역까지 그 폭을 넓히기 위해
  • 어디가서 자바로 개발 좀 제대로 해봤냐라고 물어볼때, 확실히 '네'라고 대답할 수 있기 위해
  • 병특을 위한 중장기 프로젝트(?)
  • "내가 아무것도 모른 상태에서 1학년 1년간 배울때처럼 그때 그 마음으로 많은 것을 배우기 위해" - 배움에 이유가 있는가.

서영주

  • 자바를 좀 대충 배운 감이 있어서 자바에 대해서 조금 더 확실히 알고 학교에서 가르쳐주는 것 외의 자바에 관한 지식을 조금 더 배우고 싶어서.
  • 언어에 관한 것 뿐만 아니라 유용한 라이브러리, 자바 개발 환경 등 개발을 더 빠르고 편리하게 할 수 있는 방법을 배우기 위해서.
  • 유닛테스트, mock 프레임워크 사용 등의 부분에 대한 실제 사용 예를 잘 알기 위해

권순의

  • 학교에서 배운 자바보다 더 심도있는 걸 하고 싶었는데 능력이 안 되서 못했기 때문에
  • 보다 더 사고를 넓히기 위해
  • 공부란 것은 하면 할 수록 할게 많기 때문..

서민관

  • 단순히 자바 언어에 대해서가 아니라 더 다양한 주제를 다루는 스터디이기 때문에 흥미가 있어서.
  • 토요일에 할 수 있는 활동들 중에서 시간 대 성능 비가 월등하니까 듣지 않을 이유가 없다.
  • TDD로 코드를 짜 보려다 실패해서 -_-;;; 어떻게 TDD로 코딩을 해야 하는지, 어떻게 리팩토링을 해야 하는지 듣고 싶어서.

권영기

  • 자바 언어에 대해서 심도있게 공부해보고 싶어서.
  • 나의 시야를 넓히고 싶어서.
  • 토요일을 알차게 보내기 위해서.
  --좋은 선행학습이다..--

규칙

진행

2012년 5월 5일

  • 오리엔테이션
    • 튜터가 생각한 이 스터디의 "무엇을?", "어떻게?", "왜?"를 자세히 소개하고, 튜티들이 원하는 "무엇을?", "어떻게?"에 대한 이야기를 나눴습니다.
    • 스터디 시간이 참여자들 각각에게 원하지 않는 시간 낭비가 되지 않도록, 언제라도 또다른 의견과 질문을 환영합니다.
  • "왜?"에 각자 서브섹션을 나누어 자신이 이 스터디를 통해 원하는 것을 적고, 스스로에게 동기부여를 해봅시다.

후기

2012년 5월 12일

  • SpringSource Tool Suite(Eclipse IDE)의 기본 설정과 프로젝트 설정에 필요한 기본적인 정보를 설명했습니다.
  • Eclipse JDT의 빌드 과정을 알아보고 Maven에서 라이브러리 의존성을 추가해보았습니다.
  • 클래스와 그 멤버에 적용하는 기본 modifier들의 개념 및 용법을 다뤘습니다.
    • public, protected, private, (none)
    • abstract, final, static

후기

  • static modifier에 대해 애매하게 알고 있었는데 자세하게 설명해주셔서 좋았습니다. static은 타입을 통해서 부르는거라거나 원래 모든 함수가 static인데 객체지향의 다형성을 위해 static이 아닌 함수가 생긴거라는 설명은 신기했었습니다. object.method(message) -> MyType::method(object, method) 부분이 oop 실제 구현의 기본이라는 부분은 잊어버리지 않고 잘 기억해둬야겠습니다. 근데 파이썬에서 메소드 작성시 (self)가 들어가는 것도 이것과 관련이 있는건가요? -서영주
    • Python 은 PEP에 절대 권한을 가진 귀도가 그냥 의견을 모아서 정한겁니다. 원숙한 언어일수록 스펙 자체가 '원래 그런 것'은 없고, '사람간의 약속'입니다. 이하 참고자료. --NeoCoin
    • http://neopythonic.blogspot.com/2008/10/why-explicit-self-has-to-stay.html
    • http://stackoverflow.com/questions/68282/why-do-you-need-explicitly-have-the-self-argument-into-a-python-method
    • 제가 "원래 모든 함수가 static"이라는 의미로 말한건 아닌데 오해의 소지가 있었나보군요. 사실 제가 설명한 가장 중요한 사실은 말씀하신 예에서 object의 컴파일 타입의 method() 메서드가 가상 메서드라면(static이 아닌 모든 Java 메서드), 실제 어떤 method() 메서드를 선택할 것이냐에 관한 부분을 object의 런타임 타입에 의한다는 부분이었지요. 그러니까 object는 컴파일 타입과 동일하지 않은 런타임 타입을 가질 수 있으며, 다형성의 구현을 위해 implicit argument인 this(=object)의 런타임 타입에 따라 override된 메서드를 선택한다는 사실을 기억하세요.

2012년 5월 19일

  • Singleton 패턴과 lazy initialization의 필요성에 대해 이야기했습니다.
    • 멀티스레드 환경에서 synchronized modifier를 사용한 동기화에 대해 공부했습니다.
    • 동기화 부하를 피하기 위한 DCL 패턴의 문제점을 살펴보고 Java 5 이후에서 volatile modifier로 해결할 수 있음을 배웠습니다.
  • Serializable 인터페이스와 ObjectOutput, ObjectInput을 사용한 직렬화, 역직렬화에 대해 공부했습니다.
    • transient modifier는 VM의 자동 직렬화 과정에서 특정 속성을 제외할 수 있고, Externalizable 인터페이스를 구현하면 직렬화, 역직렬화 방식을 직접 정의할 수 있음을 보았습니다.
  • JNI라는 기법을 사용해 네이티브 라이브러리를 연결하여 함수를 호출할 수 있음을 배웠습니다.
    • native modifier로 함수의 인터페이스를 선언할 수 있고, 마샬링, 언마샬링 과정에서 성능 손실이 있을 수 있음을 이야기했습니다.
  • 불변객체의 필요성과 조건에 대해 알아보았습니다.
    • 대표적인 불변객체인 String 클래스가 내부적으로 어떻게 구현되고, 어떻게 불변성을 유지하는 지를 살펴보았습니다.
    • 다양한 String 객체의 활용 과정에서 객체들의 동일성과 동등성을 알아보았습니다.

후기

  • String객체라니..! 자바 스트링은 편하면서도 불편했는데 뭔가 그 이유를 들을 수 있었을 법한 주제네요..-김태진
  • c++에서 상호배제 관련으로 mutex나 critical section같은거 엄청 배웠었는데 자바에서는 synchronized를 이용해서 쉽게 처리할 수 있다는게 신기했습니다. os 수업 들은지 오래 됐는데 멀티프로세스와 멀티스레드 수업을 다시 들으니까 설명을 참 잘 해주셔서 좋았습니다. 함수에만 붙일 수 있는게 아니고 보호자원을 가진 객체를 이용한 synchronized(this){ ... } 같은 부분은 나중에 스레드를 쓸 경우에 참고가 될 것 같습니다. 그리고 인터페이스와 리플렉션을 이용한 초기화를 보니 생각을 잘 하면 구체클래스가 코드에 안드러나게 할 수 있다는 점도 볼만했습니다. -서영주

2012년활동지도, 스터디분류