간단하게 jstl 태그 2개만알아보겠습니다.

C:forEach

<c:forEach var =”I” items=”${members}” begin=”0” varStatus=”status” end =”5”>
    Index : ${status.index} /
    count : ${status.count} <br>
    name : ${i.name} <br>
    email : ${i.email}<br>
</c:forEach>

forEach 문은 Var, items, begin, varStatus, end.. 총 5개의 속성들이 있습니다.

i라는 변수는 반복문이 한번 수행 될때마다 바뀌는변수가 되겠다.

그리고 items 라는 속성은 컬렉션 객체가 된다.

예를 간단히 들자면 리스트, 배열정도가 있겠다.

그리고 begin 은 시작값을 나타냅니다.

varStatus 은 반복문의 상태값을 가지는 변수인데 쉽게말해

forEach문의 상태정보를 담고있는 변수라고 알고있으면 되겠다,


C:forTokens
<c:forTokens>
<c:forTokens items = “123-456-789” delims =”-” var =”sel”>
   ${sel}<br>
</c:forTokens>

여기서 items 은 123-456-789라고했는데 일종의 소스이다

그리고 중요한건 delims 라는 건데 얘는 일종의 약속이다.

여기선 – 이 등장할때마다 띄어쓰기를 해달라고 요청을 했다.
그결과는 sel 라는 변수로 지정했다.

'JSTL' 카테고리의 다른 글

JSTL 개행  (0) 2021.01.04

안녕하세요 입니다. 
오늘은 상속부터 import 를 설명해드리겠습니다. 
부족한점은 말씀해주시면 고치겠습니다. 



1. 상속  
 - 상속이란 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 
상속을 통해서 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기에 코드의 추가 및 변경이 매우 용이하다. 

- 상속은 어떻게하느냐 ?  
아주간단하다 작성하고자하는 클래스 이름뒤에 상속받고자 하는 클래스 이름을 키워드 
extends 와 함께 서주기만 하면된다. 

~~~~ 
class Child extends Parest{ 

내용 


~~~~ 

예를들어 보았습니다. 간단하죠 ?? 
그럼다음으로 ~ 

이두클래스는 서로 상속 관계에 있다고 하며, 상속해주는 '클래스를 조상 '클래스라고하며 
상속 받는 클래스를 '자손 클래스' 라고한다. 

- 조상클래스 : 부모클래스, 상위 클래스, 기반클래스  라고 불린다. 
- 자손 클래스 : 자식클래스, 하위 클래스, 파생된 클래스 라고 불린다. 

---- 
- 생성자와 초기화 블럭은 상속되지 않는다. 맴버만 상속된다. 
- 자손 클래스의 맴버 개수는 조상 클래스보다 항상 같거나 많다. 
---- 

ex) 
~~~~ 
package 삼월이십육일; 

