자바 clone 보충 질문입니다

익명 사용자의 이미지

clone 메소드를 오버라이딩 해야하는 이유에 대해서 공부중인데요.

소스파일 : InstanceCloning.java

class Point implements Cloneable
{
      private int xPos;
      private int yPos;
 
      public Point(int x, int y)
      {
           xPos=x;
           yPos=y;
      }
      public void showPosition()
      {
            System.out.printf("[%d, %d]", xPos, yPos);
            System.out.println("");
      }
 
//   public Object clone() throws CloneNotSupportedException     //16행
//   {
//        return super.clone();
// } //19행
}
 
class InstanceCloning
{ 
      public static void main(String[] args)
      {
            Point org=new Point(3, 5);
            Point cpy;
 
            try
            {
cpy=(Point)org.clone(); //31행
                  org.showPosition();
                  cpy.showPosition();
            }
            catch(CloneNotSupportedException e)
            {
                  e.printStackTrace();
            }
      }
}

16행~19행을 주석 처리하고 컴파일하면 다음과 같은 에러 메세지가 나타납니다.(주석처리하지 않으면 에러 없음)

InstanceCloning.java:31: error: clone() has protected access in Object
cpy=(Point)org.clone();
                    ^
1 error

Point 클래스와 InstanceCloninig 클래스는 모두다 clone메소드가 정의된 Object 클래스를 간접상속하니까 오버라이딩 하지않아도 clone 메소드를 호출할 수 있는거 아닌가요? 왜 컴파일 에러가 나타나는지 이해가 안갑니다.

왜냐하면 아래 소스파일도 위와 비슷한 상황인데 컴파일 에러가 나타나지 않거던요.
소스파일 : Test.java

class Object
{
      protected void showInfo()
      {
           System.out.println("Object");
      }
}
 
class BBB extends Object
{ 
//   protected void showInfo()
//   {
//        System.out.println("BBB");  
//        super.showInfo();
//   }
} 
 
class Test extends Object
{
      public static void main(String[] args)
     {
           BBB instBBB=new BBB();
           instBBB.showInfo();  
     }
}

제가 뭘 잘못알고 있는거 같은데 자세히 설명 좀 해주시면 정말 감사하겠습니다.

익명 사용자의 이미지

두 상황은 다릅니다. InstanceCloning는 Point를 상속하고 있지 않지만, Test는 Object를 상속하고 있잖아요. 클래스 X의 멤버중 protected로 선언된 것들은 X의 하위 클래스에 정의된 멤버 함수에서만 접근 가능합니다.

컴파일 에러를 이해할 수 없다고 설명하시는 부분이 아주 모호하군요. "간접 상속"이라는 것이 무엇을 말하는 것이지요? 용어는 정확히 사용해야합니다. 말을 정확하게 해보려고 시도해보세요. 그러는 와중에 모순을 깨닫고, 논리적이 되고, 이해가 되는 겁니다.

그리고 java.lang.Object와 혼동의 여지가 있으면 Object라는 클래스 이름은 사용하지 않는 것이 좋습니다.

익명 사용자의 이미지

"그리고 java.lang.Object와 혼동의 여지가 있으면 Object라는 클래스 이름은 사용하지 않는 것이 좋습니다."

오타가 있었네요. 의미가 달라지는 오타여서 정정합니다.

"그리고 java.lang.Object와 혼동의 여지가 있으니 Object라는 클래스 이름은 사용하지 않는 것이 좋습니다."

11의 이미지

저기서 메인은 object를 상속하지않은채 obj클래스의 매서드를 사용하는 걸 예로들어야되요 그때는 상속은 아니지만 bbb인스턴스를 만들었으므로 그 상위클래스의 매서드를 사용할수 있는 걸 보여주려고 했습니다 또 1벙 질문은 object를 모든클래스가 상속 하므로 다른클래스에서 clone을 오버라이딩 하지않고 그냥 메인에서도 한 클래스를 호출하여 오버라이딩 되지않은 clone을 사용할수있지 않냐는거죠 한 소스파일은 디폴트패키지에 묶여있으니까요

익명 사용자의 이미지

#1. 지금 protected인 멤버는 같은 패키지안에서 접근가능하다고 잘못 알고 계신 것 같습니다. 그렇지 않습니다. access qualifier (즉 public,private,protected 키워드)가 없는 경우에 같은 패키지에서 접근 가능하고 다른 패키지에서 접근 불가능합니다. protected 멤버는 하위클래스에서만 접근 가능합니다.

#2. object와 Object는 다른겁니다. 혼용하지 마세요.

