JAVA 접근제한자


접근제한자(접근지정자)?

접근제한자란 클래스 내에서 멤버의 접근을 제한하는 역할을 하는 기능. public, private, protect, default등이 있다.


접근제한자 종류

접근제한자

클래스 내부

같은 패키지

하위 클래스

외부 클래스

public

O

O

O

O

protect

O

O

O

X

default

O

O

X

X

private

O

X

X

X


1. public : 모든 접근을 허용모든 클래스가 접근이 가능함.

2. protect : 상속받은 클래스  같은 패키지에서만 접근이 가능함

3. default ; 기본 제한자로 같은 클래스 맴버와 패키지에서 접근이 가능함.

4. private : 외부에서 접근불가같은 클래스 맴버만 접근이 가능함.



'Develop > Java' 카테고리의 다른 글

자바 reflection  (0) 2016.11.17
문자열 "ABCDEFG"를 역순으로 출력  (0) 2016.11.17
오버로딩 vs 오버라이딩  (0) 2016.11.14
Java Collection Framework  (0) 2016.11.14
Abstract class vs Interface  (0) 2016.11.01


오버로딩(Overloading) vs 오버라이딩(Overriding)

 

자바에서 다형성을 지원하는 방법으로 메소드 오버로딩(Overloading) 오버라이딩(Overriding)이 있다.

 

결론부터 말하자면,


오버로딩(Overloading)은 기존에 없던 새로운 메서드를 정의하는 것이고,


오버라이딩(Overriding)은 상속 받은 메서드의 내용만 변경 하는 것이다.

 


간단하게는, 


오버로드(Overload)

메서드의 이름은 같고 파라메터의 갯수나 타입이 다른 함수를 정의하는 것을 의미한다.

(리턴값만을 다르게 갖는 오버로드는 작성 할 수 없다.)



오버라이드(Override)

상위 클래스의 메서드를 재정의 하는 것이다.

메서드의 이름은 물론 파라메터의 갯수나 타입도 동일해야 하며주로 상위 클래스의 동작을 상속받은 하위 클래스에서 변경하기 위해 

사용된다.


 


좀 더 자세하게 가보자면,

 

1. 오버로딩 (Overloading)

오버로딩(Overloading)은 메소드 오버로딩과 생성자 오버로딩이 있다. 하지만 둘다 같은 개념이다.

같은 이름의 함수를 여러 개 정의하고, 매개변수의 유형과 개수를 다르게 하여 다양한 유형의 호출에 응답하게 한다.

 

2. 오버라이딩 (Overriding)

상위 클래스가 가지고 있는 멤버변수가 하위 클래스로 상속되는 것처럼 상위 클래스가 가지고 있는 메소드도 하위 클래스로 상속되어 하위 클래스에서 사용할 수 있다. 하지만, 하위 클래스에서 메소드를 재정의해서 사용할 수 있다.

상속 관계에 있는 클래스 간에 같은 이름의 메소드를 정의하는 기술을 오버라이딩(Overriding) 이라고 한다.

 

오버로딩(Overloading)과 오버라이딩(Overriding) 성립조건


구분

오버로딩 

오버라이딩 

메소드 이름 

동일 

동일 

매겨변수, 타입 

다름 

동일 

리턴 타입 

상관없음 

동일 

 

 



'Develop > Java' 카테고리의 다른 글

자바 reflection  (0) 2016.11.17
문자열 "ABCDEFG"를 역순으로 출력  (0) 2016.11.17
JAVA의 접근제한자  (0) 2016.11.15
Java Collection Framework  (0) 2016.11.14
Abstract class vs Interface  (0) 2016.11.01

Java Collection Framework




1. 정의

 다수의 데이터를 쉽게 처리할  있는 표준화된 방법을 제공하는 클래스들을 말한다컬렉션(Collecion) 다수의 데이터  데이터 그룹프레임워크(Framework) 표준화된 방식을 의미한다.



2. 종류


1. List  순서가 있는 데이터의 집합데이터의 중복을 허용한다.
 원소의 순서가 정의되어 있으며컬렉션상의 위치를 통해 원소에 접근할  있다따라서 List 사용하면 컬렉션 상에서의 인덱스를 통해 어떤 원소를 접근   있다원소간의 순서가 중요한 경우예를 들어 도착 순서대로 메세지를 처리하는 큐의 경우에는 리스트를 사용해야 한다.


