독서 천재가 된 홍대리

|




독서 천재가 된 홍대리
국내도서
저자 : 이지성,정회일
출판 : 다산라이프 2011.08.29
상세보기




독서 천재가 된 홍대리

(운명을 바꾸는 책 읽기 프로젝트)



이책은 몇년전에 읽은 책인데 리뷰를 쓰려다보니까 기억이 가물해서  다시 읽었다(...)

역시 한번 더 읽으니 새로운 것들이 보이고, 그전에 느끼지 못했던 감정과 감동들도 얻었다.


우선 이책은 저자 이지성과 정회일 분이 겪은 일을 바탕으로 홍대리라는 가상의 인물을 통해서

독자들이 쉽게 독서에 다가갈 수 있게 만들었다. 

회사에서 짤리게 생긴 홍진수라는 사람이 책을 통해서 인생을 바꾼다는 이야기이다.

처음에는 독서 습관을 들이기 부터 시작한다.


운명을 바꾸는 책 읽기를 하려면 아래와 같은 절차로 진행이 된다.


1.무조건 2권 읽기

2.100일에 33권 읽기(주제 상관없음)

3.1년에 자신의 업무에 관련된 전문서적 100권 읽기

4.100일동안 CEO 10인 만나기

5.1년에 365권 일기


위에 내용을 보면 2번째부터 심각해져서 3번 부터는 무지막지해진다.

직장 생활을 하면서 정말 저게 가능한지에 대해서는 나도 의문이 많이 들었다. 하지만 성공한 사람들의

수기가 책의 부록으로 있으며 인터넷 카페에서도 활발히 진행되고 있다.


3번의 1년에 100권읽기는 아래의 방법으로 접근해야한다.


<자기 업무 분야에서 최고가 되기 위한 1년 100권 독서>

1.업무 분야의 고전으로 꼽히는 책을 한 달마다 10권씩 산다.

2.1주일에 2권씩 읽는다.

3.반드시 알아야 할 부분에는 밑줄을 치고 여백에 자신의 생각을 적는다.

4.한 챕터씩 요약정리하고 중요한 내용은 따로 메모하거나 녹음한 후 출퇴근 시간을 이용해

 읽고 들으면서 자신의것으로 소화한다.

5.주말마다 두 권의 책에 대한 리뷰를 쓴다.



책에서의 감동을 느낀 좋은 글귀들을 몇줄 적어 봅니다.


"책은 단순한 정보의 집합체가 아닙니다. 수많은 학자와 저술가들은 자신의 온 생애를 바쳐 찾은 진리를

책으로 씁니다. 과학자,수학자,예술가,경영인,정치인들도 마찬가지입니다"


"특정분야에서 성공한 사람들이 쓴 책에는 보통 30년의 노하우가 담겨 있어요. 

 100권의 전문 분야 책을 읽으면 3000년의 내공이 쌓이는 것과 마찬가지에요"



독서에 대해서 아무것도 모르는 사람이 봐도 충분히 감동과 희망을 볼 수 있을것같다.

And

[C#] Virtual(가상) vs Abstract(추상) vs Interface(인터페이스)

|

OOP개념에서 상속을 이야기할 때 Virtual이나 Abstract 한정자가 사용이됩니다.

두개를 사용하면서 헷갈리는 점을 정리했습니다. 또한 Interface와 비슷한 기능을 제공하는데

같이 비교해보겠습니다.


1.Virtual ( 가상 키워드 )


virtual 키워드는 메서드,속성, 인덱서 또는 이벤트 선언을 한정하는데 사용됩니다.

파생 클래스에서 필요에 따라서 재정의(override) 할 수 있지만  필수적으로 재정의 할 필요는 없습니다.

Virtual 한정자를 사용한 클래스는 완벽한 기능을 제공할 수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Animal
{
   public virtual void Speak()
   {
        Console.WriteLine("Nothing!");
   }
}
 
public class Dog : Animal
{
    public override void Speak()
    {
        Console.WriteLine("멍멍!");
    }
}
 
Dog temp = new Dog();
temp.Speak();//멍멍!
cs




2.abstract (추상 키워드 )

abstract 키워드를 사용하면 불완전하여 파생 클래스에서 구현해야하는 클래스 및 클래스 멤버를 만들수 있습니다.
추상클래스의 사용 목적은 여러개의 파생 클래스에서 공유할 기본 클래스의 공통적인 정의를 제공하는 것입니다. 
추상 클래스는 인스턴스화할 수 없습니다.

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public abstract class Animal
{
    public abstract void Speak();
    
}
 
public class Dog : Animal
{
    public override void Speak()
    {
        Console.WriteLine("멍멍!");
    }
}
 
  Dog temp = new Dog();
  temp.Speak();//멍멍!
cs



3.Interface (인터페이스)

 

인터페이스는 abstract와 비슷하지만 멤버필드(변수)를 사용할 수 없습니다. 대신에 프로퍼티는 사용이 가능합니다.

인터페이스는 보통 여러클래스에 공통적인 기능을 추가하기 위해서 사용합니다.


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
public interface Animal
{
    void Speak();
 
    string Name
    {
        get;
        set;
    }
  
}
 
class Dog : Animal
{
    private string name;
 
    public void Speak()
    {
        Console.WriteLine(name + "->멍멍!");
    }
 
    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
        }
    }
}
 
