자바
(객체지향, 상속 ppt 복습)
- 배열 생성하기
타입[] 변수 = new 타입[길이];
정수 -> 0, 실수 -> 0.0, 논리형 -> false, 참조타입 -> null
변수 = new 타입 {10,20,30,40,50};
(리터럴 타입으로 변수 생성, 값을 바로 주기도 가능)
타입[] 변수 = {10,20,30,40,50};
- 배열 복사
System.arraycopy(원본배열, 인덱스, 대상배열, 인덱스, 갯수)
String[] oldstrArray = {"java", "array", "copy"};
String[] newstrArray = new String[5];
System.arraycopy(oldstrArray, 0, newstrArray, 0, oldstrArray.length);
1. 객체 : 속성(필드) + 동작(메소드)로 구성
-> 객체와 객체는 메소드로 상호작용
-> 메소드 호출을 통해 객체가 다른 객체의 기능 이용 가능
- 객체간의 관계
집합관계 : 부품과 완성품의 관계
사용관계 : 객체간의 상호작용
상속관계 : 상위(부모) 객체를 기반으로 하위(자식) 객체를 생성
- 객체 지향 프로그래밍
집합/사용 관계에 있는 객체를 하나씩 설계한 후
조립하여 프로그램 개발
객체 지향 프로그래밍 단계
클래스 설계 -> 설계된 클래스로 사용할 객체 생성 -> 객체 이용
2. 클래스 : 자바의 설계도
클래스의 용도
- 라이브러리 : 객체 생성 및 메소드 제공 역할
- 실행클래스 : main()메소드 제공 역할
클래스의 구성 멤버
정적 멤버는 클래스 명으로 접근
인스턴스 멤버는 객체로 접근
필드 : 객체의 데이터 저장되는 곳
생성자 : 객체 생성 시 초기화 역할 담당
메소드 : 객체의 동작에 해당하는 실행 블록
필드 선언
필드를 선언하면 기본값이 할당되며 초기값을 설정할 수 있음
초기값은 주어질 수도, 생략할 수도 있음
초기값이 지정되지 않은 필드는 객체 생성 시 자동으로 기본 초기값으로 설정
생성자
생성자는 new연산자로 호출되는 중괄호{} 블록
객체 생성 시 초기화를 담당함
객체 초기화 : 필드를 초기화하거나 메소드를 호출해서 객체를 사용할 준비를 함
필드의 값을 할당하는 것을 필드의 초기화라고 하며 생성자를 통해
필드 초기화를 시킴 (this.필드 = 매개변수)
생성자 오버로딩 : 매개변수를 달리하는 생성자 여러개 선언
this() 코드를 통해 생성자에서 다른 생성자 호출 가능함
-> 필드 초기화 내용을 한 생성자에 집중 작성하고
나머지 생성자는 초기화 내용을 가진 생성자로 호출함
(중복 코드 발생 문제 해결 가능)
메소드
리턴타입 메소드이름 ([매개변수 선언, ...]) {
실행할 코드는 메소드 실행 블록에서 작성
}
메소드 오버로딩 : 같은 이름의 메소드를 여러개 선언
매개값을 다양하게 받아 처리할 수 있도록 하기 위해서 사용
3. 인스턴스 : 클래스로부터 만들어진 객체
인스턴스 멤버 : 객체마다 가지고 있는 멤버
(객체를 생성한 후 사용할 수 있는 필드와 메소드)
- 인스턴스 필드 : 힙 역역의 객체마다 갖고있는 멤버, 객체마다 다른 데이터 저장
- 인스턴스 메소드 : 객체가 있어야 호출 가능한 메소드
정적 멤버 : 객체와 상관없는 멤버
(클래스에 고정된 멤버로 객체 생성하지 않고 사용할 수 있는 필드와 메소드)
- 정적 필드 및 상수 : 객체 없이 클래스만으로도 사용 가능한 필드
- 정적 메소드 : 객체 없이 클래스만으로도 호출 가능한 메소드
this : 객체 내에서 인스턴스 멤버에 접근하기 위해 사용
생성자와 메소드의 매개변수 이름이 필드와 동일한 경우,
필드임을 지정하기 위해 주로 사용
인스턴스 멤버와 정적 멤버 선택 기준
객체마다 다를 수 있는 필드값 -> 인스턴스 필드로 선언
객체마다 다를 필요가 없이 고정된 필드값 -> 정적 필드로 선언
정적 메소드 선언 시 주의할 점
정적 메소드 선언 시 그 내부에서 인스턴스 필드 및 메소드 사용 불가
정적 메소드 선언 시 그 객체 자신의 참조인 this 키워드 사용 불가
4. 싱글톤 : 전체 프로그램에서 단 하나의 객체만 만들도록 보장하는 코딩 기법
private 접근 제한자 사용 -> 클래스 외부에서 new연산자를 통해
생성자 호출 불가하도록 함
final 필드 : 초기값이 저장되면 바로 최종값이 되어서 프로그램 실행 도중 수정 불가
패키지 : 클래스의 일부분으로, 클래스를 유일하게 만들어주는 식별자 역할
import문 : 사용하고자 하는 클래스 또는 인터페이스가 다른 패키지에
소속된 경우 이들을 가져와서 사용한다고 컴파일러에 통지
5. 클래스 접근 지정자
접근 제한자 : 클래스와 인터페이스 및 이들이 가진 멤버의 접근 제한
public, protected, private, default
6. Getter, Setter 메소드
외부에서 객체에 마음대로 접근할 경우 객체의 무결성이 깨질 수 있음
Setter메소드 - 외부의 값을 받아 필드의 값 변경이 목적
매개값 검증하여 유효한 값만 필드로 저장 가능
Getter메소드 - 외부로 필드 값을 전달하는 것이 목적
필드값을 가공해서 외부로 전달할 수도 있음
7. 상속
객체 지향 프로그램에서는 부모 클래스의 멤버를 자식 클래스에게 물려줄 수 있음
클래스 상속 : 상위 클래스의 상속을 하위 클래스가 물려받음
상위 클래스 - 수퍼 클래스, 하위 클래스 - 서브클래스
자식 클래스 선언 시 부모 클래스 선택 (extends 부모클래스)
여러개의 부모 클래스 상속 불가능
부모 클래스에서 private접근 제한을 갖는 필드와 메소드는 상속 대상에서 제외
자바는 클래스 다중 상속 기능이 없음 -> 인터페이스를 통해 이러한 효과를 얻음
8. 다형성 : 동일한 이름의 기능이 서로 다르게 작동하는 현상
메소드 오버라이딩 - 수퍼 클래스의 메소드를 서브 클래스마다 다르게 구현
한 클래스 내에 구현된 동일한 이름이지만 다르게 작동하는 여러 메소드
9. 메소드 재정의 (오버라이딩) : 부모 클래스의 메소드가 자식 클래스에서
사용하기에 부적합할 경우 자식 클래스에서 해당 메소드를 수정하여 사용함
메소드가 재정의될 경우 부모 객체 메소드는 숨겨지고,
자식 객체에서 메소드 호출하면 재정의된 자식 메소드가 호출됨
부모 메소드 호출 -> super.부모메소드();
final 클래스 - 더 이상 상속 불가능
final 메소드 - 더 이상 오버라이딩 불가능
10. 타입 변형과 다형성
다형성 : 사용 방법은 동일하지만 다양한 객체를 활용해 ]
여러 실행 결과가 나오도록 하는 성질
-> 메소드 재정의 + 타입 변환 = 다형성
자동 타입 변환 : 프로그램 실행 도중 자동으로 타입 변환이 일어남
바로 위의 부모가 아니더라도 상속 계층의 상위 타입인 경우
자동 타입 변환 일어날 수 있음
부모 타입으로 자동 타입 변환 이후에는 부모 클래스에
선언된 필드 및 메소드만 접근 가능
예외적으로 메소드가 자식 클래스에서 재정의될 경우엔
자식 클래스의 메소드가 대신 호출
강제 타입 변환 : 부모 타입을 자식 타입으로 변환
조건 - 자식 타입이 부모 타입으로 자동 타입 변환된 후 다시 반대로 변환할 때 사용
객체 타입 확인
instanceof() 연산자 : 어느 객체가 어느 클래스의 인스턴스인지 확인
메소드 내 강제 타입 변환이 필요한 경우 사용 가능
(타입 확인하지 않고 강제 타입 변환 시도하면 ClassCastException 발생할 수 있음
-> instanceof 연산자 통해서 확인 후 안전하게 실행)
11. 추상 클래스
실체 클래스의 공통적인 부분(변수, 메서드)을 추출해서 선언한 클래스
추상 클래스는 객체를 생성할 수 없음
-> 실체성이 없고 구체적이지 않은 클래스이기 때문에
추상 클래스와 실체 클래스는 상속 관계
추상 클래스의 용도
- 공통된 필드와 메서드를 통일
- 실체 클래스 구현 시 시간 절약
- 규격에 맞는 실체 클래스 구현 가능
(추상 클래스를 상속받은 실체 클래스들은 반드시 추상메소드를 재정의(오버라이딩)
해서 실행 내용을 작성해야함 -> 강제적으로 추상 메소드를 구현해야함)
추상 메소드 : 추상 클래스 안에 abstract 키워드를 가지고 있는 메소드로,
상속 시 반드시 재정의해야하는 메소드
추상 클래스는 abstract 키워드로 선언 가능
추상 클래스도 일반 클래스와 마찬가지로 필드, 생성자, 메소드 선언할 수 있음
직접 객체를 생성할 수 없지만 자식 객체 생성시 객체화됨
-> 자식 생성자에서 super(...) 형태로 추상 클래스의 생성자 호출
추상 메소드는 메소드 선언만 통일하고 실행 내용은
실체 클래스마다 달라야 하는 경우 사용
jsp
Apache Tomcat 설치
다운로드 -> Tomcat8 -> Core -> zip 다운, 설치 -> C드라이브로 이동
C:\apache-tomcat-8.5.90\apache-tomcat-8.5.90\bin-startup.bat (CMD창)
(오라클이랑 경로 겹치면 conf -> server.xml 메모로 연결해서 들어가기 ->
아래의 해당 부분처럼 숫자 8080을 8000으로 바꾸기
<Connector port="8000" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000"
/>
dns(domain name server)
ip 주소 응답
ip 주소로 웹 서버에게 요청
html 페이지 응답
웹의 동작
요청 (request) : 클라이언트에서 서버로 정보를 요구하기 위해 보내는 메세지
GET방식, POST방식
응답 (response) : HTTP에서 요구된 메세지에 대한 응답,
HTML, 이미지 등이 응답의 내용임
아래 경로로 폴더 생성 후 vscode실행, 생성한 폴더 열기 ->
C:\apache-tomcat-8.5.90\apache-tomcat-8.5.90\webapps\chap01
time.jsp 파일 만들기 ->
아래의 코드 입력 ->
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head><title>현재시간</title></head>
<body>
지금 : <%=new java.util.Date() %>
</body>
</html>
http://localhost:8000 주소창 뒤에 /chap01/time.jsp 입력해서 시간 뜨는지 확인
3. 정적자원과 동적자원
- 정적 페이지, 정적자원
파일이 변경되기 전까지 고정된 결과가 출력되는 페이지
주로 이미지 파일이나 html파일과 같이 자주 변경되지 않는 것들을
정적자원이라고 함
- 동적 페이지, 동적자원
자도응로 생성된 페이지, 기존의 웹 서버에 새로운 기능을 가진
프로그램을 탑재하여 동적으로 HTML을 생성
정적자원과 달리 파일의 코드를 변경하지 않아도 조건에 따라
응답 데이터를 전송함
시간이나 특정 조건에 따라 응답 데이터가 달라지는 자원을 동적자원이라고 함
ex> jsp, php, asp, .net : 동적 페이지를 만드는데 사용되는 프로그래밍 기술
CGI : 동적 컨텐츠 처리를 위한 가장 전통적인 방법
프로세스 단위로 실행되기 때문에 사용자 증가 시 급격한 성능 저하 발생
확장 CGI (ASP, PHP, JSP)
javaserver pages ---> jsp
동적 페이지를 작성하는데 사용되는 자바의 표준 기술
html 응답을 생성하는데 필요한 기능을 제공
jsp페이지의 구성요소
1) 디렉티브
jsp페이지에 대한 설정 정보를 지정할 때 사용함
<%@ page contentType="text/html; charset=utf-8"%>
page : jsp페이지에 대한 정보를 지정, jsp가 생성하는 문서의 타입,
문자인코딩, 출력 버퍼의 크기, 에러 페이지 등 jsp페이지에서 필요로 하는
정보를 설정
include : jsp페이지의 특정 영역에 다른 문서를 포함시킴
2) 스크립트 : 스크립트릿, 표현식, 선언부
문서의 내용을 동적으로 생성하기 위해 사용
스크립트 요소를 사용하면 사용자가 폼에 입력한 정보를
데이터베이스에 저장할 수 있음
또한 스크립트를 사용하면 자바가 제공하는 다양한 기능 사용 가능
표현식 : 값을 출력
구문 - <%=값%>
스크립트릿 : 자바 코드를 실행
<%자바코드%>
선언부 : 자바 메소드를 만듬
<%! public 리턴타입 메소드 이름 (파라미터 목록) {
자바코드;
return 값;
} %>
3) 표현언어
4) 기본객체
5) 정적 데이터
6) 표준 액션 태그
7) 커스텀 태그와 표준 태그 라이브러리(JSTL)