2. Set  순서를 유지하지않는 데이터의 집합데이터의 중복을 허용하지 않는다.
 중복원소(상호간 equals() 결과가 참인 원소) 허용하니 않는 컬렉션원소 사이의 순서가 없으므로이전 순차 열람할 때의 원소 순서가 다음 순차 열람할  보장되지 않는다.


3. Map  (key) (value) 쌍으로 이루어진 데이터집합순서는 유지되지않으며 키는 중복이 허용하지 않는다값의 중복은 허용.
 Map List처럼 키를 사용해서 원소를 저장하지만, List 정수만을 키로 사용할  있는 반면 Map 임의의 객체를 키로 사용할  있다 Map 다른 컬렉션 인터페이스와는 형태가 상이하여 다른 컬렉션 인터페이스를 상속하지 않고내부적으로 키에 대한 컬렉션과 데이터에 대한 컬렉션의 2 컬렉션을 유지한다.


 JDK 1.2 이전 까지는 Vector, Stack, Hashtable, Properties 같은 컬렉션 클래스들을 서로 다른 각자의 방식으로 처리해야 했으나, JDK 1.2부터 컬렉션 프레임워크가 등장하면서 다양한 종류의 컬렉션 클래스가 추가되고 모든 컬렉션 클래스들이 표준화된 방식으로 다룰  있도록 체계화 되었다따라서 컬렉션 프레임워크가 만들어지기 이전에 존재하던 것이기 떄문에 컬렉션 프레임워크 명명법을 따르지 않는다



3. 구현

1.List 구현

 ArrayList LinkedList.

 ArrayList 원소 접근이 빠르고 원소 추가  제거가 느린 반면 LinkedList 원소 접근이 느리지만 원소 추가와 제거는 빠르다.

 

2. Set, SortedSet 구현

 HashSet 가장 빠르지만 원소간의 순서를 보장해주지 않는다. LinkedHashSet 원소  순서를 보장해 주지만 원소 추가 삭제  30% 정도 시간이  걸린다. TreeSet Comparator 따라서 원소를 정렬하지만 원소 추가 삭제 시간이 logn(n 컬렉션의 크기) 비례해서 커진다.

 

3. Map 구현

 Map 구현은 Set 구현과 비슷한 패턴을 보인다. HashMap 가장 빠르고 단순하다. LinkedHashMap 컬렉션에 추가된 원소 간의 순서를 보장한다. TreeMap(SortedMap 구현) 키의 순서에 따라 순차 열람이 가능하지만 원소의 추가 제거 시간이 logn(n 컬렉션의 크기) 비례한다.


'Develop > Java' 카테고리의 다른 글

자바 reflection  (0) 2016.11.17
문자열 "ABCDEFG"를 역순으로 출력  (0) 2016.11.17
JAVA의 접근제한자  (0) 2016.11.15
오버로딩 vs 오버라이딩  (0) 2016.11.14
Abstract class vs Interface  (0) 2016.11.01

Apache Tomcat 다운로드 및 STS와 Tomcat 연동

 

1. Apache Tomcat 다운로드 : http://tomcat.apache.org/

 

2. Service Installer 는 설치형이고, 필자는 No 설치형을 다운받았다.

 

 

3. 다운로드는 끝났고, STS에 연동시키면 된다.

 

4. STS의 Package Explorer의 빈 화면에 우측마우스 클릭 New-Other

 

 

5. Wizards 에 server 입력후 Server 선택 후 Next

 

6. Apache 클릭후 다운로드 받은 Tomcat 버전 선택

 

7. Tomcat 경로 지정

 

 

8. jdk 경로 지정

 

 

9. 변경된 JRE home 경로, JRE name 변경, Finish

 

 

 

10. Finish

 

11. jdk 선택 후 Finish

 

12. 생성한 프로젝트가 있었다면

    Availabe 에서 프로젝트 클릭 > Add 클릭 > Finish 클릭

 

 

 

 

 

 

 

 

 

 

 

 

Spring Tool Suite (STS) 다운로드

 

1. STS 다운로드 링크 접속 : https://spring.io/tools

 

2. See all versions 클릭

 

3. 운영체제에 맞는 버전 다운로드

 

4. 압축 풀고, STS.exe 실행하면 끝!!

  1) STS.exe 실행하면 오류뜨는 사용자도 있을것이다. STS.exe 를 실행하기 위해서는 JDK 혹은 JRE가 사전에 설치 되있어야 한다.

     (우리는 개발자니까 JDK(Java Development kit) 를 설치하는게 이득!! 해결 완료!)