Dog temp = new Dog();
temp.Name = "흰둥이";
temp.Speak(); //흰둥이->멍멍!
cs




4.결론


-Vritual은 하나의 기능을 하는 완전한 클래스이며, 파생클래스에서 상속해서 추가적인 기능추가 및 virtual 한정자가 달린 것을 재정의해서

 사용가능합니다.


-Abstract는 여러개의 파생 클래스에서 공유할 기본 클래스의 공통적인 정의만 하고 ,파생클래스에서 abstract 한정자가 달린 것을

 모두 재정의(필수)해야 합니다.


-Interface에서도 abstract와 비슷하지만 멤버변수를 사용할 수 없습니다. 

 보통 abstract는 개념적으로 계층적인 구조에서 사용이 되며(동물이나 어떤 사물의 계층적인 구조가있을때) Interface는 서로다른 계층이나

 타입이라도 같은기능을 추가하고 싶을때 사용합니다.(사람이나 기계가 말을하게(speak)하는 인터페이스를 추가할때)

'프로그래밍 > C#' 카테고리의 다른 글

[C#] 델리게이트 ( delegate , 대리자 )  (0) 2015.04.22
[C#] Dispose VS Finalize  (0) 2015.04.14
[C#] Using 사용  (0) 2015.04.01
[C#] string 과 StringBuilder 사용  (1) 2015.03.31
[C#] 박싱 과 언박싱 (Boxing & UnBoxing)  (0) 2015.03.30
And

[C#] Using 사용

|

사용 용도는 2가지가 있습니다.


1.지시문(Directive)


다른 네임스페이스에 정의된 타입을 Import 하거나, 네임스페이스에 대한 별칭을 만들때 사용한다.


1
2
using System.Text; //코드 상단에 네임스페이스 정의
using Project = PC.MyCompany.Project; // 별칭
cs



2.문장(Statement) *


개체의 범위를 정의할때 사용한다. 그 범위를 벗어나면 자동으로 Dispose 된다.


File이나 Font, DB Connection 관련 클래스들은 관리되자 않는 리소스에 액세스 합니다. 다 사용후 적절하게 Dispose해서 자원을

반납해야 합니다. 하지만 종종 Dispose를 하지 않아서 리소스가 낭비되거나 DB Connection 같은 것을 Open만하고 Close하지 않으면

문제가 발생합니다. 이때 일일이 Close하지 않고 Using을 이용하면 그 범위를 벗어나면 자동으로 Dispose 되서 관리가 쉬워집니다.



1
2
3
4
5
6
using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlCommand command = new SqlCommand(queryString, connection);
    command.Connection.Open();
    command.ExecuteNonQuery();
}
cs


위처럼 Connection을 Using 구문으로 사용하면 {} 범위를 벗어나면 자동으로 Dispose가 됩니다.

using 문은 개체의 메서드를 호출하는 동안 예외가 발생하는 경우에도 Dispose가 호출되도록 합니다. 

try 블록 내에 개체를 배치한 다음 finally 블록에서 Dispose를 호출해도 동일한 결과를 얻을 수 있습니다. 


실제로 이 방식은 컴파일러에서 using 문이 변환되는 방식입니다.

이전의 코드 예제는 컴파일 타임에 다음 코드로 확장됩니다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
    SqlConnection connection = new SqlConnection(connectionString);
 
    try 
    {            
        SqlCommand command = new SqlCommand(queryString, connection);
        command.Connection.Open();
        command.ExecuteNonQuery(); 
    }
    finally
    {
        if (connection != null)
            ((IDisposable)connection).Dispose();
    }
}
 
cs


And