#3. 상속과 오버라이딩에 대해서 많은 오개념을 가지고 계신 것 같습니다. 스스로 전혀 모른다고 생각하시고 개념을 다시 잡아보세요.

#4. "object를 모든클래스가 상속 하므로 다른클래스에서 clone을 오버라이딩 하지않고 그냥 메인에서도 한 클래스를 호출하여 오버라이딩 되지않은 clone을 사용할수있지 않냐는거죠" 이게 무슨 뜻인가요? 본인은 남이 이런 문장을 쓰면 이해할 수 있을 것 같으신지요? 다시 말씀드리지만 말을 정확하게하려고 노력하세요. 그럴지 않으면 공부할 때에 지금처럼 오개념을 가지게되기 쉽습니다.

45666의 이미지

1. public은 패키지 관련없이 접근 가능하지 않나요 public이 없는경우에 같은 패키지에 접근 가능하다는게 이해가 안가네요 / 그리고 protected는 동일패키지이거나 클래스내부 ,상속받은 클래스에 경우 접근 가능하다고 알고있습니다.
2.간단하게 쓰다 오해하신거 같아요
3. 자바를 처음 공부하는 학생입니다 상속은 상위 멤버를 하위클래스에게 주는것으로 알고있습니다. 그래서 private를 제외하곤 직접 접근 가능하다고 알고있고 오버라이딩은 상속에서 같은 이름의 메서드를 재정의 하는 것으로 알고있습니다.
4.다시 설명 드리겠습니다. 말씀 써놓으신 그대로입니다. 모든 class가 Object를 상속하고 있다고 배웠습니다 여기서 clone은 Object라고 배웠습니다. 여기서 A라는 클래스에서 clone을 오버라이딩 하지않아도 Object를 상속하는 상태이니까 따로 재정의 하지않고
다른 클래스의 메인에서 A를 인스턴스화 시키고
A aa = new A();
A bb;
bb = (A)aa.clone(); 여기서 A클래스는 clone을 오버라이딩 하지않은상태
이렇게 클론을 사용할수 있는거 아니냐는 소리입니다.
책에는 clone이 protected로 정의 되어있기 떄문에 public으로 바꿔줘야 호출이 가능하다고 있어서 질문드린겁니다
다른 사람한테 질문했을때는 답은 몰라도 잘이해해서 문제없을거라 생각하고 올렸습니다

추가로의 이미지


예를 들어서 이런코드가 있을때 16 ~ 19행을 주석처리한담에 31행을 직접적으로 접근해서 처리하면 안되더군요
Object에게 상속을 받으면 따로 재정의하지 않아도 매서드를 사용할수 있어야 되는것 아닌가요?
protect가 다른패키지(외부에서 접근)에서 접근하더라도 상속 관계이면 사용 할수 있는거 아닌가요

package <a href="http://www.test.com" rel="nofollow">www.test.com</a>;
 
class Point implements Cloneable
{
      private int xPos;
      private int yPos;
 
      public Point(int x, int y)
      {
           xPos=x;
           yPos=y;
      }
      public void showPosition()
      {
            System.out.printf("[%d, %d]", xPos, yPos);
            System.out.println("");
      }
 
//   public Object clone() throws CloneNotSupportedException     //16행
//   {
//        return super.clone();
// } //19행
}
 
class InstanceCloning 
{ 
      public static void main(String[] args)
      {
            Point org=new Point(3, 5);
            Point cpy;
 
            try
            {
            	  cpy=(Point)org.clone(); //31행
                  org.showPosition();
                  cpy.showPosition();
            }
            catch(CloneNotSupportedException e)
            {
                  e.printStackTrace();
            }
      }
}
익명 사용자의 이미지

마지막 글에 댓글로 쓰면 너비가 좁아져서 읽기 힘들 것 같아서 본문에 직접 댓글로 답니다.

> 1. public은 패키지 관련없이 접근 가능하지 않나요 public이 없는경우에 같은 패키지에 접근 가능하다는게 이해가 안가네요 / 그리고 protected는 동일패키지이거나 클래스내부 ,상속받은 클래스에 경우 접근 가능하다고 알고있습니다.

제가 보기에 질문자님은 글을 "잘" 읽지 않습니다. 말도 "잘" 하지 않구요. 프로그래밍을 "잘" 하려면 이거 중요합니다. 제가 쓴 아래 문장을 잘 읽어보세요.

"access qualifier (즉 public,private,protected 키워드)가 없는 경우에 같은 패키지에서 접근 가능하고 다른 패키지에서 접근 불가능합니다."

