어려울 거 같아서 미뤄뒀던 프로그래밍 공부 이번에 숨 딱 참고 Java 다이브 💦
프로그램에서 표현하고자 하는 기능을 묶기 위한 단위에요. 객체가 중심이 되는 프로그래밍 기법을 객체지향 프로그래밍이라고 해요.
객체를 생성하기 위해서는 객체의 설계도가 필요한데, 이러한 역할을 클래스가 해줘요. 공장에서 하나의 설계도를 사용하여 여러 개의 제품을 생산할 수 있는 것처럼 하나의 클래스를 통해 동일한 구조를 갖는 객체를 여러 개 생성할 수 있어요.
class 클래스이름{
멤버변수;
void 메서드이름(){...}
}
class Calc{
int max; // 멤버변수, 프로퍼티
int min = 0;
void plus(){
//...
}
}
class Calc{
...
}
public class Main{
public static void main(String[] args){
/*
< 객체의 선언 >
클래스이름 객체이름;
*/
Calc c1;
/*
< 객체의 할당 >
객체이름 = new 클래스이름();
*/
c2 = new Calc();
/*
< 선언과 할당의 통합 >
클래스이름 객체이름 = new 클래스이름();
*/
Calc c3 = new Calc();
}
}
class Calc{
/*
값이 대입되지 않은 멤버 변수를 갖는 클래스
-> 클래스란 객체를 위한 틀을 제공하는 것이기 때문에, 클래스 작성 과정에서 멤버 변수에 대입된 값은, 객체를 통하여 멤버변수의 값을 지정하기 전까지 사용될 "기본값"으로서의 의미예요.
-> 객체를 통하여 새로운 값이 대입되면 클래스 작성시에 멤버변수에 대입한 값은 의미를 잃어버리게돼요.
-> 때문에 일반적으로 클래스 작성시에는 멤버변수에 값을 지정하지 않아요.
*/
int max;
public static void plus(){
...
}
public static void minus(){
...
}
public static void multiply(int x, int y){
...
}
public static void divide(int x, int y){
...
}
}
public class Main{
public static void main(String[] args){
Calc c = new Calc();
c.plus(); // (1) 객체 안에 포함된 변수나 메서드는 점(.)으로 연결하여 접근할 수 있어요.
int num = c.max; // (2) 객체안에 포함된 변수의 값을 다른 변수에 복사할 수 있어요. 변수 = 객체이름.멤버변수;
c.max = 200; // (3) 객체안에 포함된 변수의 값에 다른 값을 대입할 수 있어요. 객체이름.멤버변수 = 값;
c.minus(); // (4) 객체 안에 포함된 메서드를 호출할 수 있어요. 객체이름.메서드이름();
c.multiply(10, 20); // (5) 객체 안에 포함된 메서드에 파라미터를 전달할 수 있어요. 객체이름.메서드이름(값1, 값2, ..., 값n);
c.multiply(30, 40); // (6) 같은 클래스를 통하여 생성된 객체라 할지라도 서로 다른 값을 대입하면 서로 독립적인 형태로 존재하게 돼요.
}
}
class Calculation{]
public static void plus() { ... }
public static void minus() { ... }
public static void multiply() { ... }
public static void divide() { ... }
}
class Calculation{]
int num; // 멤버변수(= 전역변수, global variable) : 클래스 안에서 선언된 변수로서, 클래스 블록범위 안에서 유효해요.
public static void plus() {
int x = 0; // 지역변수(= local variable) : 메서드 안에서 선언된 변수로서, 메서드의 블록을 빠져나가지 못해요. 그러므로 다른 메서드는 해당 변수를 인식하지 못해요. 이 규칙은 조건문, 반복문과 같은 블록{}을 형성하는 모든 경우에 해당돼요.
}
public static void minus() { ... }
public static void multiply() { ... }
public static void divide() { ... }
}
클래스 안에서 this를 사용하여 자기자신을 표현해요.
class User{
String name; // 전역변수 "자바학생"이 입력됌
public void setName{
String name; //지역변수 "사용자" 가 입력됌
name = "사용자";
this.name = "자바학생";
}
}
class User{
public String getName(){
String name = "자바학생";
return name;
}
public void sayName(){
String myname = this.getName();
System.out.println(myname);
}
}
-> getName()을 호출하고 있는 메서드는 this키워드를 사용하여 현재 클래스 안에 포함된 다른 메서드임을 명시하고있어요. 하지만 메서드의 경우 다른 클래스의 메서드를 이름만으로 호출할 수 있는 방법이 없기때문에, this.getName(); 가 아닌, getName()만 사용하더라도 코드 가독성의 문제는 없기 때문에 잘 사용하지 아요.
class Member{ //(2) 코드상 나타나지는 않지만 객체가 생성되면서 자동으로 실행
Member(){
// 이 안은 객체가 생성될 때 자동으로 호출된다.
}
}
public class Main {
public static void main(String[] args){
Member m1 = new Member(); // (1) 객체 생성
}
}
class User{
User(){
// 생성자는 있지만, 내용은 비어있다.
}
}
public class Main {
public static void main(String[] args){
User user = new User(); //
}
}
class Article{
int seq; // 글 번호
String subject; // 글 제목
String writer; // 작성자
Article(int seq, String subject, String writer){
this.seq = seq;
this.subject = subject;
this.writer = writer;
}
void print() {
System.out.println("글 번호 : " + this.seq);
System.out.println("글 제목 : " + this.subject);
System.out.println("작성자 : " + this.writer);
}
}
public class Main09 {
public static void main(String[] args) {
Article article = new Article(1, "과학", "아인슈타인");
article.print();
}
}
/*
출력결과)
글 번호 : 1
글 제목 : 과학
작성자 : 아인슈타인
*/
공통 : 영어 + 숫자 + 언더바(_)의 조합이고, 첫 글자는 반드시 영어로 표기해요.
class MyClass
class Student
class NetworkHelper
int age;
int maxNumber;
Stiring userName;
final double PI;
final int COLOR;
다음 다이브에서 또 만나요 🌊
출처
https://media.giphy.com/media/l2Je1bFuOpkNpyqYM/giphy.gif
https://media.giphy.com/media/Jbb3KS22397YQ/giphy.gif