java.sql.SQLException: 부적합한 열 유형: 1111




Mybatis와 Oracle 연동하는데 insert를 하는 과정에서 에러가 났다.



부적합한 열 유형: 1111; nested exception is java.sql.SQLException: 부적합한 열 유형


테이블 컬럼에 null 이 들어가도 되는 경우 널이 넘어오는 경우를 생각해서

MyBatis 에서 column type 지정해 줘야 하는 문제라고 한다.

  

 이런식으로 하면 된다길래


해봤지만, 디비 디버깅 결과 다음과 같이 값을 못받아 온다/


spring3 버전에서 mvc interceptors 사용



스프링3 버전에서 mvc 인터셉터를 쓰려면 에러가 난다.





이게 스프링4 버전에서부터 바뀐 부분인데 


결론부터 말하자면


인터셉터를 선언하기 전에

 <mvc:annotation-driven/> 를 먼저 선언해주면 해결된다.



@MVC의 기반 클래스 변경

  • 3.1 부터 MVC기반 클래스 변경
    • <mvc:annotation-driven/>에 의해 등록되는 클래스들
    • HandlerMapping : DefaultAnnotationHandlerMapping -> RequestMappingHandlerMapping
    • HandlerAdaptor : AnnotationMethodHandlerAdapter -> RequestMappingHandlerAdapter
    • HandlerExceptionResolver : AnnotationMethodHandlerExceptionResolver -> ExceptionHandlerExceptionResolver
    • 이름을 보면
      • 'Annotation'은 이제 당연하므로 생략.
      • @RequestMapping이 연상되도록
  • Handler를 클래스가 단위가 아닌 메소드 단위로
  • <mvc:annotation-driven/>를 쓸 때 옛날 클래스와 같이 쓰지 않도록 주의

    <mvc:annotation-driven/>
    <bean id="handlerAdapter"
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="customArgumentResolvers">
           <array>
                 <bean class="net.benelog.UserArgumentResolver"/>
           </array>
        </property><property name="order" value="-1"/>
    </bean>
    

->

        <mvc:annotation-driven>
            <mvc:argument-resolvers>
                    <bean class="net.benelog.UserArgumentResolver"/>
            </mvc:argument-resolvers>
        </mvc:annotation-driven>



HTTP Status 500 - Servlet.init() for servlet action threw exception



HTTP Status 500 - Servlet.init() for servlet action threw exception


type Exception report

message Servlet.init() for servlet action threw exception

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet.init() for servlet action threw exception
	org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442)
	org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1083)
	org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:640)
	org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
	java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	java.lang.Thread.run(Unknown Source)

root cause




서블릿 설정 문제인데 모르겠다..

에러 : Missing artifact com.oracle:ojdbc14:jar:10.2.0.4.0 #2




pom.xml에서 아무 이상 없는데 dependency 부분에서 자꾸 에러나는 현상



에러코드를 검색해보면 repositories 를 추가하라고 되있는데 찾아보니까 




2016, 04, 26 부로 메이븐 추가 주소가 바뀌었다.



이 뒤로는 에러 안난다.


HTTP Status 500 - Request processing failed


서버 셋팅을 마치고 재대로 돌아가던 서버가 코드를 수정하고 서버를 돌리니 다음과 같은 메세지를 웹상에서 내뱉었다.


HTTP Status 500 - Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:


type Exception report

message Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (ORA-01017: invalid username/password; logon denied
)
### The error may exist in file [C:\dev\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\first\WEB-INF\classes\mapper\sample\Sample_SQL.xml]
### The error may involve sample.selectBoardList
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (ORA-01017: invalid username/password; logon denied
)
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948)
	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

root cause



http 에러코드가 500 인걸로 봐서 내부 서버 오류라고 하는데 도대체 어떤점이 잘못됬는지 모르겠다.

500 :Internal server error (내부 서버 오류)


해결

SQL쪽에 문제가 있는 것 같아 datasource 쪽을 보니 아이디 비밀번호를 입력하는 칸이 있었다.


결론부터 말하자면 아이디를 잘 못 적었던 것이다. 



            




패스워드는 동일 하게 적었으나, 오라클이다보니 아이디를 system, sys 로 적었던 것이 문제 였다.


datasource.xml 에 적은 username과 오라클의 접속 ID가 같아야했던 것이었다.






1···56789

+ Recent posts