이 문장을 "public이 없는 경우에 같은 패키지에 접근 가능하다는게"라고 이해하셨어요. 의미가 완전히 달라졌지요. 두 가지 면에서 달라졌습니다. 1) public이 없는 것이 아니고 public, private, protected 어느 것도 없어야 합니다. 2) "같은 패키지에서 접근 가능하고 다른 패키지에서 접근 불가능한" 것과 그냥 "같은 패키지에 접근 가능하다는 것"도 다르지요. 아마도 수업을 듣거나 책을 읽을 때에 지금처럼 원래 의미와는 전혀 다른 뜻으로 이해하셨을 가능성이 커보입니다. 다시 강조하지만 말을 정확하게 하려고 노력하세요. 그러면 듣고 읽는 것도 정확해집니다.

> 2.간단하게 쓰다 오해하신거 같아요

간단하게 써도 "틀리게" 쓰면 안됩니다. 자바를 공부하면서도 object와 Object가 다르다는 것을 인지하지 못하고 쓴 것이지요. "Object"를 써야할 곳에 "object"를 쓰면 의미가 달라지거나 그냥 말이 안됩니다. 다시 언어 사용의 문제입니다.

> 코드를 올리신 추가 질문

주석 처리한 부분들을 다시 살렸을 때에 컴파일 에러가 없는 것은 아마 이해하실 것 같습니다. 그러면 16행의 public을 protected로 바꿔서 컴파일해보세요. 제 생각에는 아마 질문자께서는 이 경우에 컴파일이 안 될 거라고 생각하실 것 같습니다만, 실제로는 여전히 컴파일이 잘 될 겁니다. 올리신 코드에서 InstanceCloning의 메소드는 Point의 protected 멤버에 접근할 수 있습니다. 말씀하신대로 같은 패키지에 정의되어 있으니까요. 그런데 Point는 clone이라는 protected 메소드를 가지고 있지 않습니다. 주석 처리한 부분을 살리면 Point가 clone이라는 멤버를 갖게 되는 거지요.

원래 코드의 31행에서 호출하는 clone은 Point의 clone이 아니고, Object의 clone입니다. 그런데 Object는 어느 패키지에 속하지요? java.lang입니다. 자 그러면 이제 컴파일 안되던 원래 소스 코드의 첫 줄을 package java.lang; 으로 바꿔서 컴파일해보세요. 뭐가 문제였는지 이해가 되시리라 믿습니다.

그리고 Point.clone의 리턴 타입은 Object가 아니라 Point이어야합니다. Point.clone의 구현이 super.clone을 리턴하는 것도 그러면 안되겠지요.

익명 사용자의 이미지

> "지금 protected인 멤버는 같은 패키지안에서 접근가능하다고 잘못 알고 계신 것 같습니다. 그렇지 않습니다."

이런! 다시 보니 제가 이렇게 써놓았었군요. 이건 명백히 잘못된 내용입니다. 핸드폰에서 쓰다가 복사 붙여넣기 중에 무언가 잘못된 듯 싶습니다. 죄송.

5555의 이미지

먼저
1."access qualifier (즉 public,private,protected 키워드)가 없는 경우에 같은 패키지에서 접근 가능하고 다른 패키지에서 접근 불가능합니다." 이를 저는 access qualifier 가 없는 경우에 '만'접근가능하다고 말씀하시는 것으로 오해한것 같습니다. access qualifier 중 protected,publuc은 같은패키지내에서 접근 가능한데 access qualifier 이 없는경우에 라고 말씀하셔서 오해한것 같습니다. 제가 오해한게 맞겠죠?

다음으로
2.코드 내용
16행을 protected로 고치면 돌아가는것은 저도 알고있습니다 제 근본적인 질문을 이해 못하신것 같아요
"모든 class가 Object를 상속하고 있다고 배웠습니다 여기서 clone은 Object라고 배웠습니다. 여기서 A는 클래스에서 clone을 오버라이딩 하지않아도 Object를 상속하는 상태이니까 따로 재정의 하지않고..." 이 부분과 "Object에게 상속을 받으면 따로 재정의하지 않아도 매서드를 사용할수 있어야 되는것 아닌가요?
protect가 다른패키지(외부에서 접근)에서 접근하더라도 상속 관계이면 사용 할수 있는거 아닌가요" 부분 에서 설명 드렸는데
모든 클래스는 Object를 상속하므로 Point class가 clone을 재정의(오버라이딩) 하지 않아도 clone을 멤버로 갖고있으니 메인 메서드에서 Point형 인스턴스를 만들었을 때 이 인스턴스를 이용해서 clone으로 접근할때 그것이 가능해야 하지않은것인가라고 질문드린거였습니다. 다시한번 말씀드리자면 Point는 clone을 재정의 하지않은 상태에서의 접근을 말한것입니다.

