11강. static - static의 이해 - static과 객체와의 관계 - static의 장점과 단점

Slides:



Advertisements
Similar presentations
17 강. 인터페이스 – I - 인터페이스의 이해 - 인터페이스의 문법 - 다형성이란 ? Lecturer Kim Myoung-Ho Nickname 블스
Advertisements

22강 API - I - JAVA필수 API - String의 이해 - String의 문제점
28강 JAVA 입출력(I/O) 알아보기 - 입출력(I/O) 이란? - JAVA 입출력 API(Input~, Output~)
30강_웹문서 제작 팁 웹문서 제작 팁 Lecturer Kim Myoung-Ho Nickname 블스
4강. Servlet 맛보기 Servlet 문서 작성 하기 web.xml에 서블릿 맵핑 어노테이션을 이용한 서블릿 맵핑
16강. 자바 빈 빈 이란? 빈 만들기 빈 관련 액션 태그(useBean, getProperty, setProperty)
2강. JAVA 프로그래밍이란?-II & 변수 JAVA 프로그램 환경설정과 실행 방법 변수란?
23강. EL(Expression Language)
24강. JSTL(JSP standard Tag Library)
10강. AOP(Aspect Oriented Programming)-II
25강. Security-I 보안 관련 프로젝트 생성 보안 관련 라이브러리 추가 보안 관련 설정 파일 만들기
6강. DI설정 방법 XML파일을 이용한 DI설정 방법 JAVA를 이용한 DI설정 방법 XML과 JAVA를 같이 사용
5강. DI활용 의존 관계 DI사용에 따른 장점 Lecturer Kim Myoung-Ho Nickname 블스
11강. JSP 본격적으로 살펴보기-III request 객체의 이해 response 객체의 이해
29강. MVC패턴을 이용한 게시판 만들기-III
28강. MVC패턴을 이용한 게시판 만들기-II FrontController 만들기 Command 만들기
22강. 파일 업로드 - 파일 업로드 라이브러리 설치 - 파일 업로드 프로그래밍 Lecturer Kim Myoung-Ho
12강. 액션태그 액션태그란? forward, include, param 태그 살펴보기
9강. JSP 본격적으로 살펴보기-I JSP 태그의 개념 이해 JSP 동작 원리 JSP 내부 객체
20강. 커넥션풀 DAO, DTO PreparedStatement 커넥션 풀(DBCP)
27강. MVC패턴을 이용한 게시판 만들기-I MVC패턴의 이해 전체적인 컴포넌트 설계 DB(DataBase) 생성
21강. 스프링JDBC JDBC를 이용한 반복코드 줄이기 Spring빈을 이용한 코드 간소화
6강. Servlet 본격적으로 살펴보기-II
16강. 추상클래스 - III - 자동차 옵션 제작 프로그래밍 Lecturer Kim Myoung-Ho Nickname 블스
3강_HTML 기본-II 리스트 태그 - ul,li,ol 표를 나타내는 태그 - table 이미지를 출력하는 태그 – img
26강. 포워딩(Forwarding) RequestDispatcher 클래스 HttpServletResponse 클래스
19강. 데이터 베이스 - III 회원가입 및 회원정보 수정 프로그래밍 Lecturer Kim Myoung-Ho
8강. Servlet 본격적으로 살펴보기-IV
1강_web과 html Web이란? HTML이란? CSS란? Lecturer Kim Myoung-Ho Nickname 블스
28강_맵(Map) 맵을 이용하기 위한 설정 위치 추적 Lecturer Kim Myoung-Ho Nickname 블스
11강. 스프링 MVC 기초 스프링 MVC 개요 스프링 MVC 구조 살펴보기 resources 폴더
2강. 스프링 프로젝트 만들기 이클립스에 스프링 프로그인 설치(STS) 처음 만들어 보는 스프링 프로젝트
25강. FrontController 패턴과 Command 패턴
26강_CSS3 규칙 CSS파일 규칙 Lecturer Kim Myoung-Ho
23강. 트랜잭션(Transaction)-II
2강. 개발 환경 설정 JDK 설치 Path 설정 이클립스 다운로드 톰캣 설치 톰캣 환경 설정
3강. JSP 맛보기 JSP 문서 작성 하기 JSP 아키텍처 Lecturer Kim Myoung-Ho Nickname 블스
24강 API - III - Timer 클래스 - StringTokenizer 클래스 Lecturer Kim Myoung-Ho
13강. 쿠키 쿠키란? 쿠키 문법 Lecturer Kim Myoung-Ho Nickname 블스
15강. 예외 페이지 예외 페이지의 필요성 page 지시자를 이용한 예외 처리 web.xml파일을 이용한 예외 처리
10강_CSS 속성-I CSS3 단위 url() display 속성 visibility 속성 opacity 속성
23강 API - II - 약방의 감초 Random 클래스 - Scanner 및 Sysout - Wrapper 클래스의 이해
17강_스마트폰 레이아웃-I viewport header 제작 네비 제작 Lecturer Kim Myoung-Ho
15강. 추상클래스 - II - 어린이집 아이들의 식대 계산 프로그래밍 Lecturer Kim Myoung-Ho
16강. 스프링MVC 게시판-I 프로젝트 설계 DataBase 구축 프로젝트 생성 Lecturer Kim Myoung-Ho
1강. 웹프로그래밍 웹프로그래밍이란? JAVA웹 웹프로그램의 동작 필요한 학습 Lecturer Kim Myoung-Ho
8강. 외부 파일을 이용한 설정 Environment 객체 프로퍼티 파일을 이용한 설정
30강 JAVA 그래픽 JAVA GUI(Graphic User Interface)란? AWT 컴포넌트? Swing 컴포넌트?
1강. 스프링이란? 프레임워크 스프링(SPRING) 설치 Lecturer Kim Myoung-Ho Nickname 블스
7강_CSS 기본-II id(#) 와 class(.) tag,id, class 혼합 속성 선택자 후손 및 자손 선택자
11강_CSS 속성-II margin 및 padding 속성 box-sizing 속성 border 속성
12강_CSS 속성-III font-family , font-size 속성
27강 JAVA Collections - II - Map계열 컬렉션 클래스 살펴보기 - Set계열 컬렉션 클래스 살펴보기
2강_첫번째 안드로이드 프로젝트 에뮬레이터(AVD) 만들기 처음 만들어 보는 프로젝트 전체적인 구성 살펴보기
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
3강_레이아웃-I 화면구성 요소 뷰에 대한 이해 LinearLayout Lecturer Kim Myoung-Ho
3강. 컴퓨터와의 기본적인 소통수단 - I 연산자란? 컴퓨터와 소통하기 위한 다양한 방법들
7강. 객체지향 프로그램의 본질 메소드 프로그래밍의 한계 객체의 개념 및 클래스의 이해
17강. 스프링MVC 게시판-II 패키지, 인터페이스, 클래스 제작 Controller 제작 리스트 페이지 만들기
26강 JAVA Collections - I - 컬렉션이란? - JAVA도 결국 효과적인 데이터를 처리하기 위한 수단
15강. 폼 데이터 값 검증 Validator를 이용한 검증 ValidationUtils 클래스
13강. Form 데이터 HttpServletRequest 어노테이션 데이터(커맨드) 객체
14강. 세션 세션이란? 세션 문법 Lecturer Kim Myoung-Ho Nickname 블스
최초의 생명체는 어떤 생물이었을까? 최초의 생명체 광합성 세균의 진화 진핵 세포의 진화.
27강_데이터베이스 SQLite CP(Content Provider) Lecturer Kim Myoung-Ho
22강. 트랜잭션(Transaction)-I
12강. 컨트롤러 컨트롤러 클래스 제작 요청 처리 메소드 제작 뷰에 데이터 전달
7강. 생명 주기(life cycle) 와 범위(scope)
13강_이벤트 & 리스너(Listener) 이벤트 개요 커스텀 뷰의 콜백메소드를 이용한 이벤트 처리
15강_액티비티 액티비티란? 새로운 액티비티로 전환 생명주기 화면방향(Orientation)
Presentation transcript:

11강. static - static의 이해 - static과 객체와의 관계 - static의 장점과 단점 Lecturer Kim Myoung-Ho Nickname 블스 blogstudy@naver.com

11-1. static의 이해 static 키워드의 이해 필요에 의해 클래스를 만들고, 사용할 때는 생성자를 통해 객체로 만들어서 사용을 합니다. 이러한 방식으로 모든 것을 처리하다 보면, 문제가 생길 수 있습니다. 예를 들어 집안에 아빠, 엄마, 그리고 세 쌍둥이가 있습니다. 아이들이 아빠 지갑에 100원짜리 2개가 있다고 알고 있습니다. 이러한 상황에서 아이들이 아빠한테 100원을 달라고 합니다. 당연히 아빠지갑에는 100원 동전 2개가 있으니, 줄 수 있습니다. 첫째 아이가 먼저 아빠 지갑 객체를 생성하여 100원을 받았습니다. 그리고 둘째 아이가 아빠 지갑 객체를 생성하여 100원을 받았습니다. 마지막으로 셋째 아이가 아빠 지갑 객체를 생성하여 100원을 받았습니다. 여기까지 보면, 뭔가 이상 합니다. 분명 집안에 아빠도 한 명이고, 지갑도 한 개일 텐데, 아이들 모두 아빠 지갑을 생성하여 100원씩을 받았습니다. 200원 밖에 없는데 아이들이 받은 돈은 모두 300원 입니다. 버그 입니다. 그럼 이런 상황에서 생각할 수 있는 방법은 무엇일까요? 아주 쉽게 생각해 보면 아빠 지갑 객체가 세 아이들 모두에게 공유 되면 됩니다. 그러면 첫째 아이가 100원 받고, 둘째 아이가 100원을 받으면, 지갑에는 동전이 없고, 셋째 아이는 100원을 받을 수 없게 됩니다. 셋째 아이한테는 서운한 일이지만, 어째든 프로그램적으로는 이상이 없이 정상 동작 할 것입니다. 그러면 어떻게 아빠의 지갑을 모든 아이들이 공유할 수 있을까요? 바로 ‘static’ 키워드를 사용하는 것 입니다. 우선 ‘static’ 키워드를 ‘공유’ 라고 생각 합니다.

11-1. static의 이해 현실적으로 불가능 현실적으로 가능 아빠 지갑 객체 첫째 아이 첫째 아이 아빠 지갑 클래스 100원 받음 첫째 아이 첫째 아이 100원 받음 객체 생성 아빠 지갑 클래스 아빠 지갑 클래스 객체 생성 아빠 지갑 객체 둘째 아이 둘째 아이 100원 받음 100원 받음 객체 생성 100원 못 받음 아빠 지갑 객체 셋째 아이 셋째 아이 100원 받음 현실적으로 불가능 현실적으로 가능

11-1. static의 이해 static 키워드의 이해 위와 같은 상황을 ‘static’ 키워드를 사용하여 프로그래밍 해 보겠습니다.(11_1_ex1_staticEx)

클래스들이 모여 있음. 객체들이 모여 있음. 11-2. static과 객체와의 관계 데이터 영역 Heap 영역 객체는 클래스에서 생성(복사)되어 진다고 배웠습니다. 클래스 하나에서 무한대로 객체를 생성할 수 있고 그러한 객체는 모양은 동일할지 모르지만, 전혀 다른 덩어리 입니다. 하지만 static이 붙은 변수는 객체 변수가 아닌 클래스 변수로써 객체가 생성되기 전에 이미 존재합니다. 메모리 관련 얘기를 좀 해보겠습니다. 클래스들이 모여 있음. 객체들이 모여 있음. 가비지 콜렉터 관리 데이터 영역 Heap 영역

11-3. static의 장점과 단점 static은 잘 사용하면 좋고, 그렇지 않으면 큰 재앙을 불러 올 수 있습니다. 이렇게 생성을 하지 않고도 존재한다는 것은 그만큼 메모리를 사용하지 않아도 된다는 것 입니다. 지금은 간단한 예제를 살펴보고 있기 때문에 객체생성에 따른 메모리의 부하를 느낄 수 없지만, 프로젝트가 커지면 객체생성에 따른 메모리 부족현상이 있을 수 있습니다. 물론 가비지콜렉터가 열심히 일을 하고는 있지만요. 객체 생성을 하지 않고도 사용할 수 있는다는 것은 분명 장점이지만, 한편으로 생각해 보면 가비지콜렉터의 관리 밖에 있기 때문에 항상 메모리에 상주해 있습니다. 즉 프로젝트가 커지고, 시스템이 오랜 시간 동안 돌아가게 되면 시스템 운영속도가 점차 느려지다가 급기야 큰 재앙이 올 수도 있습니다. 따라서 static의 사용은 신중해야 됩니다. static 변수로 사용되는 대표적인 예를 아마도 상수(변하지 않는 수) 일 것입니다. 만약 프로그래밍을 하다가 원주율이 빈번이 사용되어야 한다면 이러한 값은 상수도 정의해 놓고 사용하는 편이 좋습니다. 원주율은 3.141592653589793238462643383279… 끝이 없습니다. 이러한 경우 원주율을 3.14까지로 정의해 놓고 사용하자고 팀원들 사이 약속을 합니다.