'2019/08/19'에 해당되는 글 3건

728x90

Visual Studio 에서 자주 사용하는 단축키 정리


 라인 삭제

 CTRL + L

 라인 복사

 현재 커서가 위치한 줄에서 CTRL + C, 원하는 줄로 이동하여 CTRL + V

 코드 정렬

 CTRL + K + F

 선택 영역을 주석으로 처리

 CTRL + K, C

 선택 영역을 주석처리 제거

 CTRL + K, U

 대응하는 괄호 찾기(이동)

 CTRL + ]

 화면 글꼴 크게/작게 보기

 CTRL + 마우스 휠 누르면 화면 글꼴이 커지고 작아진다.


블로그 이미지

Link2Me

,
728x90

클래스의 멤버 변수를 private, public 으로 선언할 것인가에 따라 정보은닉, 정보공개를 고민하게 된다.

private 로 선언하면 getter 메소드, setter 메소드를 구현해야 한다.


C# 언어에서는 다양한 이유로 프로퍼티의 사용을 장려한다. 지금까지도 타입(type)에서 public 데이터 변수를 사용하거나, get/set류의 메서드를 직접 만들어서 사용하고 있다면 이제 그런 방법을 사용하지 않는 것이 좋다. 프로퍼티는 우리가 만든 타입의 값을 외부에서 접근할 수 있도록 하면서 동시에 객체지향에서 논의되는 캡슐화를 지원한다. 프로퍼티는 데이터 멤버처럼 접 근가능하면서 메서드의 형태로 구현되는 C# 언어의 요소이다.


프로퍼티(속성)를 사용하면 클래스가 구현 또는 코드를 숨기는 동시에 값을 가져오고 설정하는 방법을 공개적으로 노출할 수 있다.
- get 속성 접근자는 속성 값을 반환하고, set 접근자는 새 값을 할당하는데 사용한다.
- set 접근자의 value 키워드는 set 접근자가 할당하는 값을 정의하는데 사용한다.
- set 접근자만을 구현하면 쓰기 전용, get 접근자만을 구현하면 읽기 전용이다.
- value : set 접근자 사용 시 사용되는 암묵적 매개변수


자동구현 프로퍼티

using System;

namespace Property
{
    class Test
    {
        private int x;
        public int X   // 프로퍼티
        {
            get { return x; }
            set {
                x = value; // value : set 접근자 사용시 사용되는 암묵적 매개변수
            }
        }
    }

    class Person
    {
        public string Name { get; set; } // 자동 구현 프로퍼티
        public int Age { get; } // 읽기전용, 자동 구현 프로퍼티
        public int grade { get; } = 5; // 자동속성초기화
        public Person(string name, int age) // 생성자
        {
            this.Name = name;
            this.Age = age;
        }
        
        public override string ToString()
        {
            return $"name={Name}, age={this.Age}, grade={grade}";
        }
    }


    public class SaleItem
    {
        public string Name // 자동 구현 프로퍼티
        { get; set; }

        public decimal Price // 자동 구현 프로퍼티
        { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Test t1 = new Test();
            t1.X = 5000;              // 프로퍼티 set 접근자를 통한 값 지정
            Console.WriteLine(t1.X);  // 프로퍼티 get 접근자를 통한 출력

            Person a = new Person("Tom", 14);
            Console.WriteLine(a);

            var item = new SaleItem { Name = "구두", Price = 150000 };
            Console.WriteLine($"{item.Name}의 판매 가격은 {item.Price}");
        }
    }
}


Program.cs


'C# > 문법 및 기능' 카테고리의 다른 글

C# 인터페이스  (0) 2019.08.18
C# 구조체(Struct)  (0) 2019.08.14
C# 접근 제한자(Access Modifier)  (0) 2019.08.13
자바와 C#의 차이점  (0) 2016.12.27
C# NameValueCollection  (0) 2016.03.20
블로그 이미지

Link2Me

,
728x90

추상 클래스
추상 클래스(abstract class)란 하나 이상의 추상 메소드(abstract method)를 포함하는 클래스이다.
- 추상 메소드는 선언만 있고 구현이 없는 메서드이며 선언부에 'abstract' 라는 키워드를 붙인다.
- 추상 메소드가 포함되었다면 클래스도 추상 클래스이므로 클래스명 앞에도 'abstract' 키워드를 붙여야 한다.
- 추상 클래스는 추상 메서드를 포함하고 객체화 할 수 없다는 점만 제외하고 일반 클래스와 다르지 않으며 생성자, 멤버변수와 일반 메서드를 가질 수 있다.
- 추상 클래스는 다른 클래스들에게서 공통으로 가져야하는 메소드들의 원형을 정의하고 그것을 상속받아서 구현토록 하는데 사용된다.
- 해당 추상클래스를 상속받는 자식 클래스들은 반드시 추상메서드를 상속받아 재정의(오버라이딩)해야 한다.