익명 사용자의 이미지

> Point class가 clone을 재정의(오버라이딩) 하지 않아도 clone을 멤버로 갖고있으니 메인 메서드에서 Point형 인스턴스를 만들었을 때 이 인스턴스를 이용해서 clone으로 접근할때 그것이 가능해야 하지않은것인가

앞서 말씀드렸듯이 "Point는 clone을 멤버로 가지고 있지 않습니다". 제 마지막 댓글을 잘 읽어보세요. Point가 clone을 오버라이드하면 그때서야 Point가 clone을 멤버로 가지게 됩니다. 만약에 어떤 클래스에 정의되어있지 않은 메소드가 호출되면 그 호출은 상위 클래스로 전달됩니다. 이 과정을 "상위 클래스로의 호출 전파"라고 부릅시다. 만약에 최상위 클래스 Object도 그 메소드를 가지고 있지 않으면 컴파일 타임 에러입니다. 즉, 31행의 clone 호출은 "상위 클래스로의 호출 전파"를 통해서 "Object의 clone을 호출"하는 것입니다.

protected 멤버는 1) 같은 패키지에 속해 있는 클래스의 멤버에서 접근가능하고 2) 하위 클래스에서 접근 가능합니다. 그런데 여기서 2번의 의미는 "상위 클래스로의 호출 전파"를 통해서 접근 가능하다는 뜻입니다.

Object는 java.lang에 속해 있으니 "Object의 clone"을 호출하려면 1) 호출하는 쪽이 java.lang에 속해 있거나 아니면 2) "상위 클래스로의 호출 전파"를 통해서 "Object의 clone"에 접근할 수 있어야 합니다.

InstanceCloning의 패키지를 java.lang으로 바꾸면 1번 덕분에 31행이 성공하고, InstanceCloning이 Point를 상속하면 2번 덕분에 31행이 성공합니다.

p.s. "하위 클래스로의 호출 전파"는 없을까요? class Y extends X, class Z extends Y, X x = new Z(), x.foo() 같은 시나리오를 만들어서 접근 제어자를 가지고 다양하게 실험해보세요. "상위 클래스로의 호출 전파" 와 "하위 클래스로의 호출 전파"를 이해하면 상속의 의미를 이해하는 것입니다.

66667의 이미지

조금은 고민이 풀릴것같습니다
저는 상속관계의있는 두클래스가 있을때 하위클래스를 인스턴스화 시키면 이 인스턴스가 상속하는 상위 클래스의 멤버에 접근할수 있다고 생각했고 여기서 Pointer가 하위클래스이며 Object가 상위클래스 이고 Point를 인스턴스 화시킨 org이며 이 인스턴스가 Object 클래스에 접근할수 있으니 Point 클래스가 clone을 재정의 하지않아 멤버로 같지않아도 말씀하신 상위클래스로 호출전파하여 접근 할수 있을거 라 생각했습니다 근데 제가 마지막 댓글을보며 이해한것인데 클래스의 관점에서보면
InstanceCloning이 Point와 상속관계가 아니니 상위 호출또한 할수없다라고 이해했습니다 혹시 맞을까요?

777의 이미지

클래스만 보면Point 가 clone을 멤버로 갖지않는것은 알고있습니다 근데 Object를 상속하니 하위클래스는 상위클래스의 멤버에 접근할수있다(private 제외)는것 때매 갖고있다고 말씀드렸습니다

익명 사용자의 이미지

넵 맞게 이해하신 듯 합니다~.

7777의 이미지

이제 알바 편히할수있겠네요 감사합니다
끝으로 자바 추천도서가 있으신가요 지금 보고있는책은 내용도 부실하고 하나하나 앞뒤설명없이결론만 내리는것같아서요. 여건상 독학을해야하거든요

익명 사용자의 이미지

알바끝나고 집에가서 빨리 돌랴보고싶네요

88899의 이미지

package TT2;
 
 
 
class Point implements Cloneable
{
      private int xPos;
      private int yPos;
 
      public Point(int x, int y)
      {
           xPos=x;
           yPos=y;
      }
      public void showPosition()
      {
            System.out.printf("[%d, %d]", xPos, yPos);
            System.out.println("");
      }
 
  /* public Object clone() throws CloneNotSupportedException     //16행
   {
        return super.clone();
 } //19행  */
}
 
