안녕하세요 열코입니다.

이번시간에는 html의 div 태그에 대해 알아보도록 하겠습니다.

div 태그는 Division(분할, 나누기)태그로 알려져있으며 html에서 웹 페이지의 내용(텍스트, 이미지, 머리글 등)을 구분하는데 사용됩니다.

div 태그에는 열기(<) 및 닫기(>) 태그가 모두 있어야 하며 특정 데이터나 기능에 대한 섹션을 만들 수 있기 때문에 웹 개발에서 유용한 태그중 하나입니다.


div 태그는 블록 레벨 태그이며 일반 컨테이너 태그입니다.

html의 다양한 태그 그룹에 사용되며 섹션을 만들고 스타일을 적용할 수 있습니다.


css 레이아웃 및 div 태그의 기본 예제입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<html> 
   <head> 
      <title>열코 div 테스트</title> 
<style type=text/css> 
div 
{ 
  color: white; 
  background-color: #333333; 
  font-size: 20px; 
</style> 
   
</head> 
  
 <body> 
   <div> div 태그 </div> 
   <div> div 태그 </div> 
   <div> div 태그 </div> 
 </body> 
</html> 
cs


실행 화면


div 태그안에 컨테이너 태그로 두개 이상의 html 요소를 넣을 수 있으며 함께 그룹화하여 css를 적용할 수 있습니다.

div 태그는 아래 예제에서 웹 페이지의 레이아웃을 만드는데 사용할 수 있습니다.

테이블 태그를 사용하여 만들 수 있지만 테이블 태그는 레이아웃을 수정하는데 매우 복잡합니다.

그러나 div 태그는 매우 유연하여 레이아웃 수정이 쉽습니다.

다음은 div 태그를 이용하여 html 요소를 그룹화한 레이아웃 예제입니다.

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
<html> 
   <head> 
      <title>열코 div 테스트</title> 
      <style type=text/css> 
         .leftdiv 
         { 
         float: left; 
         } 
         .middlediv 
         { 
         float: left; 
         background-color:gray 
         } 
         .rightdiv 
         { 
         float: left; 
         } 
         div{ 
         padding : 1%; 
         color: white; 
         background-color: 009900; 
         width: 30%; 
         border: solid black; 
         
      </style> 
   </head> 
   <body> 
      <div class="leftdiv"> 
         <h1>열코1</h1> 
         <p>열코의 프로그래밍 일기</p> 
      </div> 
 
      <div class="middlediv"> 
         <h1>열코2</h1> 
         <p>열코의 프로그래밍 일기</p> 
      </div> 
 
      <div class="rightdiv"> 
         <h1>열코3</h1> 
         <p>열코의 프로그래밍 일기</p> 
      </div> 
   </body> 
</html> 
cs


실행 결과



다음과 같은 방법으로 css를 사용할 수 있습니다.

1. 클래스 사용

내부 css또는 외부 css에서 특정 div에 클래스를 사용할 수 있습니다.

- 내부 css : <style> 요소 내 html의 <head> 섹션에 클래스 정의

- 외부 css : 별도의 css파일을 만들고 <link>를 사용하여 <head> 섹션에 포함


2. 인라인 css

div에서 직접 css를 사용할 수 있습니다.

이 방법은 클래스가 따로 필요하지 않고 모든 태그를 포함할 수 있으므로 컨테이너 태그로도 사용됩니다.

간단한 예제코드입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<html> 
   <head> 
      <title> 열코 div 테스트 </title> 
   </head> 
   <body> 
      <center> 
         <div style="height:300px; width:500px; color:white; 
            border:1px solid; background-color: 009900;"> 
            <!--open tag of Div!-->
            <caption> 
               <h1>div 인라인 css 테스트</h1> 
            </caption> 
            <h1>div 태그내에 css 스타일 정의
            </h1> 
         </div> 
      </center> 
   </body> 
</html> 
cs


실행결과




이상 'html div 태그 사용법'에 대해 알아보았습니다.

질문 사항은 모두 커뮤니티에서 받습니다. -> 커뮤니티 바로가기

메인 페이지로 이동하시면 더 많은 자료를 볼 수 있습니다.





C언어에서는 키워드 외에는 모든것이 식별자로 처리됩니다.

식별자는 변수, 상수, 함수 및 사용자 정의 데이터(구조체, 클래스 등)에 지정된 이름이 될 수 있습니다.


변수 이름은 영문(대문자, 소문자), 숫자(0~9) 및 특수문자(밑줄 _)로 구성될 수 있습니다.

(일부 컴파일러는 한글을 지원합니다.)


그러나 어떤 변수의 이름도 숫자로 시작할 수 없다고 배웠습니다.

왜일까요?

그 이유를 알아보도록 하겠습니다.


컴파일러에는 다음과 같은 7가지 단계가 존재합니다.


1. Lexical Analysis (어휘 분석)

2. Syntax Analysis (구문 분석)

3. Semantic Analysis (시맨틱 분석)

4. Intermediate Code Generation (중간 코드 생성)

5. Code Optimization (코드 최적화)

6. Code Generation (코드 생성)

7. Symbol Table (심볼 테이블)


각 단계의 자세한 설명은 추후에 하도록 하겠습니다.


컴파일러는 코드 조각을 컴파일하면서 1. 어휘분석 단계에서 역 추적을 피할 수 있습니다.

예를들어 Yeolco라는 변수를 컴파일 1. 어휘분석 단계에서 문자 'Y'를 만날때 컴파일러는 즉시 식별자를 알 수 있습니다.

그러나, 142Yeolco12 같은 변수를 컴파일러는 숫자 또는 식별자가 'Y'에 도달할때 까지 결정할 수 없으며

1. 어휘분석 단계에서 변수임을 식별하기위해 역 추적이 필요합니다.

그러나 이는 컴파일러에서 지원되지 않습니다.




질문 사항은 모두 커뮤니티에서 받습니다. -> 커뮤니티 바로가기

메인 페이지로 이동하시면 더 많은 자료를 볼 수 있습니다.

'C, C++' 카테고리의 다른 글

C 정적(static) 변수  (0) 2018.10.29
C 변수 선언 및 키워드  (0) 2018.10.25
C 표준 입력 함수 scanf  (0) 2018.10.23
C 표준 출력 함수 printf()  (0) 2018.10.22
C++ 가상 함수(Virtual Function)  (8) 2018.10.19
C++ 연산자 오버로딩  (2) 2018.10.12
C++ 함수 오버로딩  (0) 2018.10.11
C/C++ 메모리 동적할당  (0) 2018.10.11

C# 기초다지기 - 상속




안녕하세요 열코입니다.

이번시간에는 C# 상속에 대해 알아보도록하겠습니다.

상속은 객체지향 프로그래밍에서 가장 중요한 개념으로, 클래스를 다른 클래스로 정의할 수 있으며

프로그램을 쉽게 만들고 유지관리를 할 수 있습니다.

또한 코드 재사용을 하여 구현시간을 단축할 수 있습니다.


클래스의 상속

클래스를 만들때 완전히 새로운 데이터 멤버 및 함수를 작성하는 대신 프로그래머는 새 클래스가 기존 클래스의

멤버를 상속해야할때 클래스를 상속할 수 있습니다. 기존 클래스를 기본(상위)클래스라고 하며 상속받은 새 클래스를

파생(하위)클래스라고 합니다.

상속의 개념은 is-a 관계를 구현합니다.

예를들어, 포유류 is a 동물, 개 is a 포유류이며 따라서 개 is a 동물이 될 수 있습니다.

 클래스의 상속은 :(콜론)을 이용하여 상속합니다.


기본클래스와 파생클래스

클래스는 하나 이상의 클래스 또는 인터페이스에서 파생(상속)될 수 있습니다.

여러 클래스 또는 인터페이스에서 데이터와 함수를 상속받을 수 있습니다.

예를들어 C#에서 기본 클래스 Shape에서 파생 클래스 Rectangle 예제입니다.

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
using System;
 
namespace InheritanceApplication {
    class Shpae {
        protected int width;
        protected int height;
 
        public void setWidth(int w) {
            width = w;
        }
        public void setHeight(int h) {
            height = h;
        }
    }
 
    class Rectangle : Shape {
        public int getArea() {
            return (width * height);
        }
    }
 
    class Inheritance {
        static void Main(string[] args) {
            Rectangle rect = new Rectangle();
 
            rect.setWidth(3);
            rect.setHeight(5);
 
            Console.WriteLine("AREA : {0}", rect.getArea());
        }
    }
}
cs


기본 클래스 초기화

파생 클래스는 기본 클래스 멤버 변수와 함수를 상속합니다.

기본 클래스 객체는 파생 클래스가 만들어지기 전에 만들어야합니다.

멤버 초기화 목록에서 기본 클래스 초기화는 base 함수를 사용하여 초기화합니다.

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
using System;
 
namespace RectangleApplication {
   class Rectangle {
      
      //member variables
      protected double length;
      protected double width;
      
      public Rectangle(double l, double w) {
         length = l;
         width = w;
      }
      public double GetArea() {
         return length * width;
      }
      public void Display() {
         Console.WriteLine("Length: {0}", length);
         Console.WriteLine("Width: {0}", width);
         Console.WriteLine("Area: {0}", GetArea());
      }
   }//end class Rectangle  
   class Tabletop : Rectangle {
      private double cost;
      public Tabletop(double l, double w) : base(l, w) { }
      
      public double GetCost() {
         double cost;
         cost = GetArea() * 70;
         return cost;
      }
      public void Display() {
         base.Display();
         Console.WriteLine("Cost: {0}", GetCost());
      }
   }
   class ExecuteRectangle {
      static void Main(string[] args) {
         Tabletop t = new Tabletop(4.57.5);
         t.Display();
         Console.ReadLine();
      }
   }
}
cs



C#의 다중 상속

C#에서는 다중 상속을 지원하지 않지만 인터페이스를 통해 다중 상속을 구현할 수 있습니다.

다음 예제는 인터페이스로 다중 상속을 구현하는 예제입니다.

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
using System;
 
namespace InheritanceApplication {
   class Shape {
      public void setWidth(int w) {
         width = w;
      }
      public void setHeight(int h) {
         height = h;
      }
      protected int width;
      protected int height;
   }
 
   // Base class PaintCost
   public interface PaintCost {
      int getCost(int area);
   }
   
   // Derived class
   class Rectangle : Shape, PaintCost {
      public int getArea() {
         return (width * height);
      }
      public int getCost(int area) {
         return area * 70;
      }
   }
   class RectangleTester {
      static void Main(string[] args) {
         Rectangle Rect = new Rectangle();
         int area;
         
         Rect.setWidth(5);
         Rect.setHeight(7);
         area = Rect.getArea();
         
         // Print the area of the object.
         Console.WriteLine("Total area: {0}",  Rect.getArea());
         Console.WriteLine("Total paint cost: ${0}" , Rect.getCost(area));
         Console.ReadKey();
      }
   }
}
cs



이상 'C# 상속'에 대해 알아보았습니다.

질문 사항은 모두 커뮤니티에서 받습니다. -> 커뮤니티 바로가기

메인 페이지로 이동하시면 더 많은 자료를 볼 수 있습니다.


'C#' 카테고리의 다른 글

C# 기초다지기 - 클래스  (0) 2018.11.08
C# 기초다지기 - 구조체  (0) 2018.11.08
C# 기초다지기 - 문자열  (2) 2018.11.07
C# 기초다지기 - 배열  (1) 2018.11.06
C# 기초다지기 - 상수  (0) 2018.11.06
C# 기초다지기 - 캡슐화  (0) 2018.11.05
C# 기초다지기 - 프로그램 구조  (0) 2018.11.05
C# 기초다지기 - 변수  (0) 2018.11.05

C# 기초다지기 - 클래스




안녕하세요 열코입니다.

이번시간에는 C# 클래스에 대해 알아보겠습니다.

클래스는 구조체와 비슷한 사용자 정의 자료형이지만 메소드(함수)를 가질 수 있습니다.

객체(Object)는 클래스의 인스턴스입니다. 클래스를 구성하는 변수와 메소들르 클래스의 멤버라고 합니다.


클래스 정의하기

클래스 정의는 class 키워드와 클래스의 이름으로 시작합니다.

클래스의 몸체는 중괄호 { }로 둘러싸여있습니다.

다음 예제와 같이 자세히 설명하도록 하겠습니다.

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
using System;
 
namespace SquareApplication {
    class Square {
        private double length;
        public double GetLength() {
            return length;
        }
        public void SetLength(double length_) {
            length = length_;
        }
        public double GetArea() {
            return length * length;
        }
    }
    class mainfunction {
        static void Main(string[] args) {
            Square sq1 = new Square();
            Square sq2 = new Square();
 
            sq1.SetLength(2);
            sq2.SetLength(10);
 
            Console.WriteLine("SQUARE1 AREA : {0}", sq1.GetArea()); // 4 출력
            Console.WriteLine("SQUARE2 AREA : {0}", sq2.GetArea()); // 100 
        }
    }
}
cs


- 액세스 지정자는 멤버에 대한 접근 규칙을 지정합니다.

- public 지정자는 함수 외부에서 직접 접근이 가능합니다.

- private 지정자는 함수 내부에서만 직접 접근이 가능합니다.

- protected 지정자는 상속받은 클래스 내부에서만 직접 접근이 가능합니다.

- 클래스 멤버의 기본 액세스 지정자는 private 입니다.

- 클래스 맴버에 접근하기위해 점(.) 연산자를 사용합니다.


멤버함수 및 캡슐화

클래스의 멤버 함수는 다른 변수와 비슷한 클래스 정의내에 프로토타입을 갖는 함수입니다.

위의 예제에서 SetLength, GetLength, GetArea 함수가 멤버함수를 의미합니다.

C#에서 캡슐화는 액세스 지정자에 의해 결정됩니다.

-> C# 캡슐화 설명보러가기

위의 예제코드는 캡슐화를 구현하기 위해 멤버 변수 length를 private 멤버로 숨기고,

public 메소드를 통해 함수 외부에서 간접적으로 접근하도록 하였습니다.


C# 생성자

클래스의 생성자는 클래스의 새로운 인스턴스(객체)를 생성할때 실행되는 특별한 멤버함수입니다.

생성자를 만들기 위해서는 반환형이 없으며 함수이름이 클래스의 이름과 동일합니다.

다음 예제를 통해 생성자에 대한 개념을 설명하겠습니다.

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
using System;
 
namespace SquareApplication {
    class Square {
        private double length;
        
        public Square() {
            Console.WriteLine("생성자가 호출되었습니다.");
        }        
 
        public double GetLength() {
            return length;
        }
        public void SetLength(double length_) {
            length = length_;
        }
        public double GetArea() {
            return length * length;
        }
    }
    class mainfunction {
        static void Main(string[] args) {
            Square sq1 = new Square(); // 생성자 호출
            Square sq2 = new Square(); // 생성자 호출
 
            sq1.SetLength(2);
            sq2.SetLength(10);
 
            Console.WriteLine("SQUARE1 AREA : {0}", sq1.GetArea()); // 4 출력
            Console.WriteLine("SQUARE2 AREA : {0}", sq2.GetArea()); // 100 출력
        }
    }
}
cs



위 코드에서 23, 24번줄에 Square 클래스의 객체를 생성할 때 정의된 생성자가 호출됩니다.

생성자를 따로 지정하지 않아도 기본(default) 생성자가 호출됩니다.

기본 생성자는 아무일도 하지않는 함수입니다.

생성자는 대게 멤버 변수 값을 초기화하는 용도로 사용됩니다.

또한 생성자에 매개변수를 추가하여 오버라이딩하여 사용할 수 있습니다.

다음 예제를 통해 확인하세요.

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
using System;
 
namespace SquareApplication {
    class Square {
        private double length;
        
        public Square(double length_) {
            length = length_;
            Console.WriteLine("생성자가 호출되었습니다.");
        }        
 
        public double GetArea() {
            return length * length;
        }
    }
    class mainfunction {
        static void Main(string[] args) {
            Square sq1 = new Square(4.0); // 생성자 호출
            Square sq2 = new Square(12); // 생성자 호출
 
            Console.WriteLine("SQUARE1 AREA : {0}", sq1.GetArea()); // 16 출력
            Console.WriteLine("SQUARE2 AREA : {0}", sq2.GetArea()); // 144 출력
        }
    }
}
cs

 

18, 19번줄의 객체를 생성하는 과정에서 매개변수 값을 넘겨주어 생성자에서 멤버 변수의 값을 초기화합니다.



C# 소멸자

소멸자는 클래스의 객체가 지정된 범위를 벗어나 할 일을 모두 끝냈을 때 호출되는 특정 멤버 함수입니다.

접두사 물결(~)이 붙어있으며 생성자와 같이 함수 이름은 클래스의 이름과 동일합니다.

사용자가 정의하지 않아도 기본(default) 소멸자가 제공되며, 대게 메모리를 해제하는데 사용됩니다.

다음 예제로 소멸자에 대해 살펴보도록하겠습니다.

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
using System;
 
namespace SquareApplication {
    class Square {
        private double length;
        
        public Square(double length_) {
            length = length_;
            Console.WriteLine("생성자가 호출되었습니다.");
        }        
 
        ~Square() {
            Console.WriteLine("소멸자가 호출되었습니다.");
        }
 
        public double GetArea() {
            return length * length;
        }
    }
    class mainfunction {
        static void Main(string[] args) {
            Square sq1 = new Square(4.0); // 생성자 호출
            Square sq2 = new Square(12); // 생성자 호출
 
            Console.WriteLine("SQUARE1 AREA : {0}", sq1.GetArea()); // 16 출력
            Console.WriteLine("SQUARE2 AREA : {0}", sq2.GetArea()); // 144 출력
        } // 이 시점에서 소멸자가 생성자의 역순으로 출력됩니다.
    }
}
cs


메인함수내의 Square 클래스의 객체 sq1과 sq2가 차례로 생성되고

27번줄에서 Main함수가 끝남과 동시에 객체 sq1과 sq2가 메모리 해제되며 소멸자가 호출됩니다.

소멸자는 생성자의 역순으로 sq2, sq1 순으로 호출됩니다.



이상 'C# 클래스'에 대해 알아보았습니다.

질문 사항은 모두 커뮤니티에서 받습니다. -> 커뮤니티 바로가기

메인 페이지로 이동하시면 더 많은 자료를 볼 수 있습니다.


'C#' 카테고리의 다른 글

C# 기초다지기 - 상속  (0) 2018.11.09
C# 기초다지기 - 구조체  (0) 2018.11.08
C# 기초다지기 - 문자열  (2) 2018.11.07
C# 기초다지기 - 배열  (1) 2018.11.06
C# 기초다지기 - 상수  (0) 2018.11.06
C# 기초다지기 - 캡슐화  (0) 2018.11.05
C# 기초다지기 - 프로그램 구조  (0) 2018.11.05
C# 기초다지기 - 변수  (0) 2018.11.05

C# 기초다지기 - 구조체




안녕하세요 열코입니다.

이번시간에는 C# 구조체(Struct)에 대해 알아보도록 하겠습니다.


- 구조체란?

구조체는 사용자 정의 데이터 유형(Data Type)으로 int, double 등과 같은 기본적으로 제공되는 변수 유형이 아닌

새로운 유형, 여러가지 유형을 사용하기위해 사용자가 직접 만들어 사용됩니다.

C#에서 구조체는 일반 변수와 같이 값 형식의 데이터 형식입니다. (클래스는 참조형식)



- 구조체 정의하기

구조체를 정의하려면 struct 문을 사용합니다.

struct문은 프로그램에서 두개 이상의 멤버(변수)가 있는 새로운 데이터 형식을 정의합니다.

예를들어, 학생이라는 변수를 만들려고할 때 필요한 멤버들은 이름, 학번, 나이 등이 있습니다.

이를 Student 구조체로 만드는 방법은 다음과 같습니다.

1
2
3
4
5
struct Student {
    public string name;
    public int std_num;
    public int age;
};
cs


struct 키워드를 통해 Student라는 이름의 구조체를 정의하고 { } 대괄호 안에 멤버 변수들을 정의합니다.

정의된 구조체를 프로그램에서 사용하는 예제입니다.

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
using System;
 
struct Student {
    public string name;
    public int std_num;
    public int age;
};
 
public class MyStructTest {
    public static void Main(string[] args) {
        Student std; // 구조체 변수 선언
        Student std2;
 
        std.name = "세모지";
        std.std_num = 20181108;
        std.age = 26;
 
        std2.name = "열코";
        std2.std_num = 20181109;
        std2.age = 27;
 
        Console.WriteLine("Student 1 name : {0}", std.name);
        Console.WriteLine("Student 1 std_num : {0}", std.std_num);
        Console.WriteLine("Student 1 age : {0}", std.age);
 
        Console.WriteLine("Student 2 name : {0}", std2.name);
        Console.WriteLine("Student 2 std_num : {0}", std2.std_num);
        Console.WriteLine("Student 2 age : {0}", std2.age);
 
    }
}
cs


위와 같이 일반 변수처럼 구조체 변수를 선언한 후 구조체 변수의 멤버 변수에 .(점)을 통해 접근합니다.



- C# 구조체 특징

위에서 Student 라는 간단한 구조체를 사용했습니다.

C#에서의 구조체는 전통적인 C/C++의 구조체와 상당히 다른점이 존재합니다.

C# 구조체에는 다음과 같은 특징들이 존재합니다.

- C# 구조체에 메소드, 필드, 속성등을 가질 수 있습니다.

- C# 구조체에 생성자를 정의할 수 있습니다.

- C# 프로그램에서 new 연산자를 이용하여 struct 객체를 생성할 수 있습니다.


- C# 구조체에 기본(Default) 생성자를 정의할 수 없습니다.

- C# 구조체에 소멸자를 정의할 수 없습니다.

- C# 구조체는 다른 구조체나 클래스의 기본 구조체(상속하기 위한)가 될 수 없습니다.



- C# 구조체 vs 클래스

C#에서 구조체와 클래스는 다음과 같은 차이점이 존재합니다.

- 클래스는 참조유형이며 구조체는 값 유형입니다.

- 구조체는 상속을 지원하지 않습니다.

- 구조체는 기본(디폴트) 생성자를 가질 수 없습니다.



이상 'C# 구조체'에 대해 알아보았습니다.

질문 사항은 모두 커뮤니티에서 받습니다. -> 커뮤니티 바로가기

메인 페이지로 이동하시면 더 많은 자료를 볼 수 있습니다.


'C#' 카테고리의 다른 글

C# 기초다지기 - 상속  (0) 2018.11.09
C# 기초다지기 - 클래스  (0) 2018.11.08
C# 기초다지기 - 문자열  (2) 2018.11.07
C# 기초다지기 - 배열  (1) 2018.11.06
C# 기초다지기 - 상수  (0) 2018.11.06
C# 기초다지기 - 캡슐화  (0) 2018.11.05
C# 기초다지기 - 프로그램 구조  (0) 2018.11.05
C# 기초다지기 - 변수  (0) 2018.11.05

to Top