public abstract class 클래스명 {
  필드
  생성자
  메서드
  추상메서드
}


package ex_abstract;

public abstract class Animal {
    // 추상 클래스(abstract class)란 하나 이상의 추상 메소드(abstract method)를 포함하는 클래스
    // 추상 메소드가 포함되었다면 클래스도 추상 클래스이므로 클래스명 앞에도 'abstract' 키워드를 붙여야 한다.
    public String aType;
    public void move() {
        System.out.println("동물이 어슬렁 어슬렁 움직인다.");
    }
    abstract void sound(); // 추상(abstract) 메서드는 선언만 있고 구현이 없는 메서드
}

package ex_abstract;

public class Dog extends Animal {
    public void move() {
        System.out.println("노곤하개");
    }
   
    @Override
    void sound() {

        // 추상클래스를 상속받는 자식 클래스들은 반드시 추상메서드를 상속받아 재정의(오버라이딩)해야한다.

        System.out.println("노곤하개 컹컹");
    }
}

package ex_abstract;

public class Cat extends Animal  {
   
    public Cat() {
        this.aType ="고양이과 동물";
    }

    @Override
    void sound() {
        // 추상클래스를 상속받는 자식 클래스들은 반드시 추상메서드를 상속받아 재정의(오버라이딩)해야한다.
        System.out.println("고양이 냐옹");
    }

}

package ex_abstract;

public class Main {

    public static void main(String[] args) {
        Dog dog = new Dog();
        Cat cat = new Cat();
        dog.move(); // 오버라이드된 메소드 호출 ==> 노곤하개
        cat.move(); // 추상클래스 메소드 호출 ==> 동물이 어슬렁 어슬렁 거린다.
        dog.sound(); // 자식 클래스의 구현된 메소드 호출 ==> 노곤하개 컹컹
        cat.sound(); // 자식 클래스의 구현된 메소드 호출 ==> 고양이 냐옹
    }
}


ㅇ 부모 클래스의 생성자를 호출하려면 super 키워드를 사용해야 한다.

package ex_abstract;

public abstract class Animal {
    // 추상 클래스(abstract class)란 하나 이상의 추상 메소드(abstract method)를 포함하는 클래스
    // 추상 메소드가 포함되었다면 클래스도 추상 클래스이므로 클래스명 앞에도 'abstract' 키워드를 붙여야 한다.
    public String name;
   
    public Animal() {
        super();
    }
    public Animal(String name) {
        this.name = name;
    }
    public void move() {
        System.out.println("동물이 어슬렁 어슬렁 움직인다.");
    }
    abstract void sound(); // 추상(abstract) 메서드는 선언만 있고 구현이 없는 메서드
}

package ex_abstract;

public class Cat extends Animal  {
   
    public Cat(String name) {
        super(name); // 부모 클래스의 생성자를 호출하려면 super 키워드를 사용해야 한다.
    }

    @Override
    void sound() {
        // 추상클래스를 상속받는 자식 클래스들은 반드시 추상메서드를 상속받아 재정의(오버라이딩)해야한다.
        System.out.println("고양이 냐옹");
    }

}

package ex_abstract;

public class Dog extends Animal {
   
    public Dog() {
        super(); // 부모 클래스의 생성자를 호출하려면 super 키워드를 사용해야 한다.
    }

    public Dog(String name) {
        super(name); // 부모 클래스의 생성자를 호출하려면 super 키워드를 사용해야 한다.
    }

    public void move() {
        System.out.println("노곤하개");
    }
   
    @Override
    void sound() {
        // 추상클래스를 상속받는 자식 클래스들은 반드시 추상메서드를 상속받아 재정의(오버라이딩)해야한다.
        System.out.println("노곤하개 컹컹");
    }
}

package ex_abstract;

public class Main {

    public static void main(String[] args) {
        Dog dog = new Dog("송백구");
        Cat cat = new Cat("조나비");
        dog.move(); // 오버라이드된 메소드 호출
        cat.move(); // 추상클래스 메소드 호출
        dog.sound(); // 자식 클래스의 구현된 메소드 호출
        cat.sound(); // 자식 클래스의 구현된 메소드 호출
        System.out.println("고양이의 이름은 : " + cat.name);
        System.out.println("진돗개의 이름은 : " + dog.name);
    }
}


'안드로이드 > Java 문법' 카테고리의 다른 글

공백으로 문자열 분리  (0) 2019.09.11
Java 제네릭(Generic)  (0) 2019.08.27
[Java] 다형성  (0) 2019.06.30
How to validate IP address with regular expression  (0) 2019.06.17
자바 클래스 개념 이해 예제  (0) 2019.05.27
블로그 이미지

Link2Me

,