클래스의 초기 화에서 너무 많은 것을 하려고 하지 마라.

맨발의 이미지

오랫동안 프로그램을 해오신 프로그래머 분이시라면 나름데로 프로그램에 대한 자신의 원칙이 있을 줄로 압니다.
의외로 그 '개념'이라는 것은 프로젝트 전반에 거대한 영향을 미치죠..

저도 오늘 또 하나 원칙을 세웠답니다.
'클래스의 초기 화에서 너무 많은 것을 하려고 하지 마라.' ..입니다. ^^*

다음을 봅시다..

class Board1
{
    function Board( $board_id )
    {
        $this->config = $this->GetConfig( $board_id );
        $this->PrintBoard( $this->config[skin] );
    }
 
    function GetConfig( $board_id )
    {
        ...
    }
 
    function PrintBoard( $skin )
    {
        ...
    }
}

아하! 게시판을 출력하는 PHP Class로군요..!!
다른 곳에서 사용 할 때

$board = new Board1( "TEST" );

한 줄이면 간단히 처리 되겠군요.

내친김에 하나 더 볼까요..?

class Board2
{
    function Board( $board_id )
    {
        $this->config = $this->GetConfig( $board_id );
    }
 
    function GetConfig( $board_id )
    {
        ...
    }
 
    function PrintBoard( $skin )
    {
        ...
    }
}

function Board( $board_id ) 안에서 GetConfig와 PrintBoard를 둘다 하던 걸 하나로 줄였군요.
사용 하려면..

$board = new Board2( "TEST" );
$board->PrintBoard( $board->config[skin] );

두 줄을 써야 하는 막노동(?)을 해야 하는군요.
필요없는 손까락 노동만 늘어난 걸까요..?!

하지만, 두번째는 이렇게도 가능 하겠군요..!

$board = new Board2( "TEST" );
$board->config[page_size] *= 2;
$board->PrintBoard( $board->config[skin] );

덕분에 클래스 하나를 덜 만들어도 되겠네요..

예제가 적합한지는 모르겠지만..

클래스의 초기화에서 너무 많은 것을 하려 하면,
그만큼 범용성이 떨어진다는 사실을 얘기 하고 싶네요.

예..?
위에서는 초기화에서 주는 명령이 단 2줄 뿐이지만..
30줄에 해당하는 명령어가 있고
99데서는 그대로 사용해도 되고 단 1번만 다른 용도로 사용된다면요..?

상속 받으세요!

class ExBoard extends Board2
{
    function ExBoard( $board_id )
    {
        parent::Board( $board_id )
        $this->SomeCommand1();
        .
        .
        $this->SomeCommand30();
 
        $this->BoardPrint();
 
        $this->PrintBoard( $this->config[skin] );
    }
}

:)
Forums: 
맨발의 이미지

윗글에서 프로그램 코드 부분에 들여쓰기는 어떻게 하는거죠?!
ㅡ_ㅡ); 다른 분들은 잘 만 되어 있두만.. 모두들 엔드nbsp콜론 이라도 다 넣으시는 건가요..?!

제가 여기 이사온지 얼마 안돼서요.......
쿨럭..!

--------------------------------------------
:: 누구보다 빠르게 남들과는 다르게

wariua의 이미지

tab 문자가 문제입니다. Drupal에서 space 문자는  로 잘 변환해 주는데 tab은 그대로 출력이 되고, 따라서 웹 브라우저가 살짝 무시해서 표시합니다. 불편하시겠지만 tab을 space 문자로 바꾸고 올려주시면 예쁜 코드 표시가 가능합니다-
----
$PWD `date`

$PWD `date`

맨발의 이미지

훨씬 보기 좋아졌군요.. ㅎㅎㅎ

--------------------------------------------
:: 누구보다 빠르게 남들과는 다르게

korone.net의 이미지

지나가다가 딴지 같아서 죄송하지만, 제가 php는 익숙치 않아서 잘 모르겠지만
c++문법으로 다음과 같이 하면 말씀하신 그런 부분은 없을꺼 같은데요.

class Board
{
public:
	Board(int boardId, bool print=false)
	{
		getConfig(boardId);
		if (print) printBoard();
	}
 
	void getConfig(int id) { ... }
	void printBoard() { ... }
};
 
Board board_1(100);
Board board_2(100, true);

-------------------------------------
korone.net qt programming site

korone.net qt programming site

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.