class InstanceCloning extends Point
{ 
	public InstanceCloning(int a,int b)
	{
		super(a,b);
 
	}
      public static void main(String[] args)
      {
            Point org=new Point(3, 5);
            Point cpy;
 
            try
            {
            	  cpy=(Point)org.clone(); //31행
                  org.showPosition();
                  cpy.showPosition();
            }
            catch(CloneNotSupportedException e)
            {
                  e.printStackTrace();
            }
      }
}

에러내용 : The method clone() from the type Object is not visible
즉 clone을 찾을 수가 없다.흐..

익명 사용자의 이미지

흐음... 질문,답변에 대해 서로 여러가지 오해가 섞인듯 합니다. 다시 최대한 간단 명료하게 정리를 해볼게요.

클래스 X의 protected 멤버는 1) X와 같은 패키지에 속한 클래스의 메소드에서 접근 가능하고, 2) X의 하위 클래스에서 "this를 통해" 접근 가능합니다.

제가 앞서 설명했던 2)는 질문자님이 오해하고 계신 바를 잘못 파악하고 대답한 듯 합니다. 아래 예시를 참고하세요.

class X {
    protected foo() {
    }
}
 
class Y extends X {
    public void bar() {
        foo();     // 성공, (1) 해당 : X, Y 는 같은 패키지, (2) 해당 : X의 하위 클래스 Y에서 this를 통한 호출.
        clone();   // 성공, (1) 해당 안됨 : Object는 java.lang에 속함. (2) 해당 : Object의 하위 클래스 Y에서 this를 통한 호출
 
        X x = new X();
 
        x.foo();   // 성공, (1) 해당 : X, Y 는 같은 패키지, (2) 해당 안됨 : Y는 X의 자식이지만 this를 통하지 않은 호출.
        x.clone(); // 실패, (1) 해당 안됨 : Object는 java.lang에 속함. (2) 해당 안됨 : Y는  Object의 하위 (손자) 클래스이지만 this를 통하지 않은 호출.
    }
}

try/catch 는 생략했습니다. 지금 고민하고 계신 부분은 네 번째 x.clone() 호출에 해당됩니다.

익명 사용자의 이미지

코드 부분 오타 수정 및 약간의 추가 설명. X는 그대로 두고 Y를 java.lang에 속하도록 코딩해서 마지막 라인이 성공하는 지 테스트해보시면 좋을 듯.

class X {
    protected void foo() {
    }
}
 
class Y extends X {
    public void bar() {
        foo();     // 성공, (1) 해당 : X, Y 는 같은 패키지, (2) 해당 : X의 하위 클래스 Y에서 this를 통한 호출.
        clone();   // 성공, (1) 해당 안됨 : Y는 디폴트 패키지에 속하고 Object는 java.lang에 속함. (2) 해당 : Object의 하위 클래스 Y에서 this를 통한 호출
 
        X x = new X();
 
        x.foo();   // 성공, (1) 해당 : X, Y 는 같은 패키지, (2) 해당 안됨 : Y는 X의 자식이지만 this를 통하지 않은 호출.
        x.clone(); // 실패, (1) 해당 안됨 : Y는 디폴트 패키지에 속하고 Object는 java.lang에 속함. (2) 해당 안됨 : Y는  Object의 하위 (손자) 클래스이지만 this를 통하지 않은 호출.
    }
}

999의 이미지

만약 생성할려고 하면 static으로 바꾸라고 나오는데요..?
Cannot make a static reference to the non-static method foo() from the type Point

4242의 이미지

저게 일반 매서드에서 호출하면 정상인데 main 매서드에서 호출하면 저 에러가 뜨네요? 이것은 왜그런가요?

익명 사용자의 이미지

static 메소드는 this에 접근할 수 없지요. static의 의미가 그렇습니다. 클래스 X와 밀접한 관련이 있지만 X의 특정 instance는 필요없는 작업의 경우에 X의 static메소드로 만든다고 생각하시면 됩니다. static이 아닌 메소드는 반드시 어떤 instance를 통해서만 호출될 수 있지만 static 메소드는 instance 없이 호출될 수 있습니다. 자바에서는 main은 static 이어야만 합니다. 프로그램이 시작할 때에는 어떤 클래스의 instance도 없는 상태에서 시작한다는 의미에서 자연스러운 선택이지요.

5555222의 이미지

protected는
1.동일클래스
2.동일패키지
3.상속을 받은경우(동일패키지가 아니어도)
이 세가지사항중 하나라도 해당될경우 접근가능하다고 배웠습니다 이에대한 clone의 접근에관한 의문점을말씀드린거입니다

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.