데이터 저장 >> | 데이터 처리 >> | 데이터 출력 |
1. 변수(데이터 1개) 2. 배열(데이터 여러 개, 같은 타입) 3. 클래스(데이터 여러 개, 다른 타입) |
연산자, 제어문 활용 ↓ 메소드 |
Application(dos창)→Windows Web Application mobile Application |
데이터 저장공간
1. 메소드 영역: static메소드 저장
2. 스택: 자체에서 메모리 관리 수행. {블럭} 내에서만 저장되며,
지역변수, 매개변수 등이 저장됨. LIFO(Last-In, First-Out) 구조.
3. 힙: 사용자가 관리하는 공간. 클래스가 저장된다.
null, 0 등으로 초기화 된 값은 가비지콜렉터가 관리한다.
#클래스
1. 정의 및 종류
- 클래스: 객체를 생성하는데 사용되는 틀. 객체의 모든 속성과 기능이 정의되어 있음(≒이데아)
서로 관련된 변수들을 정의하고, 이들에 대한 작업을 수행하는 함수들을 함께 정의한 것.
- 객체(인스턴스): 클래스의 하위개념으로, 실존하는 각각의 개체(≒사물)
ex) 클래스: 야구선수, 객체: 이정후, 김하성 등
- 클래스 종류
1)일반클래스
형식) public class className{
멤버변수, 공유변수
생성자
메소드
}
i)데이터형으로만 사용→ 필요한 데이터 모아서 관리(캡슐화): 데이터 은닉화(private), 메소드 통해 접근(getter/setter)
ii)액션→ 기능만 가지고 있음(메소드)
iii) 변수+메소드 혼합
2)추상클래스: 단일상속, 공통의 속성을 지닌 미완성 클래스. 구현 안 된/된 메소드 모두 있음
여러 개 클래스에 공통으로 적용되는 메소드가 있는 경우 추상클래스 제작
또는 경우의 수가 많아 메소드 구현이 어려운 경우(ex. 버튼 클릭)
인스턴스는 생성 불가 → 반드시 구현된 클래스를 통해 메모리 할당(A a=new B;)
기본틀이 제작되어 구현이 쉬움. 요구사항 분석이 많이 사용
형식) public abstract class className{
멤버변수, 공유변수
구현 안 된 메소드 → 미완성 클래스
구현 된 메소드
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 |
package com.sist.abs;
abstract class 도형{ //추상클래스: 상속받은 메소드에서 구현
public abstract void draw(); //추상메소드
public void color() {
System.out.println("검정색으로 그림 그린다");
}
}
class 삼각형 extends 도형{
public void draw(){
System.out.println("삼각형 그린다");//추상메소드 구현(오버라이딩)
}
//추상클래스의 일반 메소드 정의 변경: 오버라이딩(재정의)
@Override
public void color(){
System.out.println("빨간색으로 그림 그린다");
}
}
class 사각형 extends 도형{
@Override
public void draw(){
System.out.println("사각형 그린다");
}
}
public class MainClass{
public static void main(String[] args){
도형 g=new 삼각형(); //g로 모두 제어 가능
g.color();
g.draw();
g=new 사각형();
g.color();
g.draw();
//주의: 도형 a=new 도형(); => 에러,
// ∵구현되지 않은 클래스에서 메모리 할당 불가 }
}
//결과
빨간색으로 그림 그린다
삼각형 그린다
검정색으로 그림 그린다
사각형 그린다
|
cs |
3)인터페이스: 추상클래스가 확장된 형태, 다중상속 가능.
여러 개의 클래스를 묶어서 관리(관계없는 클래스들에게 관계를 맺어줌) → 웹프로그램
형식) public interface interfaceName{
멤버변수, 공유변수: 상수형 변수(public final static, private, protected 사용금지)
only 구현 안 된 메소드
***단, JDK1.8이상부터 default로 구현된 메소드 작성가능
***실무에서 주로 JDK1.7, 오라클 11g, 스프링 3.7~3.8 사용 → 다 알아둬야함
}
- 인터페이스에 선언된 모든 메소드: public abstract
ex) public interface B{
public abstract(생략) void display( );
}
- 인터페이스에 선언된 모든 변수: public final
int a; ==JVM==> public static final(생략) int a;
- 인터페이스는 상위클래스이므로 상속을 내려야 사용 가능 (다중상속 가능)
interface >> interface: extends
interface >> class: implements
ex1) interface A, interface B, class C가 있을 때
class C implements A,B (O)
ex2) interface A, class B, class C가 있을 때
class C extends B implements A (O)
- 구현이 안 된 메소드는 반드시 구현해서 사용해야 함(빨간 밑줄 나옴)
ex) interface A{ //주의: 모든 메소드는 pulic 메소드!!! → 접근지정어 주의!(∵축소 불가능)
(public abstract) void aaa( );
}
class B implements A{
public void aaa( ){ } //블럭이 열고 닫히는 순간 구현.
}
*추상클래스, 인터페이스: 여러 개의 클래스를 모아서 관리; 서로 다른 클래스 연결해서 사용
→결합성이 낮은 프로그램
***결합성: 클래스 수정할 때 다른 클래스에 영향을 주는가?(낮을수록 좋음)
응집성: 한 개의 기능 수행할 수 있는 능력(메소드)
((인터페이스 예시))
1. Container.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
package com.sist.inter;
import java.util.*;
//인터페이스: 여러 개의 클래스를 묶어서 인터페이스로 관리
interface Connection{
public void connection();
}
class 오라클 implements Connection{
public void connection() {
System.out.println("오라클 연결");
}
}
class DB2 implements Connection{
public void connection() {
System.out.println("DB2 연결");
}
}
class MSSQL implements Connection{
public void connection() {
System.out.println("MSSQL 연결");
}
}
class MySQL implements Connection{
public void connection() {
System.out.println("MySQl 연결");
}
}
public class Container{
Map map=new HashMap();
public Container() {
map.put("oracle",new 오라클());
map.put("db2",new DB2());
map.put("mssql",new MSSQL());
map.put("mysql",new MySQL());
}
public Connection getBean(String key) {
return (Connection)map.get(key);
}
}
|
cs |
2. MainClass.java
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package com.sist.inter;
//클래스 여러 개를 묶어서 관리 가능: 인터페이스의 목적
public class MainClass{
public static void main(String[] args){
Container c=new Container();
Connection conn=c.getBean("oracle");
conn.connection();
conn=c.getBean("mssql");
conn.connection();
}
}
|
cs |
*** 자바 지원 인터페이스
1. Window(javax.swing)
인터페이스 | 구현되는 메소드 |
ActionListener : 버튼, 메뉴, text에서 엔터 |
actionPerformed() |
MouseListener : 마우스 관련, JTable / JTree / JLabel |
mouseClicked() |
MouseMotionListener |
mouseMoved() |
KeyListener : 키보드 관련 |
keyPressed() |
FocusListener | focusLost() focusGained() |
ItemListener : Combobox / JList |
itemStateChanged() |
2. 데이터베이스 연결★★
- Connection
- Statement
- ResultSet
4)내부클래스: 클래스 안의 클래스
-멤버클래스: 두 개이상의 클래스에서 한 개의 데이터 공유할 경우(static 사용도 가능은 함)
→네트워크 프로그램 / 쓰레드 프로그램 / 빅데이터, AI(수집한 자료 실시간 분석)
class A{
a, b, c → 자료 수집
class B{ //클래스 안의 클래스: 클래스 A의 자료를 모두 쓰고 싶을 때
(a, b, c 갖다쓸 수 있음) → 수집한 자료 분석
}
}
class C{
B b=new B(); → 불가
A.B b;
}
-지역클래스
class B{
public void display( ){
}
}
-익명클래스: 상속 없이 오버라이딩(→ 쓰레드/윈도우/네트워크 → 웹)
class A{
}
class B {
}
class C extends A(
B b=new B( ){
오버라이딩(재정의, 추가) 가능
}
}
5)종단클래스: 확장 불가(ex. String, Math, System)
ex) final class A
2. 클래스 구성요소
멤버/공유변수 설정
메소드 → 묶어서 재사용 → 객체지향 프로그램
생성자
(모두 있을 필요 없음, 필요한 것만 생성.
단, Main 메소드는 반드시 필요!)
3. 저장방법
1)클래스 내 변수 저장
종류 |
전역변수 | 일반변수 |
class 전체에 적용(다른 class에서도 사용 가능) - 멤버변수(=인스턴스 변수) : 따로따로 저장, 변경시 자기만 바뀜. ex) 각 메뉴이름 등 scan.nextInt( ) - 공유변수(=공통변수, 클래스변수) : static~, 자동저장, 1개만 저장 가능, 변경시 전체변경되므로 주의!! ex) 홈페이지 로고 Math.random( ) |
메모리 자체에서 관리({ } 내에서만 사용) - 지역변수 - 매개변수 |
|
저장방법 | class Saram{ →12byte(멤버변수 3개) String name; int age; String sex; static String 학원; →다른 곳에 저장 } |
데이터형 변수명; |
class basePlayer{ →12byte(String 4byte*2+int 4byte*1)
String name;
int age;
String sex;
static String 구단명; →전역변수: 다른 영역에 저장
}
2)객체 생성방법: new 사용해서 각각의 객체 생성.
***new: 저장크기의 메모리를 확보해 새로운 공간을 생성함.
String a=null, double b=0.0, int c=0 등으로 멤버변수를 초기화함.
basePlayer 이정후=new basePlayer( );
basePlayer 김하성=new basePlayer( );
① ② ③
①클래스: 사용자 정의 데이터형. 기본 데이터형과 비슷하게 사용(형변환도 있음)
②객체: 클래스의 속성과 기능을 지닌 각 개체
③생성자: 초기값 부여. 매개변수를 통해 외부에서 값을 불러올 수 있음.
***초기화 방법: default, 명시적 초기화, 초기화 블럭, 생성자
-초기화 블럭: 자동처리, File을 읽어서 데이터 저장할 때
-생성자: 사용자 입력값을 받을 때
3)주소 접근 연산자(참조변수.멤버변수(필드))
***참조변수: 객체의 주소를 저장하는 변수
scan.nextInt( ) :멤버변수의 경우는 객체명
Math.random( ) : static변수의 경우에는 클래스명
4) 생성자: 메소드명이 클래스명과 동일하고, 리턴 자료형이 없는 메소드.
인스턴스가 생성될 때 호출되는 인스턴스 초기화 메소드로, 인스턴스 변수의 초기화 작업에 사용.
***주의: 인스턴스의 생성은 new의 역할!!
- 클래스에 생성자가 정의되지 않은 경우 JVM이 자동으로 기본생성자(클래스명( ){ }) 추가.
- 매개변수가 있는 생성자의 경우 인스턴스 생성 후 별도의 초기화가 필요없기 때문에 유용.
5) 오버로딩: 한 클래스 내에 이름은 같지만 매개변수의 개수나 타입이 다른 경우.
매개변수에 의해서만 구분, 리턴값은 전혀 고려되지 않음.
장점: 근본적으로 같은 기능을 하는 메소드들을 기억하기 쉽고 짧게 명명할 수 있음. (ex. println)
'Java > Java 이론 정리' 카테고리의 다른 글
[Java] 예외처리 (1) | 2020.07.20 |
---|---|
[Java] 21~22일차: 객체지향 3대요소_캡슐화, 상속, 다형성 (0) | 2020.07.13 |
[Java] 16~17일차: 메소드 (0) | 2020.07.06 |
[Java] 13일차: 문자열 (0) | 2020.07.01 |
[Java] 기본문법 총정리 (0) | 2020.06.29 |
댓글