class Tv { 
boolean power ; //전원상태(on/off) 
int channel; 

void power() { power = !power;} 
void channelUp() { ++channel;} 
void channelDown() {-- channel;} 


class CaptionTv extends Tv{ 
boolean caption; 
void displayCaption(String text) { 
if(caption){ 
System.out.println(text); 



class CaptionTvTest { 
public static void main(String args[]) { 
CaptionTv ctv = new CaptionTv(); 
ctv.channel = 10; 
ctv.channelUp(); 
System.out.println(ctv.channel); 
ctv.displayCaption("Hello world1"); 
ctv.caption = true; 
ctv.displayCaption("Hello world1"); 





~~~~ 
TV 클래로부터 상속받고 기능을 추가하여 CaptionTv 클래스를 작성하였다. 
맴버변수 caption은 캡션 기능의 상태를 저장하기위한  boolean 형 변수이고,  
displayCaption(String text) 은 매개변수로넘겨받은 문자열을 캡션이 켜져 있는경우 에만  
화면에 출력한다. 

1.2 클래스간의 관계 - 포함관계 
- 지금까지 상속을 통해 클래스 간에 관계를 맺어주고 클래스를 재사용하는 방법에 대해서 
알아보았습니다.  
상속 이외에도 클래스를 재사용하는 또다른 방법이 있는데 그것은 클래스 간에  
 포함 관계를 맺어주는 것입니다. 클래스 간의 포함관계를 맺어주는 것은  
한 클래스의 맴버변수로다른 클래스 타입의 참조변수를 선언하는 것을 뜻한다. 

ex) 
~~~~ 

class Point { 
int x; 
int y; 



class Cicle{ -------> class Cicle{ 
int x;              -------> Point c = new Point();         
int y;              -------> int r; 
int r;               -------> } 

~~~~ 
이런식으로 변경할수 있습니다. 

1.3 클래스 간의 관계 결정하기 

- 클래스를 작성하는데 있어서 상속관계를 맺어줄 것인지 포함관계를 맺어줄  
것인지 결정하는 것은 때때로 혼돈스러울수 있다. 
~~~~ 
class Cicle { 
Point c = new Point(); 
int r; 




class Cicle extends Point { 
int r; 

~~~~ 
두경우를 비교해 보면 cicle클래스를 작성하는데 있어서 Point클래스를 포함시키거나 
상속받도록 하는 것은 결과적으로 별 차이가 없어 보인다. 
 그럴때는 이렇게 해보자 


- 상속관계 : ~은 ~이다 (is ~a) 
- 포함관계 : ~은 ~ 을 가지고 있다.(jas~ a) 

몇가지를 더 예르 들면, Car 클래스와 SportsCar 클래스는 SportsCar는 Car 이다 
와같이 문장을 만드는것이 더 옳기 때문에 두클래스는 Car 클래스를 조상으로  
하는 상속 관계를 맺어 주어야 한다. 

Card 클래스와 Deck 클래스는 Deck는 Card 를 가지고 있다. 
와같이 문장을 만드는 것이 더 옳기 때문에 Deck 클래스에 Card클래스를  
포함시켜야한다. 

1.4 단일상속 
- 다른 객체지향언어인 c++ 에서는 여러 조상클래스로부터 상속받는 것이 가능한 
'다중상속' 을 허용하지만 자바에서는 단일 상속만을허용한다. 
그래서 하나 이상의 클래스로부터 상속을 받을 수 없다. 
예를들면 TV 클래스와 VCR 클래스가 있을때 이 두클래스로부터 상속을 받는 
TVCR 클래스는 작성할 수 없다. 
그래서 TVCR 클래스는 조상클래스로 TV 클래스와 VCR 클래스 중 
하난만 선택해야 한다. 

~~~~ 
/*package 삼월이십육일; 



class Tv { 
boolean power ; 
int channel; 

void power() { power = !power;} 
void channelUp() { ++channel;} 
void channelDown() { --channel;} 


class VCR{ 
boolean power; 
int counter = 0; 
void power() { power = !power} 
void play()  { 내용생략}  
void play(){ 내용생략} 
void stop(){ 내용생략} 
void rew(){ 내용생략} 
void ff(){ 내용생략} 


class TVCR extends Tv { 
VCR vcr = new VCR(); 
int counter = vcr.counter; 

void play() { 
vcr.play(); 

void stop(){ 
vcr.stop(); 

void rew() { 
vcr.rew(); 

void ff() { 
vcr.ff(); 



~~~~ 
이런식으로 단일 상속을 하실수 있습니다. 

1.5 Object 클래스 - 모든 클래스의 조상 

-  Object 클래스는 모든 클래스 상속계층도의 최상위에있는조상클래스이다. 
다른 클래스로 부터 상속 받지 않는 모든 클래스 들은 자동적으로  
Object 클래스로부터 상속받게 함으로써 이것을 가능하게한다. 

여기는 간단하게 하고 넘어가겠습니다.~ 


2.1 오버라이딩  
 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것을 오버라이딩이라고한다. 
상속받은 메서드를 그래도 사용하기도 하지만, 자손 클래스를 자신에 맞게 
변경해야하는 경우 가 많다. 이럴 때 조상의 메서드를 오버라이딩한다. 

- 오버라이딩 조건 
----  
자손클래스에서 오버라이딩하는 메서드는 조상클래스 메서드와  
     -  이름이 같아야한다. 
     -  매개변수가 같아야 한다. 
     -  반환타입이 같아야 한다. 
---- 

- 오버로딩 VS 오버라이딩 

오버로딩과 오버라이딩은 서로 호동하기 쉽지만 사실 그 차이는 명백하다. 
오버로딩은 기존에 없는 새로운메서드를 추가하는 것이고, 
오버라이딩은 조상으로부터 상속받은 메서드의 내용을 변경하는 것이다. 

2.2 super 

super 은 자손 클래스에서 조상 클래스로부터 상속받은 맴버를 참조하는 데 사용되는 
참조변수이다.  

~~~~ 
package 삼월이십육일; 

public class SuperTest { 
public static void main(String args[]) { 
Child c = new Child(); 
c.method(); 



class Parent{ 
int x= 10; 

class Child extends Parent { 
void method() { 
System.out.println("x :" +x); 
System.out.println("this.x :" + this.x); 
System.out.println("super.x:" + super.x); 


//이 경우 x, this.x , super.x 모두 같은 변수를 의미하므로모두 같은 값이 출력되었다. 
~~~~ 

ps - Object클래스를 제외한 모든 클래스의 생성자 첫 줄에는 생성자,this() 또는 
super(), 를 호출해야한다. 그렇지 않으면 컴파일러가 자동적으로  
super().;를 생성자의 첫 줄에 삽입한다. 

2.3 import 선언 

일반적인 소스파일 의 구성은 다음 순서로 되어있다. 

1. package문  
2. import 문 
3. 클래스 선언 

~~~~ 
package 삼월이십육일; 

import java.util.Date; 
import java.text.SimpleDateFormat; 

public class ImportTest { 
public static void main(String args[]) { 
Date today = new Date(); 

SimpleDateFormat date = new SimpleDateFormat("yyyy/MM/dd"); 
SimpleDateFormat time = new SimpleDateFormat("hh:mm:ss a"); 

System.out.println("오늘 날짜는 "+date.format(today)); 
System.out.println("오늘시간은 " +time.format(today)); 



~~~~ 


이상으로 길고 길었던 10번째 개발일지를 마치겠습니다 
긴글인데 봐주신분들  진심으로 감사드립니다.

'Java' 카테고리의 다른 글

변수  (0) 2018.09.11
Java 실행 구조  (0) 2018.09.10
9. 아홉번째 개발 공부  (0) 2018.03.28
8. 여덞번째 개발공부  (0) 2018.03.28
7. 일곱번째 개발 공부  (0) 2018.03.28

안녕하세요 오늘은 9번째 개발일지  
생성자 부터 변수까지 알아보겠습니다. 

1.생성자란? 

- 생선자는 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드' 이다. 
따라서 인스턴스변수의 초기화 작업에 주로 사용되며 , 인스턴스 생성 시에  
실행되어야 할 작업을 위해서도 사용된다. 


-생성자의 이름은 클래스의 이름과 같아야한다 
-생성자는 리턴 값이 없다. 

 연산자 new 가 인스턴스를 생성하는거지 생성자가 인스턴스를생성하는 것이 아니다. 

1-1. 기본생성자 

- 생성자를 모르고도 프로그래밍을 해 왔지만 , 사실은 모든 클래스에는 반드시 하나 이상의 
생성자가 정의 되어있어야한다. 
하지만 클래스에 생성자 정의를 하지않고도 인스턴스를 생성할 수 있었던 이유는 
 기본생성자 덕분이다. 

- 컴파일러가 자동적으로 기본 생성자를 추가해주는 경우는 클래스 내에 생성자가  
하나도 없을때 이다. 만약 하나라도 있을시에는 생성 되지 않는다. 

1-2. 생성자에서 다른 생성자 호출하기 -this(), this 

-같은 클래스의 맴버들 간에 서로 호출할 수 있는 것처럼 생성자 간에도서로 호출이 가능하다. 
하지만 밑에 두가지 조건을 충족 시켜야한다. 

-  생성자의 이름으로 클래스이름 대신 this 를 사용한다. 
-  한 생성자에서 다른생성자를  호출할 대는 반드시 첫 줄에서만 호출이 가능하다. 

~~~~ 
package 삼월이십이일; 

class Car{ 
String color; 
String gearType ; 
int door; 

Car(){ 
this("white", "auto", 4); 

Car(String color) { 
this(color,"auto", 4); 

Car(String color, String gearType, int door){ 
this.color = color; 
this.gearType = gearType; 
this.door = door; 



class CarTest2{ 
public static void main(String args[]){ 
Car c1 = new Car(); 
Car c2 = new Car("blue"); 

System.out.println("c1의 color =" + c1.color +", gear Type=" + c1.gearType +"door="+c1.door); 
System.out.println("c2의 color =" + c2.color +", gear Type=" + c2.gearType +"door="+c2.door); 


~~~~ 

생성자 Car() 에서 또다른 생성자 Car(String color, String gearType, int door)를 호출하였다.  
이처럼 생성자간의 호출에서는  생성자의이름대신 'this ' 를 사용해야만 하므로 
'Car' eotls 'this'를 사용했다. 그리고 Car() 의 첫째 줄에서 호출하였다는점을 
눈여겨 보세요. 

this -  인스턴스 자신을 가르키는 참조변수, 인스턴스의 주소가 저장되어 있다. 
모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재한다. 

this(), this(매개변수) -  생성자, 같은 클래스의 다른 생성자를 호출할 때 사용한다 


2.변수의 초기화 

-  변수를 선언하고 처음으로 값을 저장하는 것을 '변수의 초기화' 라고한다.  
변수의 초기화는 경우에 따라서  필수적 이기도 하고 선택적이기도 하지만 , 
가능하면 선언과 동시에 적절히 한값으로 초기화하는것이 바람직하다. 

2-1. 명시적 초기화 
-  변수를 선언과 동시에 초기화 하는것을 명시적 초기화라고 한다.  
-  명시적 초기화가 간단하고 명료하긴 하지만 , 보다 복잡한 초기화 작업이  
필요할 때는 '초기화 블럭' 또는 생성자를 사용해야 한다. 

2-2. 초기화 블럭 
-  초기화 블럭에는 '클래스 초기화 블럭' 과 '인스턴스 초기화 블럭' 두가지 
종류가 있다. 클래스 초기화 블럭은 클래스변수의 초기화에 사용되고 ,  
인스턴스 초기화 블럭은 인스턴스 변수의 초기화에 사용된다. 

-  클래스 초기화 블럭 = 클래스변수의 복잡한 초기화에 사용된다. 
-  인스턴스 초기화 블럭 = 인스턴스변수의 복잡한 초기화에 사용된다. 


-  초기화 블럭을 작성하려면, 인스턴스 초기화 블럭은 단순히 클래스 내에 
블럭 {} 을 만들고 그안에 코드를 작성하기만 하면된다. 
그리고 클래스 초기화 블럭은 인스턴스 초기화 블럭앞에 단순히 static를 
덧붙이기만 하면된다. 

~~~~ 
class InitBlock { 
         static { /* 클래스 초기화 블럭입니다. */} 

{/* 인스턴스 초기화 블럭입니다 */} 

~~~~ 

-  클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될때 한번만 수행되며, 
인스턴스 초기화 블럭은 생성자와 같이 인스턴스를 생성할 때마다 수행한다. 

-   생성자보다인스턴스 초기화 블럭이 먼저 수행된다. 

2-3. 맴버변수의 초기화 시기와 순수 


클래스 변수의 초기화 시점  
-  클래스가 처음 로딩될 때 단 한번 초기화 된다. 

인스턴스변수의 초기화 시점  
-  인스턴스가 생성될 때마다 각 인스턴스별로 초기화가 이루어진다. 

클래스 변수의 초기화 순서 
-  기본값 >>> 명시적초기화 >>> 클래스 초기화 블럭 

인스턴스변수의 초기화 순서  
-  기본값 >>> 명시적초기화 >>> 인스턴스 초기화 블럭 >>> 생성자 



'Java' 카테고리의 다른 글

Java 실행 구조  (0) 2018.09.10
10. 열번째 개발 공부  (0) 2018.03.28
8. 여덞번째 개발공부  (0) 2018.03.28
7. 일곱번째 개발 공부  (0) 2018.03.28
6.여섯번째 개발 공부  (0) 2018.03.28

+ Recent posts